/* Compact rear-facing companions overlap the front of their current stop. */
.exp-board{--party-label-y:50px}
.exp-board .exp-pawn{
 --chibi-width:32px;--chibi-height:32px;--party-width:62px;--party-height:40px;
 width:var(--party-width);height:var(--party-height);padding:0;border:0;border-radius:0;
 background:transparent;box-shadow:none;transform:translate(-50%,6px);
 pointer-events:none;isolation:isolate;
}
.exp-board .exp-pawn:has([data-party-size="1"]){--party-width:32px;--party-height:32px}
.exp-board .exp-pawn:has([data-party-size="2"]){--party-width:58px;--party-height:32px}
.exp-board .exp-pawn:after{content:none}
.overworld-party{position:absolute;inset:0;display:block;pointer-events:none}
.overworld-chibi{position:absolute;bottom:0;left:50%;width:var(--chibi-width);height:var(--chibi-height);translate:-50% 0;transform-origin:50% 95%;z-index:2;pointer-events:none}
.overworld-chibi:before{content:"";position:absolute;bottom:-1px;left:15%;width:70%;height:6px;border-radius:50%;background:#12334345;filter:blur(1px);z-index:-1}
.exp-board .exp-pawn .overworld-chibi img{display:block;width:100%;height:100%;object-fit:contain;object-position:center bottom;border-radius:0;transform-origin:50% 95%;filter:drop-shadow(0 2px 1px #0b223c65);user-select:none;-webkit-user-drag:none}
.overworld-party[data-party-size="2"] .overworld-chibi:first-child{left:0;translate:none}
.overworld-party[data-party-size="2"] .overworld-chibi:last-child{left:auto;right:0;translate:none}
.overworld-party[data-party-size="3"] .overworld-chibi:first-child{bottom:8px;z-index:1}
.overworld-party[data-party-size="3"] .overworld-chibi:nth-child(2){left:0;translate:none}
.overworld-party[data-party-size="3"] .overworld-chibi:nth-child(3){left:auto;right:0;translate:none}
.overworld-chibi.is-fallen{opacity:.42;filter:grayscale(.75)}
/* Animate inside the fixed formation so route anchors and touch targets stay put.
   Travel's finite Web Animation overrides this breathing transform, then releases it. */
.exp-board .exp-pawn .overworld-chibi:not(.is-fallen) img{animation:party-breathe 2400ms var(--party-idle-delay,0ms) ease-in-out infinite}
.overworld-chibi:not(.is-fallen):before{animation:party-shadow-pulse 2400ms var(--party-idle-delay,0ms) ease-in-out infinite}
.overworld-chibi:nth-child(2){--party-idle-delay:-800ms}
.overworld-chibi:nth-child(3){--party-idle-delay:-1600ms}
.exp-page-host[inert] .overworld-chibi img,.exp-page-host[inert] .overworld-chibi:before{animation-play-state:paused}
@keyframes party-breathe{0%,100%{transform:translateY(0) scale(1,1)}50%{transform:translateY(-.5px) scale(1.025,1.045)}}
@keyframes party-shadow-pulse{0%,100%{transform:scaleX(.9);opacity:.55}50%{transform:scaleX(1.12);opacity:.85}}
.calm-motion .exp-board .exp-pawn .overworld-chibi img,.calm-motion .overworld-chibi:before{animation:none!important}
@media(prefers-reduced-motion:reduce){.exp-board .exp-pawn .overworld-chibi img,.overworld-chibi:before{animation:none!important}}
/* The current guardian's name follows the figures rather than occupying
   their foreground space. Preview and next-route labels keep their positions. */
.exp-board .exp-tile.current .exp-stop-name{top:calc(50% + var(--party-label-y))}
@media(min-width:900px) and (min-height:600px){
 .exp-board{--party-label-y:57px}
 .exp-board .exp-pawn{--chibi-width:38px;--chibi-height:38px;--party-width:74px;--party-height:47px}
 .exp-board .exp-pawn:has([data-party-size="1"]){--party-width:38px;--party-height:38px}
 .exp-board .exp-pawn:has([data-party-size="2"]){--party-width:68px;--party-height:38px}
 .overworld-party[data-party-size="3"] .overworld-chibi:first-child{bottom:9px}
}
@media(max-height:440px){
 .exp-board{--party-label-y:45px}
 .exp-board .exp-pawn{--chibi-width:28px;--chibi-height:28px;--party-width:54px;--party-height:35px}
 .exp-board .exp-pawn:has([data-party-size="1"]){--party-width:28px;--party-height:28px}
 .exp-board .exp-pawn:has([data-party-size="2"]){--party-width:50px;--party-height:28px}
 .overworld-party[data-party-size="3"] .overworld-chibi:first-child{bottom:7px}
}
/* Keep the established parent translate animation while travelling. */
.exp-board .exp-pawn[data-party-measured="true"]{transform:translate(calc(-50% + var(--party-offset-x)),var(--party-offset-y))}
