*{box-sizing:border-box}html{background:#360713;scroll-behavior:smooth}body{margin:0;color:#5b1329;font-family:'DM Sans',sans-serif}button,a,input{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer}button:disabled{cursor:default}button:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid #dc879d;outline-offset:5px}[hidden]{display:none!important}.clip-defs{position:absolute}.skip{position:fixed;top:-100px;z-index:10;background:#fff;padding:12px}.skip:focus{top:0}.reader-bar{height:52px;color:#f9dce3;display:flex;align-items:center;justify-content:space-between;max-width:1100px;margin:auto;padding:0 24px;font-size:11px;letter-spacing:.12em}.reader-bar a{font-family:'Great Vibes',cursive;font-size:25px;letter-spacing:0;color:inherit;text-decoration:none}.reader-bar a span{font-family:serif;font-size:18px}.reader-bar button{background:none;border:0;color:inherit;font-size:11px}main{padding:0 28px 12px;position:relative}.scene{position:relative;isolation:isolate;width:100%;max-width:1040px;margin:auto;min-height:640px;overflow:hidden;box-shadow:0 15px 65px #1b000b70}.wine{background:radial-gradient(ellipse at 50% 35%,#680d29,#4a0618 75%);color:#f9d8df}.pink{background:radial-gradient(ellipse at 45% 30%,#fbdde4,#f2b4c4 85%)}.scene:after{content:'';position:absolute;inset:0;pointer-events:none;z-index:5;opacity:.1;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' opacity='.3' filter='url(%23n)'/%3E%3C/svg%3E")}.scene-content{position:relative;z-index:2;min-height:640px;padding:58px 74px 48px;display:flex;align-items:center;flex-direction:column;justify-content:center}.scene h1,.scene h2{font-family:'Great Vibes',cursive;font-weight:400;text-align:center;font-size:clamp(32px,4.4vw,54px);line-height:1.2;margin:0 0 22px;max-width:100%;overflow-wrap:anywhere}.scene h1{font-family:'Caveat',cursive;font-size:clamp(29px,3.6vw,42px);letter-spacing:.02em}.handwritten,figcaption{font-family:'Caveat',cursive;font-weight:500}.handwritten{font-size:23px;line-height:1.5;overflow-wrap:anywhere;max-width:100%}.next-button{color:#fff4ec;background:#89172c;border:1px solid #d4949b;border-radius:50%;padding:14px 24px;min-height:48px;box-shadow:0 3px 0 #430b1d3b;font-family:'Caveat',cursive;font-size:20px;line-height:1.15;max-width:100%;overflow-wrap:anywhere;position:relative;z-index:4;transition:transform .25s,background .25s}.next-button:hover{transform:translateY(-3px) rotate(-2deg);background:#a02640}.next-button:active{transform:scale(.96)}.next-button span{padding-left:6px}.wine .next-button{background:#e8a9b7;color:#5b1025;border-color:#fbe0d7}.lace{position:absolute;inset:9px;pointer-events:none;z-index:1;border:1px solid #fff5df99;background:radial-gradient(circle at 50% 0,transparent 12px,#fff2dbab 13px,#fff2dbab 14px,transparent 15px) top left/34px 19px repeat-x,radial-gradient(circle at 50% 100%,transparent 12px,#fff2dbab 13px,#fff2dbab 14px,transparent 15px) bottom left/34px 19px repeat-x,radial-gradient(circle at 0 50%,transparent 12px,#fff2dbab 13px,#fff2dbab 14px,transparent 15px) top left/19px 34px repeat-y,radial-gradient(circle at 100% 50%,transparent 12px,#fff2dbab 13px,#fff2dbab 14px,transparent 15px) top right/19px 34px repeat-y}.pink .lace{border:0;background:radial-gradient(ellipse at 50% -4px,transparent 19px,#8b2336 20px,#8b2336 21px,transparent 22px) 0 0/56px 24px repeat-x,radial-gradient(ellipse at 50% 28px,transparent 19px,#8b2336 20px,#8b2336 21px,transparent 22px) left bottom/56px 24px repeat-x}.rose-rail{position:absolute;top:-22px;bottom:-22px;width:66px;display:flex;flex-direction:column;justify-content:space-between;z-index:1;pointer-events:none;opacity:.92}.rose-left{left:-18px}.rose-right{right:-18px;transform:scaleX(-1)}.rose-rail svg{width:100%;height:135px;flex-shrink:0;filter:drop-shadow(0 3px 2px #39001644)}.wine .rose-rail{width:55px;opacity:.85}.wine .rose-rail svg{height:120px}.bouquet{width:min(400px,65%);height:360px;filter:drop-shadow(0 13px 9px #1b000b66);margin:-12px 0 8px}.bouquet svg{width:100%;height:100%}.hero-hearts{position:absolute;width:180px;top:190px;opacity:.7}.hero-hearts svg{width:100%}.hero-hearts.left{left:7%}.hero-hearts.right{right:7%;transform:scaleX(-1)}.recipient{font-family:'Caveat',cursive;font-size:23px;margin:-8px 0 20px;color:#e5b0bc}.opening .next-button{border:0;background:none;color:#eed2d5;box-shadow:none;border-radius:0;font-size:18px;letter-spacing:.1em}.bunny{width:260px;height:320px;filter:drop-shadow(0 7px 4px #952b3b15)}.bunny svg{height:100%;width:100%}.valentine h2{font-family:'Caveat',cursive;letter-spacing:.04em}.bunny-note{margin:4px 0 24px;text-align:center}.envelope-stage{height:315px;display:flex;align-items:flex-end;justify-content:center;width:100%;margin-top:0}.envelope{width:320px;height:210px;position:relative;perspective:900px;filter:drop-shadow(0 16px 10px #7b173326)}.envelope-back{position:absolute;inset:0;background:#df8f9e;border:2px solid #6b192a;border-radius:6px}.letter-peek{position:absolute;bottom:10px;left:9%;width:82%;height:230px;background:#fff0db;border-radius:45% 45% 10% 10%;text-align:center;padding:30px 10px;color:#8e263b;transition:transform 1.1s cubic-bezier(.2,.7,.2,1) .35s;z-index:1;transform:translateY(30px);box-shadow:0 0 0 1px #b87b6c}.letter-peek span{font-size:66px}.letter-peek p{font-family:'Caveat',cursive;font-size:25px;overflow-wrap:anywhere;margin:8px 0}.envelope-front{position:absolute;inset:0;z-index:3;background:linear-gradient(32deg,#f6b8bd 49.5%,transparent 50%) left/50% 100% no-repeat,linear-gradient(-32deg,#f6b8bd 49.5%,transparent 50%) right/50% 100% no-repeat;clip-path:polygon(0 0,50% 63%,100% 0,100% 100%,0 100%);border:2px solid #6b192a;border-radius:5px}.envelope-front:after{content:'';position:absolute;inset:0;background:#ef9ca9;clip-path:polygon(0 100%,50% 40%,100% 100%)}.envelope-flap{position:absolute;inset:0;background:#f6b7ba;clip-path:polygon(0 0,100% 0,50% 65%);z-index:4;transform-origin:top;transition:transform .7s ease,z-index 0s .3s;filter:drop-shadow(0 2px 1px #7b203a)}.envelope-seal{position:absolute;top:95px;left:calc(50% - 22px);width:44px;height:44px;border-radius:50%;background:#8d1935;color:#f9c0c9;border:3px double #c45b70;z-index:5;font-size:23px;transition:opacity .3s}.envelope.open .envelope-flap{transform:rotateX(180deg);z-index:0}.envelope.open .letter-peek{transform:translateY(-110px)}.envelope.open .envelope-seal{opacity:0;pointer-events:none}.envelope-scene .next-button{margin-top:30px}.envelope-scene h2{margin-bottom:0}.envelope-scene>.scene-content>p{margin:10px 0}.heart-scene .scene-content{padding-top:105px;padding-bottom:66px}.heart-paper{position:relative;background:#fff0d7;color:#6c1b2b;width:min(660px,100%);margin:40px 0 100px;filter:drop-shadow(0 9px 9px #26000e55);transform-origin:50% 15%;animation:unfold 1.3s cubic-bezier(.2,.7,.3,1)}.heart-lobe{position:absolute;inset:-80px 0 auto;height:170px;background:#fff0d7;border-radius:50% 50% 0 0;clip-path:polygon(0 0,45% 0,50% 27%,55% 0,100% 0,100% 100%,0 100%)}.heart-paper:before{content:'';position:absolute;left:50%;top:-42px;bottom:0;width:1px;background:#bd8e6b20;z-index:1}.heart-point{position:absolute;inset:auto 0 -100px;height:102px;background:#fff0d7;clip-path:polygon(0 0,100% 0,50% 100%)}.heart-copy{position:relative;padding:10px 65px 28px;z-index:2;text-align:center}.heart-copy h2{font-size:38px}.heart-copy .letter-text{font-size:23px;line-height:1.42}.signature{margin:24px 0 0}.tulips{position:absolute;width:90px;z-index:1}.tulips svg{width:100%}.tulips-left{left:25px;top:100px}.tulips-right{right:25px;bottom:130px;transform:rotate(12deg)}.ornamental-rule{font-family:serif;font-size:17px;opacity:.6;width:100%;text-align:center;margin-bottom:30px}.reminder-photos{display:grid;grid-template-columns:1fr 1.35fr 1fr;align-items:center;gap:24px;width:100%;max-width:700px}.polaroid{background:#fff2e7;box-shadow:0 3px 8px #6515293b;margin:0;padding:7px 7px 4px;color:#742c3c;min-width:0;position:relative;transform:rotate(var(--tilt,0deg));animation:photo-arrive .8s both;animation-delay:calc(var(--order,0)*.055s)}.polaroid:nth-child(2n){--tilt:4deg}.polaroid:nth-child(3n+1){--tilt:-4deg}.photo-slot{display:block;padding:0;background:#d9b6b2;border:0;width:100%;aspect-ratio:1;overflow:hidden;position:relative;color:#814758}.photo-slot img{display:block;width:100%;height:100%;object-fit:cover}.photo-placeholder{display:flex;align-items:center;justify-content:center;flex-direction:column;gap:12px;position:absolute;inset:0;background:radial-gradient(circle at 60% 25%,#f9e2d5,transparent 45%),linear-gradient(155deg,#dbcac0,#e6adb7);font-family:'Caveat',cursive;font-size:16px;text-align:center;padding:8px}.placeholder-flower{font-size:42px;color:#a75565;opacity:.5}.polaroid figcaption{text-align:center;font-size:18px;line-height:1.2;padding:8px 1px 4px;overflow-wrap:anywhere}.music-player{display:flex;align-items:center;width:min(440px,100%);gap:14px;padding:15px 23px;border-radius:22px;background:#fce0e6b3;box-shadow:0 3px 12px #7e1d3112;margin:35px 0 0;position:relative;z-index:3}.music-heart{font-size:38px}.music-info{flex:1;min-width:0}.music-info p{font-family:'Caveat',cursive;font-size:24px;margin:0 0 8px;overflow-wrap:anywhere}.music-track{display:flex;align-items:center;gap:9px;font-size:10px}.music-track input{min-width:0;width:100%;accent-color:#992840}.music-player button{border:0;border-radius:50%;background:#8d1935;color:#fff1df;width:44px;height:44px;flex:0 0 44px}#linked-player{width:min(440px,100%)}#linked-player iframe{width:100%;height:155px;border:0;border-radius:12px;margin-top:14px}.music-status{font-size:12px;min-height:18px;text-align:center;max-width:440px;margin:12px 0 20px}.music-status a{color:inherit}.reminder-leaves{position:absolute;bottom:60px;left:65px;right:65px;display:flex;justify-content:space-between;pointer-events:none}.reminder-leaves svg{width:100px;height:110px}.memory-collage{width:min(740px,100%);display:grid;grid-template-columns:1fr 1.8fr 1fr;align-items:center;gap:30px;margin:6px 0 8px}.memory-column{display:grid;gap:18px}.memory-column .polaroid{padding:5px}.memory-column .photo-slot{aspect-ratio:1.35}.memory-column figcaption{font-size:15px;padding:5px 0}.heart-photo .polaroid{background:transparent;box-shadow:none;padding:0;transform:none}.heart-photo .photo-slot{clip-path:url(#heart-mask);aspect-ratio:1;background:#fbe0d8}.heart-photo figcaption{font-size:23px}.heart-doodles{font-size:30px;letter-spacing:.14em;margin:12px 0 0;opacity:.6}.first-sight{text-align:center;margin:18px 0 32px;font-size:27px;font-weight:500}.polaroid-string{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;width:min(760px,100%);position:relative;padding-top:16px;margin-bottom:28px}.polaroid-string:before{content:'';position:absolute;inset:-10px -15px auto;height:24px;border-bottom:2px solid #884e51;border-radius:0 0 50% 50%;transform:rotate(1deg)}.polaroid-string .polaroid:before{content:'';position:absolute;top:-15px;left:calc(50% - 4px);width:8px;height:26px;background:linear-gradient(90deg,#b58367,#efd3a7,#aa7758);z-index:2;box-shadow:0 1px 2px #65201455}.polaroid-string .polaroid{transform-origin:50% 0;animation:string-arrive 1.2s both,swing 5s ease-in-out 1.2s infinite alternate;animation-delay:calc(var(--order,0)*.03s),1.4s}.polaroid-string figcaption{font-size:16px}.scrapbook-spread{display:grid;grid-template-columns:1fr 1.25fr 1fr;gap:15px;width:100%;align-items:start;margin:25px 0 35px}.scrap-left,.scrap-right{display:grid;gap:40px;position:relative;padding-top:25px}.scrap-left .polaroid:first-child{transform:rotate(-10deg)}.scrap-right .polaroid:first-child{transform:rotate(9deg)}.scrap-left .polaroid:nth-child(2){transform:rotate(6deg)}.scrap-right .polaroid:nth-child(2){transform:rotate(-7deg)}.scrapbook .polaroid{padding:8px}.torn-letter{background:#eaddbd;color:#5c352c;padding:40px 23px 28px;position:relative;box-shadow:0 3px 9px #18000b88;background-image:repeating-linear-gradient(0deg,transparent,transparent 28px,#ad987329 29px,#ad987329 30px);transform:rotate(-1deg)}.torn-letter .letter-text{font-size:23px;line-height:1.35}.tape{position:absolute;top:-5px;left:25%;width:50%;height:28px;background:#e4cba9a6;transform:rotate(5deg)}.camera{width:80%;transform:rotate(-12deg);margin:0 auto}.camera svg{width:100%}.scrap-rose{width:110px;position:absolute;bottom:-15px;left:-40px;transform:rotate(-25deg)}.scrap-rose svg{width:100%}.love-word{font-family:'Great Vibes',cursive;font-size:65px;transform:rotate(-15deg);margin:0;text-align:right;overflow-wrap:anywhere}.ribbon-letter{width:100%;background:#ffe5e8;color:#752238;padding:40px 30px 70px;position:relative;border:9px double #9d3445;outline:2px solid #f6bcc6;outline-offset:5px;box-shadow:0 9px 20px #24000c88;min-height:600px}.ribbon-letter:before{content:'';position:absolute;inset:7px;border:2px solid #b33e53;border-radius:20px 3px 18px 4px;pointer-events:none}.ribbon-letter h2{font-size:37px;padding:0 20px}.letter-ribbon{position:absolute;top:-48px;left:calc(50% - 65px);width:130px}.letter-ribbon svg{width:100%;height:110px}.final-letter-layout{display:grid;grid-template-columns:100px 1fr 100px;gap:22px;align-items:start}.final-letter-layout .letter-text{font-size:23px;line-height:1.4}.final-photos{display:flex;flex-direction:column;gap:100px;padding-top:20px}.right-photos{padding-top:160px}.final-photos .polaroid{padding:5px}.final-photos figcaption{font-size:14px;padding:5px 0}.final-photos .photo-slot{aspect-ratio:.8}.final-rose{position:absolute;width:90px;height:100px;bottom:12px;left:20px;transform:rotate(-25deg)}.final-rose svg{width:100%;height:100%}.final-scene .scene-content{padding-top:80px}.final-scene .next-button{margin-top:35px}#finished{text-align:center}#finished p{margin-bottom:0}.page-dots{display:flex;gap:14px;align-items:center;justify-content:center;padding:16px 20px 22px}.page-dots button{width:9px;height:9px;padding:0;border-radius:50%;border:1px solid #edb8c7;background:none;position:relative}.page-dots button:before{content:'';position:absolute;inset:-10px}.page-dots button[aria-current]{background:#f5b8ca}.ambient{position:fixed;inset:52px 0 0;pointer-events:none;overflow:hidden;z-index:6}.ambient span{position:absolute;bottom:-40px;left:calc(5% + var(--i)*8%);color:#d78099;font-size:calc(14px + var(--i)*1px);opacity:0;animation:float-up calc(14s + var(--i)*1.2s) linear infinite;animation-delay:calc(var(--i)*-2.5s)}.scene.entering{animation:page-in .65s cubic-bezier(.2,.7,.3,1) both}body[data-editor=true] .photo-slot{cursor:pointer}body[data-editor=true] .photo-slot:after{content:'＋';position:absolute;right:4px;bottom:4px;background:#fff0e4de;color:#782239;font-size:18px;line-height:26px;width:26px;height:26px;border-radius:50%}body[data-editor=true] .photo-slot:hover{box-shadow:inset 0 0 0 3px #af3a59}@keyframes page-in{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes photo-arrive{from{opacity:0;translate:0 14px}to{opacity:1;translate:0 0}}@keyframes string-arrive{from{opacity:0;translate:0 -25px}to{opacity:1;translate:0 0}}@keyframes swing{from{rotate:-2deg}to{rotate:2deg}}@keyframes unfold{from{opacity:0;transform:perspective(1000px) rotateX(-22deg) scale(.96)}to{opacity:1;transform:perspective(1000px) rotateX(0) scale(1)}}@keyframes float-up{0%{transform:translate3d(0,0,0) rotate(0);opacity:0}12%{opacity:.35}88%{opacity:.3}100%{transform:translate3d(22px,-95vh,0) rotate(45deg);opacity:0}}
@media(min-width:1200px){main{padding-top:15px}.scene{min-height:680px}.scene-content{min-height:680px}}
@media(max-width:700px){main{padding:0 10px 8px}.reader-bar{padding:0 17px;height:44px}.ambient{top:44px}.scene,.scene-content{min-height:calc(100svh - 110px)}.scene-content{padding:48px 35px 42px}.scene h2{font-size:36px;margin-bottom:22px}.rose-rail{width:49px;left:-20px;opacity:.85}.rose-right{left:auto;right:-20px}.wine .rose-rail{width:47px}.rose-rail svg{height:120px}.lace{inset:6px}.pink .lace{background-size:44px 20px}.bouquet{width:86%;height:310px;margin:0 0 16px}.opening .scene-content{padding-left:30px;padding-right:30px}.opening h1{font-size:31px}.hero-hearts{width:95px;top:160px}.hero-hearts.left{left:4%}.hero-hearts.right{right:4%}.bunny{width:230px;height:285px}.handwritten{font-size:22px}.bunny-note{font-size:22px;text-align:center}.next-button{font-size:19px;padding:12px 22px}.envelope{width:min(280px,100%);height:180px}.envelope-stage{height:290px;margin-bottom:8px}.envelope-seal{top:80px}.letter-peek{height:210px}.envelope.open .letter-peek{transform:translateY(-90px)}.heart-scene .scene-content{padding:105px 28px 45px}.heart-paper{margin:25px 0 85px}.heart-lobe{top:-58px;height:120px}.heart-point{bottom:-66px;height:68px}.heart-copy{padding:4px 20px 18px}.heart-copy h2{font-size:32px;margin-bottom:15px}.heart-copy .letter-text{font-size:21px;line-height:1.35}.heart-copy .signature{font-size:21px}.tulips{width:48px}.tulips-left{left:15px;top:40px}.tulips-right{right:13px;bottom:90px}.reminders .scene-content{padding-left:31px;padding-right:31px}.reminder-photos{gap:10px}.reminder-photos .polaroid{padding:4px}.polaroid figcaption{font-size:15px;padding-top:5px}.photo-placeholder{font-size:12px;gap:3px;padding:4px}.placeholder-flower{font-size:29px}.ornamental-rule{font-size:12px;margin-bottom:25px}.music-player{padding:12px;gap:10px;margin-top:35px}.music-heart{font-size:28px}.music-info p{font-size:22px}.music-player button{width:40px;height:40px;flex-basis:40px}.reminder-leaves{bottom:45px;left:25px;right:25px}.reminder-leaves svg{width:58px;height:75px}.memory-collage{gap:12px;grid-template-columns:1fr 1.7fr 1fr}.memories .scene-content{padding:45px 30px 38px}.memories h2{font-size:32px}.memory-column{gap:15px}.memory-column figcaption{font-size:12px}.memory-column .polaroid{padding:3px}.heart-photo figcaption{font-size:18px}.heart-doodles{font-size:22px;letter-spacing:.07em}.first-sight{font-size:23px;line-height:1.2;margin:24px 0 32px}.polaroid-string{gap:10px}.polaroid-string .polaroid{padding:3px}.polaroid-string figcaption{font-size:12px}.polaroid-string .polaroid:before{width:5px;height:19px;top:-12px;left:calc(50% - 3px)}.scrapbook .scene-content{padding:45px 29px 38px}.scrapbook h2{font-size:32px}.scrapbook-spread{grid-template-columns:1fr 1fr;gap:16px;margin:10px 0 28px}.torn-letter{grid-column:1/-1;grid-row:2;transform:rotate(-1deg);padding:30px 22px}.scrap-left,.scrap-right{gap:22px;padding-top:12px}.scrapbook .polaroid{padding:5px}.scrap-left{grid-column:1}.scrap-right{grid-column:2}.scrap-rose{width:60px;bottom:-20px;left:-25px}.camera{width:60%;height:55px}.camera svg{height:100%}.love-word{font-size:46px;height:55px}.torn-letter .letter-text{font-size:23px}.final-scene .scene-content{padding:70px 25px 38px}.ribbon-letter{padding:38px 15px 55px;border-width:6px;min-height:600px}.ribbon-letter h2{font-size:31px;padding:0 0 10px}.final-letter-layout{display:block}.final-letter-layout .letter-text{font-size:22px;line-height:1.43}.final-photos{display:grid;grid-template-columns:1fr 1fr;gap:30px;padding:6px 12px 22px}.right-photos{padding:25px 12px 0}.final-photos .photo-slot{aspect-ratio:.8}.final-photos figcaption{font-size:15px}.final-rose{width:55px;height:65px;bottom:-5px;left:5px}.letter-ribbon{width:100px;left:calc(50% - 50px);top:-49px}.page-dots{gap:17px;padding-bottom:17px}}
@media(max-width:340px){.scene-content{padding-left:28px;padding-right:28px}.scene h2{font-size:30px}.bouquet{height:270px}.heart-copy{padding-left:15px;padding-right:15px}.heart-copy .letter-text{font-size:20px}.music-heart{display:none}.reminder-photos{gap:6px}.memory-collage{gap:7px}.polaroid-string{gap:7px}.reader-bar{font-size:10px}.final-scene .scene-content{padding-left:22px;padding-right:22px}.ribbon-letter{padding-left:12px;padding-right:12px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.ambient{display:none}}

.torn-letter:before,.torn-letter:after{content:"";position:absolute;left:0;right:0;height:7px;background:#eaddbd;clip-path:polygon(0 100%,7% 0,14% 80%,24% 10%,33% 100%,41% 0,54% 90%,63% 10%,73% 100%,88% 0,100% 100%);pointer-events:none}.torn-letter:before{top:-6px}.torn-letter:after{bottom:-6px;transform:rotate(180deg)}

.rose-garland{position:absolute;left:0;right:0;display:flex;justify-content:space-around;height:38px;overflow:hidden;pointer-events:none;z-index:1}.rose-garland.top{top:-18px}.rose-garland.bottom{bottom:-18px;transform:rotate(180deg)}.rose-garland svg{width:56px;height:75px;flex-shrink:0;transform:rotate(-24deg)}.rose-garland svg:nth-child(even){transform:rotate(25deg)}@media(max-width:700px){.rose-garland svg{width:38px;height:52px}.rose-garland{height:31px}.rose-garland.top{top:-14px}.rose-garland.bottom{bottom:-14px}}

/* Two true rounded lobes, a growing readable centre, and a curved tapered tip. */
.heart-lobe{background:none;clip-path:none;inset:-145px 0 auto;height:147px;border-radius:0}.heart-lobe:before,.heart-lobe:after{content:"";position:absolute;top:0;bottom:0;width:50.1%;background:#fff0d7;border-radius:50% 50% 0 0/100% 100% 0 0}.heart-lobe:before{left:0}.heart-lobe:after{right:0}.heart-point{bottom:-165px;height:167px;clip-path:polygon(0 0,100% 0,98% 15%,93% 30%,85% 47%,70% 72%,50% 100%,30% 72%,15% 47%,7% 30%,2% 15%)}.heart-paper{margin-top:100px;margin-bottom:185px}.heart-copy{padding-top:0}.heart-copy h2{margin-top:-10px}.heart-scene .scene-content{padding-top:85px}@media(max-width:700px){.heart-lobe{top:-75px;height:77px}.heart-point{bottom:-85px;height:87px}.heart-paper{margin-top:55px;margin-bottom:105px}.heart-scene .scene-content{padding-top:65px}.heart-copy h2{margin-top:0}}
/* Fold the decorative flaps, not a potentially ten-thousand-character sheet. */
.heart-paper{animation:none;transform:none}.heart-lobe{animation:unfold 1.1s ease both;transform-origin:50% 100%}.heart-copy{animation:photo-arrive .85s ease both}.heart-point{animation:photo-arrive 1.1s ease both}.torn-letter{transform:none}
.scene h1:focus,.scene h2:focus{outline:none}

/* Requested revision only: slide 3. The reserved headroom belongs to the envelope,
   so neither the rising letter nor the rotated flap can reach the heading. */
.envelope-stage{--env-h:210px;--headroom:155px;--rise:112px;height:calc(var(--env-h) + var(--headroom));flex:0 0 auto;margin:0;align-items:flex-end;padding:0}
.envelope{height:var(--env-h);animation:envelope-bob 4s ease-in-out infinite;filter:drop-shadow(0 16px 10px #7b173326);isolation:isolate}
.envelope-back{z-index:1}.letter-peek{height:calc(var(--env-h) - 24px);bottom:12px;padding:13px 12px;transform:translate3d(0,0,0);border-radius:45% 45% 8px 8px;transition:transform 1.5s cubic-bezier(.45,0,.25,1) .72s;z-index:2;overflow:hidden}
.letter-peek span{font-size:50px;line-height:1.1}.letter-peek p{font-size:23px;line-height:1.1;margin:6px 0;overflow-wrap:anywhere}
.envelope-front{z-index:3}.envelope-flap{z-index:4;backface-visibility:visible;transform:rotateX(0);transform-origin:50% 0;transition:transform .95s cubic-bezier(.45,0,.25,1),z-index 0s .47s}
.envelope.open .envelope-flap{transform:rotateX(180deg);z-index:1}.envelope.open .letter-peek{transform:translate3d(0,calc(-1 * var(--rise)),0)}
.envelope-seal{inset:0;width:100%;height:100%;background:none;border:0;border-radius:6px;z-index:6;padding:0;transition:opacity .32s ease}.seal-mark{position:absolute;top:47%;left:calc(50% - 22px);width:44px;height:44px;display:grid;place-items:center;border-radius:50%;background:#8d1935;color:#f9c0c9;border:3px double #c45b70;font-size:23px;box-shadow:0 3px 6px #6b192a26}
.envelope.open .envelope-seal{opacity:0;pointer-events:none}.envelope-hint{font:19px 'Caveat',cursive;letter-spacing:.04em;margin:13px 0 0!important;text-align:center;transition:opacity .35s ease}.envelope-stage:has(.open)+.envelope-hint{opacity:0}
.envelope-actions{min-height:90px;width:100%;display:flex;justify-content:center;align-items:center}.envelope-actions .next-button{margin-top:14px}.envelope-actions #read-letter{animation:envelope-next .35s ease both}
.envelope-hearts{position:absolute;inset:-30px 0 auto;height:90px;z-index:5;pointer-events:none;opacity:0}.envelope-hearts i{position:absolute;bottom:0;font-style:normal;color:#a33250;font-size:27px;left:15%;opacity:0}.envelope-hearts i:nth-child(2){left:66%;font-size:22px}.envelope-hearts i:nth-child(3){left:44%;font-size:18px}.envelope-hearts i:nth-child(4){left:82%;font-size:18px}.envelope.revealed .envelope-hearts{opacity:1}.envelope.revealed .envelope-hearts i{animation:envelope-heart 1.5s ease-out both}.envelope.revealed .envelope-hearts i:nth-child(2){animation-delay:.1s}.envelope.revealed .envelope-hearts i:nth-child(3){animation-delay:.25s}.envelope.revealed .envelope-hearts i:nth-child(4){animation-delay:.35s}.envelope.revealed .letter-peek{box-shadow:0 0 0 1px #b87b6c,0 0 24px #fff1cd99;transition:transform 1.5s cubic-bezier(.45,0,.25,1) .72s,box-shadow .5s ease}
@keyframes envelope-bob{0%,100%{translate:0 0}50%{translate:0 -4px}}@keyframes envelope-next{from{opacity:0;translate:0 5px}to{opacity:1;translate:0 0}}@keyframes envelope-heart{0%{opacity:0;transform:translateY(0) scale(.7)}25%{opacity:.65}100%{opacity:0;transform:translateY(-65px) scale(1.1)}}
@media(max-width:700px){.envelope-stage{--env-h:180px;--headroom:140px;--rise:100px;height:calc(var(--env-h) + var(--headroom));margin-bottom:0}.envelope.open .letter-peek{transform:translate3d(0,calc(-1 * var(--rise)),0)}.envelope-scene .scene-content{padding-top:48px;padding-bottom:35px}.envelope-actions{min-height:82px}.letter-peek span{font-size:43px}.letter-peek p{font-size:21px}.envelope-hint{font-size:18px}}
@media(prefers-reduced-motion:reduce){.envelope{animation:none}.envelope-hearts{display:none}}

/* Requested music controls: persist outside the hidden/inert pages. */
.persistent-music{position:fixed;right:max(15px,env(safe-area-inset-right));bottom:max(16px,env(safe-area-inset-bottom));z-index:20;display:flex;align-items:center;gap:7px;padding:9px 13px;border:1px solid #d899ad;border-radius:30px;background:#75162eeF;color:#ffe7ec;box-shadow:0 3px 14px #34051433;min-height:44px;font:12px 'DM Sans',sans-serif;letter-spacing:.02em}.persistent-music>span:first-child{font-size:21px;line-height:1}.persistent-music[aria-pressed=true]{background:#e9adbd;color:#591125}.persistent-music:disabled{opacity:.65}.music-toast{position:fixed;right:15px;bottom:72px;z-index:21;max-width:min(285px,calc(100vw - 30px));background:#fff0f4;color:#6d2038;border:1px solid #dda1b2;border-radius:14px;padding:12px 16px;font-size:12px;line-height:1.5;box-shadow:0 4px 20px #33081525}.music-toast:empty{display:none}.music-dock{position:fixed;z-index:15;width:360px;max-width:calc(100vw - 30px);border:1px solid #e5a7b8;border-radius:16px;background:#fce1e8;box-shadow:0 4px 14px #66152c20;padding:6px}.music-dock.parked{left:-10000px;top:0;pointer-events:none}.music-dock.popup{right:15px;bottom:90px;left:auto;top:auto}.music-dock.inline{left:var(--dock-left);top:var(--dock-top);width:var(--dock-width);max-width:none;box-shadow:none}.music-dock #music-dock-close{position:absolute;right:4px;top:-29px;background:#fff0f4;color:#7e2440;border:1px solid #db9cad;border-radius:50%;width:27px;height:27px;font:20px sans-serif}.music-dock.inline #music-dock-close,.music-dock.parked #music-dock-close{display:none}#service-player iframe{display:block;width:100%;height:152px;border:0;border-radius:11px}#linked-player.has-service{height:166px;margin-top:14px;flex:0 0 auto}.audio-fallback{background:#fce0e6;border:1px solid #c37b91;color:#76223d;padding:8px 15px;border-radius:20px;font:17px 'Caveat',cursive;min-height:40px;margin-top:12px}.music-track input:disabled{opacity:.55}
/* The closed seam is opaque: the paper becomes visible only after the flap turns. */
.envelope .letter-peek{visibility:hidden}.envelope.open .letter-peek{visibility:visible;transition:transform 1.5s cubic-bezier(.45,0,.25,1) .72s,visibility 0s .55s}.envelope.revealed .letter-peek{transition:transform 1.5s cubic-bezier(.45,0,.25,1) .72s,box-shadow .5s ease}
.envelope:not(.open) .letter-peek,.envelope:not(.open) .envelope-flap{transition:none}
body:has(.music-dock.popup) .music-toast{bottom:270px}
