/* Motion enhances the invitation; content remains visible without JavaScript. */
.word-mask{display:inline-block;padding:.12em .04em .17em;margin:-.12em -.04em -.17em;vertical-align:bottom}
.reveal-word{display:inline-block;transform-origin:50% 100%}
@media(prefers-reduced-motion:no-preference){
  .motion-ready .hero{overflow:hidden}
  .motion-ready .hero-photo{transform:translate3d(0,var(--photo-rise,0px),0) rotate(var(--photo-turn,0deg));transform-origin:50% 85%;will-change:transform}
  .motion-ready .hero-photo img{transform:scale(var(--photo-zoom,1.025));transform-origin:55% 72%;will-change:transform}
  .motion-ready.hero-arrived .invitation-inner>.eyebrow{animation:invitation-arrival .9s .1s both}
  .motion-ready.hero-arrived h1{animation:names-arrival 1.35s .12s cubic-bezier(.16,1,.3,1) both}
  .motion-ready.hero-arrived .hero-quote,.motion-ready.hero-arrived .date-block,.motion-ready.hero-arrived .invitation .button{animation:invitation-arrival 1s .35s both}
  .motion-ready .date-block{animation-delay:.48s}.motion-ready .invitation .button{animation-delay:.6s}
  .motion-ready .ribbon{overflow:hidden}
  .motion-ready .ribbon>span{transform:translateX(var(--ribbon-drift,0px))}
  .motion-ready .ribbon-mark{transform:translateX(var(--ribbon-drift,0px)) rotate(35deg)}
  .motion-ready .word-mask{overflow:hidden;perspective:500px}
  .motion-ready .word-reveal .reveal-word{opacity:0;transform:translate3d(0,115%,0) rotateX(-65deg) rotateZ(5deg);transition:transform 1s cubic-bezier(.16,1,.3,1),opacity .65s;transition-delay:var(--word-delay,0ms)}
  .motion-ready .word-reveal.is-revealed .reveal-word{opacity:1;transform:translateZ(0) rotateX(0) rotateZ(0)}
  .motion-ready .scroll-reveal{opacity:0;transform:translate3d(0,46px,0);transition:opacity .85s ease,transform 1.05s cubic-bezier(.16,1,.3,1);transition-delay:var(--reveal-delay,0ms)}
  .motion-ready .scroll-reveal.is-revealed{opacity:1;transform:translateZ(0)}
  .motion-ready .venue-details.scroll-reveal{transform:translate3d(0,24px,0);transition-duration:.4s,.55s;transition-delay:0ms}
  .motion-ready .venue-details.scroll-reveal.is-revealed{transform:translateZ(0)}
  .motion-ready .celebration{overflow:hidden;perspective:1200px}
  .motion-ready .card-reveal{opacity:0;transform:translate3d(-90px,70px,0) rotate(-5deg) rotateX(12deg) scale(.94);transform-origin:10% 50%;transition:transform 1.25s cubic-bezier(.16,1,.3,1),opacity .75s ease}
  .motion-ready .card-reveal.event-night{transform:translate3d(90px,70px,0) rotate(5deg) rotateX(12deg) scale(.94);transform-origin:90% 50%}
  .motion-ready .card-reveal.is-revealed{opacity:1;transform:translateZ(0) rotate(0) rotateX(0) scale(1)}
  .motion-ready blockquote{border-left-width:3px;border-image:linear-gradient(to bottom,var(--rose) var(--quote-fill,0%),var(--marigold) var(--quote-fill,0%)) 1}
  .motion-ready .closing .guest-heading .reveal-word{transition-duration:1.2s;transition-delay:calc(var(--word-delay,0ms)*1.5)}
  @keyframes arch-arrival{from{opacity:0;clip-path:inset(12% 9% 12% 9% round 180px 180px 0 0)}to{opacity:1;clip-path:inset(0 round 0)}}
  @keyframes names-arrival{from{opacity:0;transform:translateY(45px) scale(.94);filter:blur(8px)}to{opacity:1;transform:translateY(0) scale(1);filter:blur(0)}}
  @keyframes invitation-arrival{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}
}
@media(max-width:700px) and (prefers-reduced-motion:no-preference){
  .motion-ready .card-reveal{transform:translate3d(-40px,45px,0) rotate(-4deg) scale(.95)}
  .motion-ready .card-reveal.event-night{transform:translate3d(40px,45px,0) rotate(4deg) scale(.95)}
  .motion-ready .card-reveal.is-revealed{transform:translateZ(0) rotate(0) scale(1)}
}
@media print{.scroll-reveal,.card-reveal,.reveal-word{opacity:1!important;transform:none!important;animation:none!important}.word-mask{overflow:visible!important}}

@media(prefers-reduced-motion:no-preference){.motion-ready.hero-arrived .hero-photo{animation:arch-arrival 1.35s cubic-bezier(.16,1,.3,1) both}}
