/* Three physical motions: turning brass, the camera in a grove, and a lantern
   projecting a photograph. None moves live type or changes scroll geometry. */
#invitation-page #events .season-dial::before,
#invitation-page #events .season-dial-center::after { display: none; }
#invitation-page #events .season-dial-art {
  position: absolute; display: block; width: 53%; aspect-ratio: 1;
  left: 23.5%; top: 50%; transform: translateY(-50%); z-index: -1;
  pointer-events: none; filter: drop-shadow(0 9px 10px rgb(0 12 6/.35));
}
#invitation-page #events .season-dial-art[hidden] { display: none; }
#invitation-page #events .season-dial-art>img {
  display: block; width: 100%; height: 100%; object-fit: contain;
  opacity: .96; animation: patjhad-living-brass 24s linear infinite paused;
}
#invitation-page #events .season-dial-polish {
  position: absolute; inset: 0; opacity: .28; mix-blend-mode: screen;
  background: linear-gradient(125deg,transparent 24%,#fbe8b8 40%,transparent 56%);
  -webkit-mask: url('assets/season-dial-v19.webp') center/contain no-repeat;
  mask: url('assets/season-dial-v19.webp') center/contain no-repeat;
  animation: patjhad-living-brass 24s linear infinite paused;
}
#invitation-page #events .season-dial.is-dial-turning :is(.season-dial-art>img,.season-dial-polish) { animation-play-state: running; }
#invitation-page #events .season-dial-many .season-dial-art {
  width: 155px; height: 155px; left: calc(50% - 77.5px); top: 0; transform: none;
}

/* A camera arc travels slowly through each authored photograph. Foreground
   cutouts move against it; uploaded event photos keep their own composition. */
#invitation-page #events-list .ceremony.has-authored-scene .ceremony-art>img {
  transform-origin: 50% 42%; animation: patjhad-living-scene 10s ease-in-out -3s infinite alternate paused;
}
#invitation-page #events-list .ceremony.has-authored-scene[data-scene='music'] .ceremony-art>img { animation-duration: 11s; transform-origin: 45% 54%; }
#invitation-page #events-list .ceremony.has-authored-scene[data-scene='vows'] .ceremony-art>img { animation-duration: 10.5s; animation-direction: alternate-reverse; }
#invitation-page #events-list .ceremony.has-authored-scene.is-chapter-active .ceremony-art>img { animation-play-state: running; }
#invitation-page #events-list .ceremony.has-authored-scene .ceremony-art:has(.scene-film.is-ready)>img { animation-play-state: paused; }
#invitation-page #events-list .chapter-foreground {
  width: clamp(210px,52%,530px); top: 20%; right: -26%; opacity: .68;
  transform-origin: 100% 0; animation: patjhad-living-near-bough 5s ease-in-out -1.6s infinite alternate paused;
}
#invitation-page #events-list .chapter-foreground--music { top: 24%; right: -26%; opacity: .51; animation-duration: 6s; }
#invitation-page #events-list .chapter-bough { top: 15%; opacity: .54; transform-origin: 0 0; }
#invitation-page #events-list .chapter-bough--left { animation: patjhad-living-vow-left 5.3s ease-in-out -1s infinite alternate paused; }
#invitation-page #events-list .chapter-bough--right { transform-origin: 100% 0; animation: patjhad-living-vow-right 6.3s ease-in-out -2.4s infinite alternate paused; }
#invitation-page #events-list .ceremony.is-chapter-active :is(.chapter-foreground,.chapter-bough) { animation-play-state: running; }
#invitation-page #events-list .is-chapter-ready .chapter-leaf-sweep { animation-iteration-count: infinite; animation-duration: 11s; animation-delay: -2.8s; }
#invitation-page #events-list .chapter-lantern-glow { left: 9%; top: 44%; width: 23%; height: 15%; opacity: .25; }
#invitation-page #events-list .chapter-candle-glow { opacity: .22; }

/* The optical lantern stays planted. Its lens and beam have a common slow
   exposure, while the current photo floats within its existing contain fit. */
#invitation-page #gallery .memory-projection .projection-beam,
#invitation-page #gallery .memory-projection.is-projecting .projection-beam {
  animation: patjhad-living-projection 5.6s ease-in-out -1.4s infinite paused;
}
#invitation-page #gallery .memory-projection .projection-lamp::after {
  animation: patjhad-living-lens 5.6s ease-in-out -1.4s infinite paused;
}
#invitation-page #gallery .memory-projection .memory.is-current img,
#invitation-page #gallery .memory-projection.is-projecting .memory.is-current img {
  transform-origin: 50% 52%; animation: patjhad-living-photograph 7s ease-in-out -1.7s infinite alternate paused;
}
#invitation-page #gallery .memory-projection.is-projection-living .projection-beam,
#invitation-page #gallery .memory-projection.is-projection-living .projection-lamp::after,
#invitation-page #gallery .memory-projection.is-projection-living .memory.is-current img { animation-play-state: running; }
#invitation-page #gallery .memory-projection:not(.is-projection-living) :is(.projection-beam,.memory.is-current img),
#invitation-page #gallery .memory-projection:not(.is-projection-living) .projection-lamp::after { animation-play-state: paused; }

@keyframes patjhad-living-brass { to { transform: rotate(360deg); } }
@keyframes patjhad-living-scene {
  from { transform: scale(1.045) translate3d(-1%,.4%,0); }
  to { transform: scale(1.15) translate3d(1.1%,-1%,0); }
}
@keyframes patjhad-living-near-bough {
  from { transform: rotate(-23deg) translate3d(0,0,0); }
  to { transform: rotate(-12deg) translate3d(-19px,12px,0); }
}
@keyframes patjhad-living-vow-left { from { transform: rotate(-31deg); } to { transform: rotate(-22deg) translate3d(11px,9px,0); } }
@keyframes patjhad-living-vow-right { from { transform: scaleX(-1) rotate(-23deg); } to { transform: scaleX(-1) rotate(-34deg) translate3d(9px,12px,0); } }
@keyframes patjhad-living-projection {
  0%,100% { opacity: .3; transform: rotate(-1deg) scaleY(.97); }
  50% { opacity: .65; transform: rotate(1.1deg) scaleY(1.045); }
}
@keyframes patjhad-living-lens { 0%,100% { opacity: .32; } 50% { opacity: .66; } }
@keyframes patjhad-living-photograph {
  from { transform: scale(.944) translate3d(0,5px,0); }
  to { transform: scale(.995) translate3d(0,-5px,0); }
}
@media(min-width:760px) {
  #invitation-page #events .season-dial-art { width: 46%; left: 27%; }
  #invitation-page #events .season-dial-many .season-dial-art { width: 155px; left: calc(50% - 77.5px); }
  #invitation-page #events-list .chapter-foreground { width: 34%; top: 8%; right: -17%; }
  #invitation-page #events-list .chapter-foreground--music { top: 2%; opacity: .46; }
}
@media(prefers-reduced-motion:reduce) {
  #invitation-page #events .season-dial-art>img,
  #invitation-page #events .season-dial-polish,
  #invitation-page #events-list .ceremony.has-authored-scene .ceremony-art>img,
  #invitation-page #events-list :is(.chapter-foreground,.chapter-bough,.chapter-leaf-sweep),
  #invitation-page #gallery .memory-projection .projection-beam,
  #invitation-page #gallery .memory-projection .projection-lamp::after,
  #invitation-page #gallery .memory-projection .memory.is-current img { animation: none!important; }
  #invitation-page #gallery .memory-projection .memory.is-current img { transform: none; }
}
