.atmosphere{position:absolute;inset:0;width:100%;height:100%;z-index:8;pointer-events:none;contain:strict}
.opening .opening-note{opacity:0;pointer-events:none}
.opening .seal{transform:translate(-50%,-65%) rotate(5deg) scale(1.14);opacity:0;pointer-events:none}
.opening .masthead{opacity:.3}
.opened .masthead{opacity:1}
.opening .card{pointer-events:none}
.skip-opening{position:absolute;top:29px;left:50%;transform:translateX(-50%);font:9px/1.7 system-ui,sans-serif;letter-spacing:.15em;text-transform:uppercase;color:#b4a283;background:none;border:0;border-bottom:1px solid #917b4c66;padding:6px 0;cursor:pointer;opacity:0;visibility:hidden;transition:opacity .4s}
.opening .skip-opening{opacity:1;visibility:visible;transition-delay:.8s}
.ready .skip-opening{opacity:0;visibility:hidden;transition-delay:0s}
.ready .envelope{visibility:hidden;transition:none}
.ready .card{opacity:1;transform:scale(1);transition:none}
.utilities{gap:20px;flex-wrap:wrap}
.motion-button{color:#91866e;font-size:9px}
.theatre.motion-off .atmosphere{opacity:0}
.card img.dissolving{z-index:2;animation:paperDissolve .95s cubic-bezier(.22,.68,.25,1) forwards;box-shadow:none}
.card img.arriving{animation:paperArrive .95s cubic-bezier(.22,.68,.25,1) both}
@keyframes paperDissolve{from{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(-5px) scale(.995)}}
@keyframes paperArrive{from{opacity:0;transform:translateY(7px) scale(1.012)}to{opacity:1;transform:translateY(0) scale(1)}}
@media(max-width:600px){.utilities{gap:17px}.motion-button{font-size:8px}}
/* JavaScript honors reduced motion by default and permits the explicit Play motion choice. */
