/* One viewport, camera anchor and character scale for all five walked maps. */
:is(#hub-view, #forest-view, #swamp-view, #cave-view, #heath-view).world-view {
  position: relative;
  width: 100vw;
  height: var(--app-height, 100dvh);
  min-height: 0;
  overflow: hidden;
}
:is(#hub-viewport, #forest-viewport, #swamp-viewport, #cave-viewport, #heath-viewport).world-viewport {
  width: 100%;
  height: var(--app-height, 100dvh) !important;
  min-height: 0 !important;
  max-height: var(--app-height, 100dvh);
  overflow: hidden;
  outline: 0;
  user-select: none;
  touch-action: none;
}
.world-scene { transform-origin: 0 0; }
:is(#hub-party, #forest-player, #swamp-player, #cave-player, #heath-player).world-walker {
  position: absolute;
  display: block;
  width: 78px;
  height: 116px;
  padding: 0;
  gap: 0;
  transform: translate(-50%, -88%) scale(var(--world-actor-scale, 1));
  transform-origin: 50% 88%;
  pointer-events: none;
  filter: none;
}
/* The old mobile Ostoja rule forces a flex party + transform with !important. */
#hub-view #hub-party.world-walker {
  display: block !important;
  transform: translate(-50%, -88%) scale(var(--world-actor-scale, 1)) !important;
}
.world-walker { --world-avatar-filter: brightness(1); }
#swamp-player.world-walker { --world-avatar-filter: brightness(.88) saturate(.82); }
#cave-player.world-walker { --world-avatar-filter: brightness(.72) saturate(.76); }
#heath-player.world-walker { --world-avatar-filter: brightness(.9) saturate(.84); }
:is(#hub-party, #forest-player, #swamp-player, #cave-player, #heath-player).world-walker > .world-avatar {
  position: relative;
  display: block;
  z-index: 2;
  width: 100%;
  height: 100%;
  object-fit: contain;
  filter: var(--world-avatar-filter) drop-shadow(0 9px 6px #000b);
}
#hub-party.world-walker.facing-left > .world-avatar { transform: scaleX(-1); }
#hub-party.world-walker.walking > .world-avatar { animation: forest-step .34s ease-in-out infinite alternate; }
:is(#hub-party, #forest-player, #swamp-player, #cave-player, #heath-player).world-walker > .world-shadow {
  position: absolute;
  z-index: 1;
  left: 50%;
  bottom: 4px;
  width: 48px;
  height: 14px;
  transform: translateX(-50%);
  border-radius: 50%;
  background: #020208b8;
  filter: blur(2px);
}
:is(#hub-party, #forest-player, #swamp-player, #cave-player, #heath-player).world-walker > .world-companion {
  position: absolute;
  z-index: 3;
  left: -64px;
  bottom: -3px;
  width: 70px;
  height: 70px;
}
#hub-party.world-walker.walking > .world-companion { animation: forest-companion-step .42s ease-in-out infinite alternate; }
/* Ostoja's old static-map background is replaced by the camera's world layer. */
#hub-viewport.world-viewport { background-image: none !important; aspect-ratio: auto; }
