/* finesse · register=commerce · A=existing-paper+wine · B=existing-editorial-type
 * C=existing-gift-journey · D=CSS-folds+WAAPI-state-change · E=folded-letter
 * SOUL=6 SPECTACLE=4 DENSITY=5 · animate: retain the existing visual direction */

/* A short, local ceremony. Finished content is the default everywhere. */
html, body { overflow-x: clip; }
.gift-sleeve {
  position:absolute; inset:0; z-index:4; pointer-events:none;
  perspective:900px; overflow:clip; isolation:isolate;
  animation:giftSleeveExit 1150ms linear both;
}
.gift-sleeve-back {
  position:absolute; inset:0; background:var(--color-paper-2);
  animation:giftPaperBack 900ms var(--orn-ease) both;
}
.gift-sleeve-wing {
  position:absolute; inset:0; background:var(--color-paper);
  box-shadow:inset 0 0 0 1px var(--color-rule);
}
.gift-sleeve-left {
  clip-path:polygon(0 0, 54% 50%, 0 100%);
  transform-origin:left center;
  animation:giftWingLeft 960ms var(--orn-ease-in-out) 160ms both;
}
.gift-sleeve-right {
  clip-path:polygon(100% 0, 46% 50%, 100% 100%);
  transform-origin:right center;
  animation:giftWingRight 960ms var(--orn-ease-in-out) 160ms both;
}
.gift-sleeve-flap {
  position:absolute; inset:0; background:var(--color-blush);
  clip-path:polygon(0 0,100% 0,50% 56%);
  transform-origin:center top; backface-visibility:hidden;
  animation:giftFlap 720ms var(--orn-ease-in-out) 80ms both;
}
.gift-sleeve-seal {
  position:absolute; left:50%; top:50%; width:64px; height:64px;
  display:grid; place-items:center; border-radius:50%;
  color:var(--color-light-ink); background:var(--color-accent);
  box-shadow:0 4px 12px var(--color-shadow);
  transform:translate(-50%,-50%);
  animation:giftSealRelease 480ms var(--orn-ease) 70ms both;
}
.gift-sleeve-seal svg { width:44px; height:44px; }
.gift-sleeve-seal circle { fill:none; stroke:currentColor; stroke-width:.7; opacity:.6; }
.gift-sleeve-seal path { fill:currentColor; }
@keyframes giftSealRelease {
  0%,15% { opacity:1; transform:translate(-50%,-50%) rotate(-9deg) scale(1); }
  100% { opacity:0; transform:translate(-50%,-70%) rotate(12deg) scale(.8); }
}
@keyframes giftFlap { to { transform:rotateX(170deg); } }
@keyframes giftWingLeft { to { transform:translateX(-78%) rotate(-8deg); } }
@keyframes giftWingRight { to { transform:translateX(78%) rotate(8deg); } }
@keyframes giftPaperBack { 0%,20% { opacity:1; } 75%,100% { opacity:0; } }
@keyframes giftSleeveExit { 0%,80% { opacity:1; } 100% { opacity:0; } }

/* The opening letter is a temporary visual snapshot, never a modal. */
.gift-opening-echo {
  position:fixed; z-index:65; margin:0!important; pointer-events:none;
  transform-origin:50% 10%; perspective:1000px;
  animation:giftLetterAway 720ms var(--orn-ease-in-out) both;
}
.gift-opening-echo::after {
  content:''; position:absolute; inset:0;
  background:var(--color-blush); clip-path:polygon(0 0,100% 0,50% 50%);
  transform-origin:50% 0; backface-visibility:hidden;
  animation:giftFlap 520ms var(--orn-ease-in-out) both;
}
.gift-opening-echo .orn-wax { animation:giftEchoSeal 340ms var(--orn-ease) both; }
@keyframes giftEchoSeal { to { opacity:0; transform:translateY(-20px) rotate(16deg) scale(.75); } }
@keyframes giftLetterAway {
  0%,18% { opacity:1; transform:translateY(0) rotateX(0); }
  100% { opacity:0; transform:translateY(-65px) rotateX(18deg) scale(.96); }
}
.orn-arrive { animation:giftPresentIn 620ms var(--orn-ease) both; }
@keyframes giftPresentIn {
  from { opacity:.45; transform:translateY(16px) scale(.99); }
  to { opacity:1; transform:none; }
}

/* One entry per state, with back/forward direction handled by the motion island. */
.gift-motion-creator :is(.form-step, #quick-start, #lyrics-stage, #song-stage, #gift):not([hidden]) {
  animation:none;
}
/* No overlapping old hero entrance while its paper sleeve opens. */
.home-edition .dedication-card,
.home-edition .dedication-photo>img,
.home-edition .photo-dedication,
.home-edition .hero-audio { animation:none; }
.home-edition .gift-note { transform-origin:50% 80%; }
.home-edition .memory-letter { transform-origin:50% 20%; }
.recipient-page .gift-credit { color:var(--color-ink-2); opacity:1; }
.home-edition [data-occasion] { transition:background-color 180ms ease, color 180ms ease, border-color 180ms ease; }
.home-edition [data-occasion]:active { scale:.98; }
@media (hover:hover) and (pointer:fine) {
  .button { transition:background-color 180ms ease, color 180ms ease, transform 220ms var(--orn-ease); }
  .button:hover { transform:translateY(-2px); }
  .button:active { transform:translateY(0) scale(.985); }
}
/* User pause covers finite CSS effects as well as the older ambient loops. */
html.orn-paused .gift-sleeve,
html.orn-paused .gift-opening-echo { display:none; }
html.orn-paused *, html.orn-paused *::before, html.orn-paused *::after {
  animation-duration:.01ms!important; animation-delay:0ms!important;
  transition-duration:.01ms!important; transition-delay:0ms!important;
}
@media (prefers-reduced-motion:reduce) {
  .gift-sleeve, .gift-opening-echo { display:none; }
  *, *::before, *::after { animation-duration:.01ms!important; animation-delay:0ms!important; transition-duration:.01ms!important; }
  ::view-transition-old(root), ::view-transition-new(root) { animation:none!important; }
}
@media print { .gift-sleeve, .gift-opening-echo { display:none!important; } }
