.is-celebrating .quince-portrait {
  animation: portrait-breathe 18s ease-in-out infinite alternate;
  transform-origin: 60% 63%;
}
.is-celebrating .quince-eyebrow { animation: caption-enter 1500ms ease 100ms both; }
.is-celebrating .celebrant { animation: caption-enter 1800ms ease 450ms both; }
.is-celebrating .quince-title { animation: caption-enter 1800ms ease 800ms both; }
.letter-block { isolation: isolate; }
.letter-block > * { position: relative; z-index: 1; }
.letter-block::before,
.letter-block::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  opacity: 0;
  mask-image: linear-gradient(transparent, #000 18%, #000 82%, transparent);
  -webkit-mask-image: linear-gradient(transparent, #000 18%, #000 82%, transparent);
}
.letter-block::before {
  background: linear-gradient(115deg, transparent 8%, #e6afc13d 22%, #f1c7d966 30%, #ffffffad 39%, transparent 48%, #edb9cf52 63%, #ffffffb8 72%, transparent 86%);
  background-size: 250% 180%;
}
.letter-block::after {
  background: linear-gradient(110deg, transparent 34%, #ffffff99 42%, #dfbe8533 44%, transparent 46%, transparent 66%, #ffffff66 70%, transparent 73%);
  background-size: 300% 160%;
}
.pink-band::before {
  background-image: linear-gradient(115deg, transparent 8%, #d982a642 22%, #ffffff8c 36%, transparent 48%, #d986ae52 63%, #ffffffa6 74%, transparent 86%);
}
.is-celebrating .letter-block::before { opacity: 1; animation: satin-flow 12s ease-in-out infinite; }
.is-celebrating .letter-block::after { opacity: 0.75; animation: satin-glint 17s ease-in-out infinite; }
.is-celebrating .letter-block:nth-child(even)::before { animation-direction: reverse; animation-delay: -4s; }
.is-celebrating .paper--closing .letter-block::before { animation-delay: -7s; }
@keyframes satin-flow {
  0%, 100% { background-position: 0% 20%; }
  50% { background-position: 100% 80%; }
}
@keyframes satin-glint {
  0%, 100% { background-position: 100% 60%; }
  50% { background-position: 0% 15%; }
}
.gold-button { transition: background 220ms ease, transform 220ms ease, box-shadow 220ms ease; }
.gold-button:hover { transform: translateY(-2px); box-shadow: 0 5px 16px #b6527826; }
.gold-button:active { transform: translateY(0); box-shadow: none; }
.seal-trigger { animation: seal-invitation 3s ease-in-out infinite; }
.seal-trigger:disabled { animation: none; }
.celebration-sparkles { position: absolute; inset: 0; overflow: hidden; pointer-events: none; }
.celebration-sparkles span {
  position: absolute;
  top: 2%;
  left: var(--left);
  color: #ffe7ae;
  font-size: 14px;
  opacity: 0;
  animation: sparkle-fall 4.5s ease-out var(--delay) both;
}
@keyframes caption-enter {
  from { opacity: 0; transform: translateY(45px) scale(0.96); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes portrait-breathe {
  from { transform: scale(1); }
  to { transform: scale(1.025); }
}
@keyframes seal-invitation {
  0%, 100% { box-shadow: 0 0 0 0 #fffaf000; }
  50% { box-shadow: 0 0 18px 3px #fffaf045; }
}
@keyframes sparkle-fall {
  0% { opacity: 0; transform: translateY(0) rotate(0); }
  15% { opacity: 0.8; }
  75% { opacity: 0.35; }
  100% { opacity: 0; transform: translateY(65svh) rotate(var(--turn)); }
}
html[data-motion="off"] *,
html[data-motion="off"] *::before,
html[data-motion="off"] *::after { animation: none !important; transition: none !important; }
html[data-motion="off"] .celebration-sparkles { display: none; }
html[data-motion="off"] .letter-block::before,
html[data-motion="off"] .letter-block::after { opacity: 0; }
html[data-motion="off"] .gold-button:hover { transform: none; }
.motion-toggle { position: fixed; right: 16px; bottom: 16px; z-index: 5; width: 44px; height: 44px; display: grid; place-items: center; padding: 0; border: 1px solid #eab5c4; border-radius: 50%; background: #fffdfbf0; color: #89405d; cursor: pointer; font: 18px system-ui, sans-serif; box-shadow: 0 3px 12px #89405d20; }
.motion-toggle:focus-visible { outline: 2px solid #89405d; outline-offset: 3px; }
