/* Decorative only: keep both the visible-viewport action and touch targets free. */
.cover-frame{display:none;position:absolute;inset:10px;z-index:3;border:1px solid #ad9b7266;border-radius:27px;color:#9c8b61;pointer-events:none;opacity:1}
.cover-frame:before{content:'';position:absolute;inset:7px;border:1px solid #8e9b6038;border-radius:21px}
.cover-frame,.cover-frame *{pointer-events:none}
.frame-definitions{position:absolute;overflow:hidden}
.frame-corner{position:absolute;width:76px;height:76px;overflow:visible;stroke-width:.9}
.corner-tl{top:0;left:0}.corner-tr{top:0;right:0;transform:scaleX(-1)}
.corner-bl{bottom:0;left:0;transform:scaleY(-1)}.corner-br{bottom:0;right:0;transform:scale(-1)}
.frame-leaf{fill:#8c996c16;stroke:#8c996c}
.frame-jewel{position:absolute;left:50%;width:6px;height:6px;transform:translateX(-50%) rotate(45deg);background:#faf9f3;border:1px solid #ad9b72}
.jewel-top{top:4px}.jewel-bottom{bottom:4px}
@media(pointer:coarse),(max-width:759px){
 .cover-frame{display:block;animation:wedding-frame-arrive 1.8s ease-out both}
 .frame-flourish{stroke-dasharray:230;stroke-dashoffset:0;animation:wedding-frame-draw 2.4s cubic-bezier(.22,1,.36,1) both}
 .frame-jewel{animation:wedding-frame-light 3s .4s ease-in-out both}
}
@media(max-height:450px),(max-width:340px){.cover-frame{inset:7px;border-radius:20px}.cover-frame:before{inset:5px;border-radius:16px}.frame-corner{width:52px;height:52px}}
.lite-mode .cover-frame,.lite-mode .frame-flourish,.lite-mode .frame-jewel{animation:none}
.envelope.opening .cover-frame{animation:none;opacity:0;transition:opacity .18s ease}
@keyframes wedding-frame-arrive{from{opacity:0}to{opacity:1}}
@keyframes wedding-frame-draw{from{stroke-dashoffset:230}to{stroke-dashoffset:0}}
@keyframes wedding-frame-light{0%,100%{opacity:.65}50%{opacity:1;background:#e6d6b5}}
@media(prefers-reduced-motion:reduce){.cover-frame,.frame-flourish,.frame-jewel{animation:none}}
