/* Moving companions are the world. A warm London line is their hover x-ray. */
.resident-spirit{position:absolute;inset:4%;width:92%;height:92%;overflow:visible;opacity:0;pointer-events:none;transition:opacity .24s var(--entrance)}
.resident-spirit path{fill:none;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.spirit-hit{fill:transparent;pointer-events:none}
.spirit-line{stroke:#fff7eb;stroke-width:2.5;filter:drop-shadow(0 0 3px #fff7eb) drop-shadow(0 0 11px #fff7eb) drop-shadow(0 0 23px #fff7eb)}
.spirit-thread{animation:spirit-breathe 4.2s ease-in-out infinite;animation-play-state:paused}
.resident-character{opacity:1;transition:opacity .24s var(--entrance)}
.forest-resident .resident-character>img{pointer-events:auto;clip-path:inset(var(--art-hit))}
.is-route-xray .resident-spirit{opacity:1;pointer-events:auto}
.is-route-xray .spirit-hit{pointer-events:all}
.is-route-xray .resident-character{opacity:0}
.is-route-xray .resident-contact-shadow{opacity:.08!important}
.is-map .resident-spirit{opacity:0;pointer-events:none}
.is-map .spirit-hit{pointer-events:none}
.is-map .resident-character{opacity:1}
.constellation g path{stroke:#fff7eb;filter:drop-shadow(0 0 5px #fff7eb) drop-shadow(0 0 14px #fff7eb)}
/* The woodland shows wandering artwork. Only an invited individual reveals a line. */
.sanctuary-stage:not(.is-map) .constellation{opacity:0;visibility:hidden;pointer-events:none}
.sanctuary-stage:not(.is-map) .constellation g path{animation:none}
.sanctuary-stage:not(.is-map) .forest-resident{filter:none}
.sanctuary-stage.is-map .forest-cast{opacity:0;visibility:hidden;pointer-events:none}
.sanctuary-stage.is-map .constellation{visibility:visible}
@keyframes spirit-breathe{0%,100%{opacity:.92}50%{opacity:1}}
body[data-motion=off] .resident-spirit,body[data-motion=off] .resident-character{transition:none}
body[data-motion=off] .spirit-thread,body[data-hidden=true] .spirit-thread{animation-play-state:paused!important}
@media(max-width:767px){.spirit-line{stroke-width:2.1}}
@media(prefers-reduced-motion:reduce){.resident-spirit,.resident-character{transition:none}.spirit-thread{animation:none}}

/* The selected route image retains its whole line, with the existing warm reveal. */
.resident-spirit image.spirit-line{filter:brightness(0) invert(1) sepia(.12) drop-shadow(0 0 3px #fff7eb) drop-shadow(0 0 11px #fff7eb) drop-shadow(0 0 23px #fff7eb)}

/* Raster previews retain the original warm luminous line, including sky cards. */
.selected-route-preview{filter:drop-shadow(0 0 3px #fff7eb) drop-shadow(0 0 9px #ffe9c4)}
