/* Stable compositing for the animated garden. Decorative motion stays on;
   overlays no longer resample a moving SVG scene through a live blur. */
.garden-dialog,
.garden-dialog::backdrop,
.eden-story-top,
.world-badge,
.camera-button,
.plot-switcher,
.harvest-toast,
#adventure-journal,
.basket-backdrop,
.basket-open .basket-backdrop {
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}

.world-badge { display: none; background: #fffbe3; }
.eden-immersive .world-badge { display: flex; }
.camera-button { background: #fffdf1; }
.plot-switcher { background: #fffdf4; }
.harvest-toast { background: #fffdf2; }
#adventure-journal { background: #fff8d9; }
.eden-story-top { background: #fffbed; }

.garden-dialog::backdrop,
.basket-open .basket-backdrop {
  background: rgb(26 54 36 / 58%);
  animation: eden-overlay-appear .18s ease-out;
}

/* Keep the native top-layer panel at its final geometry from its first frame.
   Its illustrated portraits and other details retain their own animations. */
.garden-dialog[open] {
  transform: none;
  animation: eden-overlay-appear .18s ease-out;
}

@keyframes eden-overlay-appear {
  from { opacity: 0; }
  to { opacity: 1; }
}

/* A single landscape spans orchard and grove. Finite paint bounds cover the
   whole world, so no internal SVG viewport can cut a tree at the old seam. */
#scenery,
#eden-wildlife {
  width: 2160px;
  height: 960px;
  overflow: hidden;
  contain: paint;
}

#scenery > svg,
#eden-wildlife > svg {
  width: 2160px;
  height: 960px;
  overflow: hidden;
}

/* Compatibility with an older adventures script: its former terrain layer is
   empty, and must never become a second surface beside the unified garden. */
#eden-extension {
  display: none;
}

/* Let the browser manage the large world surface, rather than permanently
   reserving a high-DPI texture for every animated fruit and the whole map. */
.garden-world,
.node-image img {
  will-change: auto;
}

/* Flat painted ground shadows already exist beneath these illustrations.
   Removing stacked SVG filters avoids rerasterising moving descendants. */
#plot-nodes .harvest-node,
#plot-nodes .harvest-node:hover,
.node-image img,
.harvest-node::before,
.eden-npc::before,
.eden-npc-sprite,
#player {
  filter: none;
}

/* Only the small avatar requests a movement layer. Facing, walking, picking
   and harvesting continue to use their existing SVG and keyframe rules. */
#player {
  will-change: transform;
}

/* Picking rotates the illustration, never the actor's world translation. */
#player.is-picking { animation: none; }
#player.is-picking > svg { animation: character-pick .55s ease-in-out; }
