:root{--ink:#28131d;--wine:#6d2638;--wine2:#8e4352;--rose:#b87970;--gold:#b99a70;--paper:#f5ebdd;--cream:#fbf5ed;--muted:#a98f8b;--ease:cubic-bezier(.2,.78,.2,1)}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-snap-type:y proximity}body{margin:0;background:var(--paper);color:var(--ink);font-family:'DM Sans',sans-serif;overflow-x:hidden}::selection{background:#b8797070}.grain{position:fixed;inset:0;z-index:50;pointer-events:none;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' filter='url(%23n)' opacity='.22'/%3E%3C/svg%3E")}.loader{position:fixed;inset:0;background:var(--ink);z-index:200;display:grid;place-content:center;justify-items:center;color:var(--paper);transition:opacity 1s,visibility 1s}.loader.done{opacity:0;visibility:hidden}.loader-seal{font-size:36px;color:var(--gold);animation:spin 4s linear infinite}.loader p{font:italic 22px 'Playfair Display';letter-spacing:.04em}.loader span{width:120px;height:1px;background:#ffffff30;overflow:hidden;position:relative}.loader span:after{content:'';position:absolute;inset:0;background:var(--gold);animation:loadline 1.5s ease-in-out infinite}@keyframes spin{to{transform:rotate(360deg)}}@keyframes loadline{from{transform:translateX(-110%)}to{transform:translateX(110%)}}.progress{height:2px;position:fixed;z-index:90;top:0;left:0;right:0;background:#ffffff24}.progress i{display:block;width:0;height:100%;background:linear-gradient(90deg,var(--rose),var(--gold),var(--wine2))}.music{position:fixed;right:22px;top:20px;z-index:100;background:#f9f1e7e8;border:1px solid #b99a7040;border-radius:40px;padding:7px 8px 7px 13px;display:flex;gap:10px;align-items:center;font-size:9px;letter-spacing:.12em;color:var(--wine)}.music button{border:0;background:var(--wine);color:white;width:30px;height:30px;border-radius:50%;cursor:pointer}.music-dot{width:6px;height:6px;border-radius:50%;background:#a36d69;box-shadow:0 0 0 4px #a36d6920}.scene{min-height:100svh;position:relative;padding:110px 7vw;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden;scroll-snap-align:start}.opening{background:radial-gradient(ellipse at 50% 45%,#633044 0,#351b28 42%,#211019 100%);color:var(--paper);text-align:center;min-height:100svh}.opening:before,.opening:after{content:'';position:absolute;width:min(78vw,850px);height:min(78vw,850px);border:1px solid #c6a87825;border-radius:50%;animation:orbit 32s linear infinite}.opening:after{width:min(65vw,700px);height:min(65vw,700px);animation-direction:reverse;border-style:dashed;opacity:.5}@keyframes orbit{to{transform:rotate(360deg)}}.opening-glow{position:absolute;width:400px;height:400px;border-radius:50%;background:#b8797020;filter:blur(90px)}.intro-copy{position:relative;z-index:2;max-width:720px}.eyebrow,.scene-number,.opening-foot{font-size:9px;letter-spacing:.24em;color:var(--gold)}.intro-copy h1{font:500 clamp(48px,8vw,94px)/1.04 'Playfair Display';letter-spacing:-.045em;margin:22px 0}.intro-copy h1 em,.scene h2 em{font-weight:500;color:#c99a8d}.hand{font:26px 'Caveat',cursive;color:var(--rose)}.opening .hand{color:#d6b7a6}.envelope-wrap{width:190px;height:132px;margin:34px auto 20px;perspective:900px;cursor:pointer}.envelope{position:relative;width:100%;height:100%;filter:drop-shadow(0 20px 25px #09050b70);transition:transform .8s var(--ease)}.env-back,.env-front,.env-flap{position:absolute;inset:0}.env-back{background:#a65c62;border-radius:5px}.env-front{background:linear-gradient(145deg,#8d3f50,#68263a);clip-path:polygon(0 0,50% 58%,100% 0,100% 100%,0 100%);z-index:3}.env-flap{background:#a85862;clip-path:polygon(0 0,100% 0,50% 68%);transform-origin:top;z-index:4;transition:transform .9s var(--ease)}.letter-peek{position:absolute;z-index:2;background:#f8eddf;color:var(--wine);width:88%;height:92%;left:6%;top:3%;padding:17px 8px;text-align:center;transition:transform 1s var(--ease)}.letter-peek .hand{display:block;font-size:23px;color:var(--wine)}.letter-peek small{font:9px 'DM Sans';display:block;margin-top:8px}.wax{position:absolute;z-index:5;top:43%;left:calc(50% - 18px);width:36px;height:36px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#e0c99e,#a98755 75%);color:#6c2636;font:italic 19px 'Playfair Display';display:grid;place-items:center;box-shadow:0 3px 8px #1b0b12aa;transition:opacity .4s}.envelope-wrap.open .env-flap{transform:rotateX(180deg);z-index:1}.envelope-wrap.open .letter-peek{transform:translateY(-105px);z-index:5}.envelope-wrap.open .wax{opacity:0}.open-btn,.pill-btn{border:1px solid #c7a878;background:transparent;color:var(--paper);border-radius:40px;padding:14px 25px;font:11px 'DM Sans';letter-spacing:.08em;cursor:pointer;transition:.35s}.open-btn:hover{background:var(--gold);color:var(--ink);transform:translateY(-3px)}.open-btn span{padding-left:18px}.opening-foot{margin-top:55px;color:#c3a58a;font-size:8px}.opening-foot b{padding:0 12px;color:#d3b783}.petal{position:absolute;color:#c49c8a;opacity:.6;font-size:30px;animation:float 7s ease-in-out infinite}.p1{left:13%;top:22%}.p2{right:14%;top:32%;animation-delay:-2s}.p3{right:19%;bottom:15%;animation-delay:-4s}@keyframes float{50%{transform:translate(12px,-18px) rotate(24deg)}}.fireworks{position:absolute;inset:0;pointer-events:none}.spark-burst{position:absolute;width:4px;height:4px;border-radius:50%;background:var(--gold);box-shadow:0 -20px #d7b98c,0 20px #d7b98c,20px 0 #b87970,-20px 0 #b87970,14px 14px #d7b98c,-14px -14px #d7b98c;animation:burst 1.8s ease-out forwards}@keyframes burst{from{opacity:1;transform:scale(.2)}to{opacity:0;transform:scale(1.8)}}.reveal-scene{background:#2c1420;color:var(--paper);text-align:center}.scene-number{position:absolute;top:35px;left:7vw}.gold-line{width:1px;height:75px;background:linear-gradient(transparent,var(--gold));margin-bottom:32px}.name-title{font:500 clamp(90px,19vw,230px)/.9 'Playfair Display';letter-spacing:-.09em;margin:16px 0;color:#f5ebdd;text-shadow:0 12px 50px #b8797030}.name-title span{color:var(--gold)}.name-sub{font:italic 16px 'Playfair Display';color:#c8aaa0}.name-flower{font-size:42px;color:var(--gold);margin-top:40px;animation:spin 28s linear infinite}.scroll-cue{position:absolute;bottom:28px;color:#c8aa99;text-decoration:none;font-size:8px;letter-spacing:.2em}.scroll-cue span{display:block;margin-top:9px;font-size:18px;text-align:center}.letter-scene{background:#eee1d0 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='.7' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.08'/%3E%3C/svg%3E");}.paper,.long-paper{position:relative;width:min(720px,100%);background:#fbf5e9;padding:clamp(32px,7vw,78px);box-shadow:0 35px 75px #44212a20;border:1px solid #d9c9ad;transform:rotate(-.6deg)}.paper:after,.long-paper:after{content:'';position:absolute;inset:12px;border:1px solid #d8c7ad;pointer-events:none}.paper-tape{position:absolute;top:-13px;left:45%;width:90px;height:25px;background:#b77c6b70;transform:rotate(-3deg)}.postmark{position:absolute;right:34px;top:30px;border:1px solid #b68c69;border-radius:50%;padding:12px 8px;color:#a17c5c;font-size:8px;letter-spacing:.1em;transform:rotate(10deg)}.paper .hand,.long-paper .hand{color:var(--wine);font-size:31px}.paper h2,.scene h2{font:500 clamp(38px,6vw,68px)/1.08 'Playfair Display';letter-spacing:-.04em;text-align:center;margin:14px 0 28px}.paper h2 em{color:var(--rose)}.paper p:not(.hand),.long-paper p:not(.hand){font-size:14px;line-height:2;color:#6b5550;position:relative;z-index:1}.paper .sign,.long-paper .sign{margin-top:28px}.scribble{position:absolute;right:8%;bottom:9%;font:22px 'Caveat';color:#9b726d;transform:rotate(-8deg)}.cake-scene{background:#f8f0e5;text-align:center}.cake-scene .muted,.muted{font-size:12px;color:#927c75}.cake-scene h2{margin-bottom:8px}.cake-wrap{height:280px;width:320px;display:grid;place-items:end center;position:relative;margin:25px 0 10px}.cake-halo{position:absolute;width:270px;height:170px;background:#d8a79a55;filter:blur(55px);border-radius:50%;bottom:20px;animation:halo 4s ease-in-out infinite}@keyframes halo{50%{transform:scale(1.2);opacity:.5}}.cake-art{width:230px;height:180px;position:relative;filter:drop-shadow(0 18px 18px #69424b22)}.cake-body{position:absolute;bottom:22px;width:230px;height:105px;border-radius:12px 12px 22px 22px;background:linear-gradient(90deg,#d9a69a,#f1d1bc 50%,#cf938f);box-shadow:inset 0 -13px #bd7d7d}.cake-body small,.cake-body strong{display:block;position:relative;text-align:center;color:#86545a;font-family:'Playfair Display';font-style:italic}.cake-body small{padding-top:34px;font-size:10px;letter-spacing:.1em}.cake-body strong{font-size:27px}.frosting{position:absolute;bottom:111px;width:230px;height:28px;border-radius:50%;background:#fff3e5;z-index:2}.frosting:after{content:'';position:absolute;right:35px;top:7px;width:15px;height:27px;border-radius:0 0 10px 10px;background:#fff3e5}.cake-top{position:absolute;bottom:126px;left:10px;width:210px;height:22px;border-radius:50%;background:#fff8ec;z-index:3}.plate{position:absolute;bottom:8px;left:-20px;width:270px;height:22px;border-radius:50%;background:#d8bda7;box-shadow:0 7px #c19d8c}.candles{position:absolute;z-index:4;bottom:144px;left:37px;display:flex;gap:25px}.candles i{width:8px;height:42px;border-radius:3px;background:repeating-linear-gradient(135deg,#fff 0 5px,#b87970 5px 9px);position:relative}.candles b{position:absolute;top:-19px;left:-1px;width:10px;height:16px;background:radial-gradient(ellipse at 50% 75%,#fff5bd 0 25%,#ee9952 60%,transparent 72%);animation:flicker .6s infinite alternate}@keyframes flicker{to{transform:scale(.8) rotate(8deg);opacity:.7}}.candles.off b{display:none}.pill-btn{background:var(--wine);border:0;color:white}.pill-btn:hover{transform:translateY(-3px);box-shadow:0 12px 25px #6d263830}.wish-result{height:25px;font:24px 'Caveat';color:var(--wine2)}.question-scene{background:#6d2638;color:#f8efe3;text-align:center}.question-scene .scene-number{color:#d8b98e}.question-scene h2{font-size:clamp(50px,8vw,90px)}.question-scene h2 em{color:#e5b9a9}.question-scene .muted{color:#d8b8ad}.answers{display:flex;gap:18px;align-items:center;justify-content:center;margin:28px 0 12px;min-height:75px}.answers button{border:1px solid #d9bda0;border-radius:50px;padding:16px 32px;font-weight:600;cursor:pointer;transition:transform .35s var(--ease),opacity .35s}.answers #yes{background:#f2d9c8;color:#632638}.answers #no{background:transparent;color:#f8efe3}.answer-note{color:#e2bdb2}.yes-reveal{display:none;max-width:390px;margin:16px auto}.yes-reveal.show{display:block;animation:pop .7s var(--ease)}.heart-big{font-size:55px;color:#e9b8b2}.yes-reveal h3{font:italic 38px 'Playfair Display';margin:0}.yes-reveal p{font-size:13px;line-height:1.8;color:#ead5c8}.yes-reveal a{color:#f1d4bc;font-size:11px}.doodle{position:absolute;color:#e7bd9e;font-size:55px;opacity:.45}.doodle-heart{left:12%;top:28%;transform:rotate(-20deg)}.doodle-star{right:12%;bottom:22%}@keyframes pop{from{opacity:0;transform:translateY(18px) scale(.9)}to{opacity:1;transform:none}}.scrapbook-scene{background:#f1e5d5;text-align:center;padding-bottom:90px}.scrapbook-scene h2{margin:8px 0}.scrapbook-scene .muted{margin-top:0}.photo-grid{width:min(930px,100%);display:grid;grid-template-columns:repeat(3,1fr);gap:34px 26px;margin:50px auto 20px;align-items:center}.photo-card{background:#fffaf0;padding:11px 11px 30px;box-shadow:0 16px 34px #49302a1b;position:relative;transform:rotate(-2deg);transition:transform .7s var(--ease),box-shadow .7s;min-width:0}.photo-card:nth-child(even){transform:rotate(2.5deg) translateY(22px)}.photo-card:nth-child(3n){transform:rotate(-1deg) translateY(-8px)}.photo-card:before{content:'';position:absolute;width:65px;height:18px;background:#bd958a88;top:-8px;left:calc(50% - 32px);transform:rotate(-3deg);z-index:2}.photo-card:hover{transform:translateY(-9px) rotate(0) scale(1.025);box-shadow:0 25px 48px #49302a2a;z-index:3}.photo-placeholder{height:245px;background:linear-gradient(145deg,#e4d2bd,#c9a99a);display:flex;flex-direction:column;align-items:center;justify-content:center;color:#754d4b;overflow:hidden}.photo-placeholder span{font-size:45px}.photo-placeholder small{font:18px 'Caveat';margin-top:9px}.photo-card label{display:block;font:21px 'Caveat';color:#805d5a;padding-top:10px}.photo-card img{width:100%;height:245px;object-fit:cover;display:block}.upload-tools{display:flex;flex-direction:column;align-items:center;gap:9px;margin-top:35px}.upload-tools span{font-size:10px;color:#947e74}.upload-btn{display:inline-block;background:var(--wine);color:#fff5e8;border-radius:30px;padding:13px 22px;font-size:11px;cursor:pointer}.upload-btn input{display:none}.scrap-note{font-size:27px;margin-top:36px}.reasons-scene{background:#e8d8c8}.reasons-scene h2{text-align:center}.reasons-list{width:min(720px,100%);margin:30px auto}.reasons-list article{display:grid;grid-template-columns:42px 1fr 25px;gap:16px;padding:24px 0;border-bottom:1px solid #cbb4a1;align-items:start}.reasons-list article>span{font:italic 17px 'Playfair Display';color:#a46e69}.reasons-list h3{font:500 23px 'Playfair Display';margin:0 0 8px;color:#4a2b31}.reasons-list p{font-size:13px;line-height:1.8;color:#79635d;margin:0}.reasons-list b{font-size:23px;color:#a56d70}.side-doodle{position:absolute;right:9%;bottom:12%;font:100px 'Playfair Display';color:#b8797040}.long-letter-scene{background:#3b1d2a}.long-letter-scene .scene-number{color:#c9a987}.long-paper{max-width:720px;transform:rotate(.4deg);background:#f7eddf}.long-paper p:not(.hand){font-size:14px;line-height:2.1}.margin-flower{position:absolute;right:12%;bottom:12%;font-size:70px;color:#c5a27b;opacity:.65;animation:spin 40s linear infinite}.finale{background:radial-gradient(ellipse at center,#713347,#321724 72%);color:#f7eddf;text-align:center}.final-stars{color:var(--gold);letter-spacing:15px;font-size:22px}.finale h2{font-size:clamp(52px,9vw,100px);margin:8px 0 25px}.final-frame{width:190px;height:235px;padding:9px 9px 25px;background:#f9f1e5;transform:rotate(2deg);box-shadow:0 20px 55px #14091070;margin:5px auto 22px}.final-placeholder{width:100%;height:100%;display:grid;place-items:center;background:linear-gradient(145deg,#d9b9a4,#8e5660);color:#fff4e7;font:italic 30px 'Playfair Display'}.final-nicknames{font:26px/1.35 'Caveat';color:#e2bba9}.final-copy{max-width:430px;font-size:13px;line-height:1.9;color:#e1c9bb}.signature{display:flex;flex-direction:column;gap:4px;margin:25px}.signature .hand{color:#d5b39e}.signature strong{font:500 38px 'Playfair Display'}.signature small{font-size:8px;letter-spacing:.22em;color:#c7a27f;margin-top:9px}.replay{border:1px solid #c4a27c;background:transparent;color:#f7eddf;border-radius:30px;padding:12px 20px;cursor:pointer;font-size:11px}.toast{position:fixed;bottom:20px;left:50%;transform:translate(-50%,20px);opacity:0;background:#29131e;color:white;padding:12px 18px;border-radius:25px;font-size:11px;z-index:150;transition:.3s}.toast.show{opacity:1;transform:translate(-50%,0)}.confetti{position:fixed;top:-15px;z-index:140;width:7px;height:12px;pointer-events:none;animation:fall 3.4s linear forwards}@keyframes fall{to{transform:translateY(110vh) rotate(700deg);opacity:.2}}.float-petal{position:fixed;top:-30px;z-index:2;pointer-events:none;color:#b87970;animation:petalfall linear forwards}@keyframes petalfall{to{transform:translate(var(--drift),110vh) rotate(480deg);opacity:0}}.scene-number{z-index:3}.js-reveal{opacity:0;transform:translateY(42px);filter:blur(5px);transition:opacity 1.1s var(--ease),transform 1.1s var(--ease),filter 1.1s}.js-reveal.visible{opacity:1;transform:none;filter:none}.photo-card.js-reveal{transform:translateY(35px) rotate(var(--tilt,-2deg));transition:opacity 1s,transform 1s var(--ease),filter 1s}.photo-card.js-reveal.visible{transform:rotate(var(--tilt,-2deg))}.photo-card:nth-child(even){--tilt:2.5deg}.photo-card:nth-child(3n){--tilt:-1deg}@media(max-width:700px){.scene{padding:95px 23px;min-height:100svh}.opening:before{width:110vw;height:110vw}.opening:after{width:90vw;height:90vw}.intro-copy h1{font-size:54px}.scene-number{top:25px;left:23px;font-size:8px}.paper{padding:38px 27px}.postmark{right:24px;top:22px;font-size:7px}.paper h2{font-size:39px}.paper p:not(.hand),.long-paper p:not(.hand){font-size:13px}.scribble{right:8%;bottom:4%;font-size:18px}.photo-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px 15px;margin-top:38px}.photo-card{padding:8px 8px 25px}.photo-card img,.photo-placeholder{height:175px}.photo-card label{font-size:18px}.photo-card:nth-child(even){transform:rotate(2deg) translateY(12px)}.upload-tools{margin-top:28px}.doodle-heart{left:5%;top:18%}.doodle-star{right:5%;bottom:14%}.margin-flower{right:4%;bottom:5%;font-size:45px}.music{right:12px;top:12px}.cake-wrap{transform:scale(.9);margin:10px 0}.side-doodle{right:2%;font-size:65px}.final-frame{width:160px;height:205px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.js-reveal{opacity:1;transform:none;filter:none}}
