/* The map container must be position: relative and keep the route's aspect ratio. */
.fp-player-layer { position:absolute; inset:0; overflow:visible; pointer-events:none; z-index:15; }
.fp-player-world { position:absolute; left:0; top:0; transform-origin:0 0; pointer-events:none; }
.fp-player-marker { position:absolute; left:0; top:0; width:0; height:0; will-change:transform; }
.fp-player-halo { position:absolute; left:0; top:0; width:62px; height:26px; border:2px solid #fff5a8; background:#ffe26938; border-radius:50%; transform:translate(-50%,-50%); box-shadow:0 0 14px #ffe76c8f; }
.fp-player-shadow { position:absolute; left:0; top:0; width:49px; height:13px; border-radius:50%; background:#122a32; opacity:.35; filter:blur(2px); transform:translate(-50%,-50%); }
.fp-player-body, .fp-player-facing { position:absolute; left:0; top:0; width:0; height:0; transform-origin:0 0; will-change:transform; }
.fp-player-art { position:absolute; display:block; max-width:none !important; max-height:none !important; object-fit:contain; user-select:none; filter:drop-shadow(0 2px 1px #102b3350); }
/* Breathe affects the inner image, preserving direction on its wrapper. */
.fp-player-layer.is-idle:not(.is-reduced):not(.is-paused) .fp-player-art { animation:fp-idle-breathe 2.8s ease-in-out infinite; }
.fp-player-layer.is-moving .fp-player-halo { opacity:.45; }
.fp-player-layer.is-paused * { animation-play-state:paused !important; }
.fp-player-arrival { position:absolute; width:0; height:0; pointer-events:none; }
.fp-player-ring { position:absolute; width:45px; height:23px; left:0; top:0; box-sizing:border-box; border:3px solid #fff7c1; border-radius:50%; animation:fp-arrival-ring .5s ease-out both; }
.fp-player-dust { position:absolute; left:0; top:-4px; width:7px; height:6px; background:#ffefbd; border-radius:50%; animation:fp-arrival-dust .42s ease-out both; }
.fp-player-error { display:grid; place-items:center; position:absolute; width:48px; height:58px; left:-24px; top:-60px; border-radius:24px 24px 16px 16px; background:#63d2b4; color:#123d43; border:3px solid #fff4c9; font:800 34px/1 sans-serif; }
@keyframes fp-idle-breathe { 0%,100% { translate:0 0; } 50% { translate:0 -1.7px; } }
@keyframes fp-arrival-ring { from { transform:translate(-50%,-50%) scale(.7); opacity:.85; } to { transform:translate(-50%,-50%) scale(1.8); opacity:0; } }
@keyframes fp-arrival-dust { from { transform:translate(0,0) scale(.65); opacity:.65; } to { transform:translate(var(--dust-x),var(--dust-y)) scale(1.2); opacity:0; } }
@media (prefers-reduced-motion:reduce) { .fp-player-layer .fp-player-art { animation:none !important; } .fp-player-arrival { display:none; } }
