.opening{isolation:isolate}.rose-petals{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:-1}.rose-petal{position:absolute;top:-35px;left:var(--petal-left);width:13px;height:19px;background:linear-gradient(140deg,#d99d9d88,#ae687744);border-radius:85% 10% 75% 20%;animation:petal-fall var(--petal-duration) var(--petal-delay) linear infinite;will-change:transform;opacity:.45}
@keyframes petal-fall{0%{transform:translate3d(0,-20px,0) rotate(0deg);opacity:0}12%{opacity:.45}50%{transform:translate3d(30px,50svh,0) rotate(150deg)}88%{opacity:.4}100%{transform:translate3d(-20px,110svh,0) rotate(310deg);opacity:0}}
.hero-birthday{position:relative;overflow:hidden}.hero-birthday:after{content:'';position:absolute;inset:0;background:linear-gradient(105deg,transparent 30%,#fff9 50%,transparent 70%);transform:translateX(-140%);animation:date-shimmer 9s 2s ease-in-out infinite;pointer-events:none}
@keyframes date-shimmer{0%,70%{transform:translateX(-140%)}90%,100%{transform:translateX(140%)}}
#letter-body{animation:paper-unfold .8s cubic-bezier(.2,.7,.2,1) both;transform-origin:top}#letter-body .signature{animation:signature-arrive 1s .45s both}
@keyframes paper-unfold{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes signature-arrive{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.wish-message:not(:empty){animation:wish-arrive .8s ease-out both}@keyframes wish-arrive{from{opacity:0;transform:translateY(10px) scale(.97)}to{opacity:1;transform:none}}
.lightbox-content{animation:photo-arrive .25s ease-out}@keyframes photo-arrive{from{opacity:0;transform:scale(.98)}to{opacity:1;transform:none}}
@media(hover:hover){.text-link{transition:color .25s,border-color .25s}.text-link:hover{color:#a44961;border-color:#a44961}.button span{display:inline-block;transition:transform .3s}.button:hover span{transform:translateX(3px) rotate(8deg)}}
@media(prefers-reduced-motion:reduce){.rose-petal{display:none}.hero-birthday:after{display:none}#letter-body,#letter-body .signature,.wish-message:not(:empty),.lightbox-content{animation:none}}
.song-invitation{position:relative;max-width:450px;margin:24px 0 0;padding:22px 28px;background:#fffdf5b8;border:1px solid #b3856130;border-radius:14px;box-shadow:0 12px 40px #873d5308}.song-invitation-title{font:36px/1.15 Allura,Georgia,serif;color:#923e59;margin:0}.song-invitation>p:nth-child(2){font-size:14px;line-height:1.8;color:#78636a;margin:12px 0 20px}.song-open{font-size:14px;gap:10px}.opening>.quiet-open{background:transparent;color:#873d53;box-shadow:none;border-bottom:1px solid #873d5355;border-radius:0;padding:6px 0;margin:16px 0 18px;font-size:12px;min-height:40px}.opening{padding-block:40px}.opening .ornament{margin-bottom:15px}.opening h1{font-size:clamp(44px,5.8vw,80px)}@media(max-width:600px){.song-invitation{padding:18px 20px}.song-invitation-title{font-size:32px}.song-invitation>p:nth-child(2){font-size:13px}.opening h1{font-size:44px}}
.letter-wrap{position:relative;isolation:isolate}.letter-rose{position:absolute;right:20px;top:55px;width:175px;height:auto;object-fit:contain;transform:rotate(13deg);filter:drop-shadow(7px 12px 8px #793a4820);pointer-events:none;z-index:0}.letter-wrap>.eyebrow,.letter-wrap>h2{position:relative;max-width:calc(100% - 130px)}.letter-wrap>article,.letter-wrap>.voice,.letter-wrap>button{position:relative;z-index:1}@media(max-width:600px){.letter-rose{width:95px;right:9px;top:75px;opacity:.85;transform:rotate(12deg)}.letter-wrap>.eyebrow{max-width:100%;font-size:9px}.letter-wrap>h2{max-width:calc(100% - 65px);font-size:36px}}
.screen-reader-letter{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.typed-letter{min-height:5em}.typed-letter:after{content:"";display:inline-block;width:2px;height:1em;background:#93445b;margin-left:4px;vertical-align:-.12em;animation:letter-cursor .8s step-end infinite}.typing-skip{font:12px Arial,sans-serif!important;margin-top:12px;color:#873d53!important}.typing-signature{opacity:0;animation:none!important}@keyframes letter-cursor{50%{opacity:0}}@media(prefers-reduced-motion:reduce){.typed-letter:after{animation:none}}
.opening h1.typing-opening,.opening h1.typing-complete{animation:none;filter:none;opacity:1;transform:none}.opening-typed-title{display:block;min-height:2.12em}.typing-opening .opening-typed-title span:last-child:after{content:"";display:inline-block;width:2px;height:.72em;margin-left:7px;background:#93445b;vertical-align:-.02em;animation:letter-cursor .8s step-end infinite}@media(prefers-reduced-motion:reduce){.typing-opening .opening-typed-title span:last-child:after{display:none}}
.opening-title-line{position:relative}.title-character{visibility:hidden}.title-character.shown{visibility:visible}.typing-opening .opening-typed-title span:last-child:after{content:none}.typing-opening .opening-typed-title .title-character.current:after{content:"";position:absolute;width:2px;height:.72em;background:#93445b;margin-left:2px;vertical-align:baseline;animation:letter-cursor .8s step-end infinite;top:.18em}@media(prefers-reduced-motion:reduce){.title-character{visibility:visible}.typing-opening .opening-typed-title .title-character.current:after{display:none}}
.opening{background:radial-gradient(ellipse at 50% 35%,#fffaf3e8 0 22%,transparent 68%),radial-gradient(ellipse at 0 15%,#eab6be70,transparent 55%),radial-gradient(ellipse at 100% 80%,#e7c89766,transparent 50%),#fbf0e6}.opening:before,.opening:after{content:"";position:absolute;top:15px;width:clamp(150px,24vw,340px);height:560px;background:url("../assets/icons/celebration-corner.svg") center top/contain no-repeat;pointer-events:none;z-index:-1;opacity:.75;animation:balloon-sway 7s ease-in-out infinite alternate;transform-origin:top center}.opening:before{left:-35px}.opening:after{right:-35px;scale:-1 1;top:80px;animation-delay:-3s}.opening .ornament{position:relative}.opening .ornament:before,.opening .ornament:after{content:"✧";position:absolute;font-size:18px;color:#c29757;animation:celebration-twinkle 3s ease-in-out infinite alternate}.opening .ornament:before{left:-70px;top:15px}.opening .ornament:after{right:-70px;top:-8px;animation-delay:1s}.opening .song-invitation{background:#fffdf4e3;box-shadow:0 15px 40px #9f5c6f12;border-color:#bd8c6640}@keyframes balloon-sway{from{transform:translateY(0) rotate(-2deg)}to{transform:translateY(9px) rotate(2deg)}}@keyframes celebration-twinkle{from{opacity:.35;transform:scale(.85)}to{opacity:.9;transform:scale(1.1)}}@media(max-width:600px){.opening:before,.opening:after{width:145px;height:330px;opacity:.4;top:5px}.opening:before{left:-70px}.opening:after{right:-70px;top:80px}.opening .ornament:before{left:-50px}.opening .ornament:after{right:-50px}}@media(prefers-reduced-motion:reduce){.opening:before,.opening:after,.opening .ornament:before,.opening .ornament:after{animation:none}}
