/* The original badge is the fallback; these bounds register the supplied parts. */
.brand-logo{position:relative;display:block;width:100%;aspect-ratio:2048/1719;isolation:isolate}
.brand-complete{display:block;width:100%;height:100%}
.brand-parts{position:absolute;inset:0;visibility:hidden}
.brand-logo.is-assembled .brand-complete{opacity:0}
.brand-logo.is-assembled .brand-parts{visibility:visible}
.brand-m,.brand-meeple,.brand-plate{position:absolute;display:block;max-width:none;object-fit:fill;pointer-events:none;user-select:none}
.brand-m{left:23.730469%;top:0;width:52.832031%;height:53.228621%}
.brand-m{z-index:2}
.brand-meeple{left:41.308594%;top:31.588133%;width:15.673828%;height:19.255381%;z-index:3;transform-origin:50% 95%}
.brand-plate{left:0;top:56.079116%;width:100%;height:43.920884%;z-index:4}
.brand-logo.is-assembled .brand-meeple{animation:meeple-idle 6.2s 1.2s ease-in-out infinite}
@keyframes meeple-idle{
  0%,66%,90%,100%{transform:translateY(0) rotate(0) scale(1)}
  70%{transform:translateY(1%) rotate(-2deg) scale(1.06,.94)}
  75%{transform:translateY(-12%) rotate(-5deg) scale(.98,1.02)}
  79%{transform:translateY(-2%) rotate(4deg) scale(1.04,.96)}
  84%{transform:translateY(-5%) rotate(-2deg) scale(1)}
}
.motion-paused .brand-meeple{animation:none!important;transform:none}
.portal-running{overflow:hidden}
.portal-running .gateway .brand-logo{opacity:0}
.portal-running .gateway-paths{opacity:0;transition:opacity 260ms cubic-bezier(.4,0,.2,1)}
.portal-running .gateway-bottom{opacity:0;transition:opacity 360ms 140ms ease}
.portal-running .gateway-film{transform:scale(1.09);transition:transform 1990ms cubic-bezier(.4,0,.7,1)}
.portal-transition{--portal-duration:1250ms;position:fixed;inset:0;z-index:2000;overflow:hidden;isolation:isolate;touch-action:none;cursor:progress}
/* Warm the real page at its final viewport size while keeping it invisible and inert. */
.portal-transition[hidden]{display:block;visibility:hidden;pointer-events:none}
.portal-destination{position:absolute;inset:0;z-index:0;opacity:0;pointer-events:none;filter:blur(18px) brightness(1.9);-webkit-mask-image:url('assets/portal-window.svg');mask-image:url('assets/portal-window.svg');-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;mask-mode:alpha;transition:opacity 650ms cubic-bezier(.4,0,.2,1)}
.portal-transition.is-travelling .portal-destination.has-preview{opacity:1}
.portal-transition[hidden] .portal-destination{transition:none}
.portal-preview{position:absolute;inset:0;width:100%;height:100%;border:0;visibility:hidden;pointer-events:none;background:#202730;overflow:hidden}
.portal-transition:not([hidden]) .portal-preview.is-selected{visibility:visible}
.portal-flight{position:absolute;left:var(--logo-left);top:var(--logo-top);width:var(--logo-width);height:var(--logo-height);transform-origin:49.145508% 41.215823%;isolation:isolate;z-index:1;will-change:transform}
/* The jump starts in front; the descending meeple passes behind the M. */
.portal-flight .brand-meeple{z-index:5}
.portal-flight .brand-m{z-index:3}
.portal-flight .brand-plate{z-index:4}
.portal-glow{position:absolute;left:49.145508%;top:44%;width:80%;aspect-ratio:1.25;z-index:0;opacity:0;transform:translate(-50%,-50%);pointer-events:none}
.portal-glow::before{content:'';position:absolute;inset:-20%;background:radial-gradient(ellipse at 36% 36%,#ffdfab38 0%,#ffc18316 24%,#ff480000 62%),radial-gradient(ellipse at 66% 57%,#ffbb7624 0%,#ff480000 64%);filter:blur(18px);will-change:transform}
.portal-transition.is-travelling .portal-flight{animation:portal-flight var(--portal-duration) cubic-bezier(.35,0,.8,.6) both}
.portal-transition.is-active .portal-glow{animation:portal-glow-in 600ms 180ms ease both}
.portal-transition.is-active .portal-glow::before{animation:portal-spin 2400ms linear infinite}
.portal-transition.is-travelling .portal-glow{animation:portal-glow-out var(--portal-duration) ease both}
.portal-transition.is-active .brand-plate{animation:plate-recede 480ms 220ms cubic-bezier(.3,0,.5,1) both}
/* A single perspective move accelerates continuously; no intermediate easing resets. */
@keyframes portal-flight{
  from{transform:translate3d(0,0,0) perspective(900px) translateZ(0)}
  to{transform:translate3d(var(--flight-x),var(--flight-y),0) perspective(900px) translateZ(var(--flight-depth))}
}
@keyframes portal-glow-in{from{opacity:0}to{opacity:.4}}
@keyframes portal-glow-out{from{opacity:var(--glow-opacity,.4)}to{opacity:0}}
@keyframes portal-spin{from{transform:rotate(-30deg)}to{transform:rotate(330deg)}}
@keyframes plate-recede{from{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(18%)}}
.portal-status{position:fixed;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
/* The fully focused preview blends into the same real page without a light cover. */
@view-transition{navigation:auto}
html.portal-arriving::view-transition-group(root){animation-duration:320ms}
html.portal-arriving::view-transition-old(root){z-index:2;mix-blend-mode:normal;animation:portal-preview-out 320ms ease both}
html.portal-arriving::view-transition-new(root){z-index:1;mix-blend-mode:normal;animation:none}
@keyframes portal-preview-out{from{opacity:1}to{opacity:0}}
/* Without native snapshots the real page takes over already sharp; do not re-blur it. */
/* Inert destination previews show real HTML/CSS but run no videos or interactions. */
html.portal-preview-document{scroll-behavior:auto}
html.portal-preview-document *,html.portal-preview-document *::before,html.portal-preview-document *::after{animation:none!important;transition:none!important}
html.portal-preview-document .hero-video{display:none}
@media(prefers-reduced-motion:reduce){@view-transition{navigation:none}.brand-meeple{animation:none!important;transform:none!important}.portal-transition,html.portal-arriving::after{display:none}}
@media(forced-colors:active){@view-transition{navigation:none}.brand-parts,.brand-complete{visibility:hidden!important}.portal-transition,html.portal-arriving::after{display:none}}
