.envelope-scene{--env-color: var(--rose);--env-color2: var(--rose-deep);--env-flap-color: var(--rose-deep);--env-width: 280px;--env-height: 180px;--env-radius: 6px;--env-heart: var(--rose);--heart-size: 20px}.envelope-scene{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:flex;align-items:center;justify-content:center;background:var(--cream);cursor:pointer;overflow:hidden}.envelope-footer{position:absolute;bottom:0;left:0;right:0;flex-shrink:0;padding:clamp(.5rem,2vh,2rem) 1rem;font-size:var(--text-sm);color:var(--ink);opacity:.8;text-align:center}.envelope-footer-heart{color:var(--rose)}.envelope-wrap{height:calc(var(--env-height) + 120px);display:flex;align-items:flex-start;justify-content:center;padding-top:60px}.envelope{position:relative;width:var(--env-width);height:var(--env-height);border-bottom-left-radius:var(--env-radius);border-bottom-right-radius:var(--env-radius);background-color:var(--env-flap-color);box-shadow:0 4px 20px #0003;transition:transform .3s ease}.envelope-scene:not(:has(.open)) .envelope:hover{transform:scale(1.03)}.front{position:absolute;width:0;height:0;z-index:3}.flap{border-left:calc(var(--env-width) / 2) solid transparent;border-right:calc(var(--env-width) / 2) solid transparent;border-bottom:calc(var(--env-height) / 2 - 8px) solid transparent;border-top:calc(var(--env-height) / 2 + 8px) solid var(--env-flap-color);transform-origin:top;transition:transform .4s ease,z-index .6s;z-index:5}.pocket{border-left:calc(var(--env-width) / 2) solid var(--env-color);border-right:calc(var(--env-width) / 2) solid var(--env-color);border-bottom:calc(var(--env-height) / 2) solid var(--env-color2);border-top:calc(var(--env-height) / 2) solid transparent;border-bottom-left-radius:var(--env-radius);border-bottom-right-radius:var(--env-radius)}.open .flap{transform:rotateX(180deg);transition:transform .4s ease,z-index .6s;z-index:1}.letter{position:relative;background-color:#fff;width:90%;height:90%;margin:0 auto;top:5%;border-radius:var(--env-radius);box-shadow:0 2px 26px #0000001f;z-index:1;transform:translateY(0);transition:transform .4s ease,z-index 1s;display:flex;flex-direction:column;align-items:center;padding:12% 10% 10%;gap:14%;overflow:hidden}.letter:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(180deg,#fff0 25%,#d7e3efb3 55%,#d7e3ef);pointer-events:none}.letter-line{width:80%;height:8%;background-color:#eeeff0;border-radius:2px;flex-shrink:0}.letter-line--short{width:30%;height:5%;align-self:flex-start;margin-left:10%}.open .letter{transform:translateY(calc(var(--env-height) / -3));transition:transform .4s .6s ease,z-index .6s;z-index:2}.hearts{position:absolute;top:calc(var(--env-height) / 2);left:0;right:0;z-index:2}.heart{position:absolute;bottom:0;right:10%;opacity:0}.heart:before,.heart:after{position:absolute;content:"";left:var(--heart-size);top:0;width:var(--heart-size);height:calc(var(--heart-size) * 1.6);background:var(--env-heart);border-radius:var(--heart-size) var(--heart-size) 0 0;transform:rotate(-45deg);transform-origin:0 100%}.heart:after{left:0;transform:rotate(45deg);transform-origin:100% 100%}.open .a1{left:20%;transform:scale(.6);opacity:1;animation:slideUp 4s linear 1 forwards,sideSway 2s ease-in-out 4 alternate;animation-delay:.7s}.open .a2{left:55%;transform:scale(1);opacity:1;animation:slideUp 5s linear 1 forwards,sideSway 4s ease-in-out 2 alternate;animation-delay:.7s}.open .a3{left:10%;transform:scale(.8);opacity:1;animation:slideUp 7s linear 1 forwards,sideSway 2s ease-in-out 6 alternate;animation-delay:.7s}@keyframes slideUp{0%{top:0}to{top:-400px}}@keyframes sideSway{0%{margin-left:0}to{margin-left:30px}}.envelope-hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:6;pointer-events:none;animation:fadeIn .5s ease .3s both}.envelope-hint p{font-family:Great Vibes,cursive;font-size:1.15rem;color:#fffffffa;margin:0;text-shadow:0 2px 6px rgba(139,21,56,.5);animation:gentle-pulse 2s ease-in-out infinite}@keyframes fadeIn{0%{opacity:0;transform:translate(-50%,-45%)}to{opacity:1;transform:translate(-50%,-50%)}}@keyframes gentle-pulse{0%,to{opacity:.9}50%{opacity:1}}@media (max-width: 480px){.envelope-scene{--env-width: 260px;--env-height: 165px}}@media (max-height: 600px){.envelope-scene{--env-height: 160px}}.app{min-height:100vh;height:100vh;max-height:100dvh;display:flex;flex-direction:column;align-items:center;padding:clamp(.75rem,2.5vw,2rem) 1rem clamp(.75rem,2.5vw,1.5rem);overflow:hidden;box-sizing:border-box}.header{text-align:center;margin-bottom:2.5rem}.logo{font-family:var(--font-display);font-size:clamp(2.5rem,8vw,4rem);font-weight:600;color:var(--rose-deep);margin:0;letter-spacing:.02em}.logo--cursive{font-family:Allura,Great Vibes,cursive;font-weight:700;font-size:clamp(2.75rem,9vw,4.25rem)}.header-tagline{font-family:var(--font-display);font-size:var(--text-sm);font-style:italic;color:var(--ink);opacity:.85;margin:.35rem 0 0}.tagline{font-family:var(--font-display);font-size:1.1rem;font-style:italic;color:var(--rose-deep);opacity:.9;margin:.25rem 0 0}.main{flex:1 1 0;min-height:0;width:100%;max-width:420px;display:flex;flex-direction:column;overflow:hidden}@keyframes pageFadeIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.letter-view{flex:1 1 0;min-height:0;display:flex;flex-direction:column;width:100%;animation:pageFadeIn .5s ease}.card{background:var(--card-bg);border-radius:16px;padding:2rem;box-shadow:0 4px 24px #8b153814;border:1px solid rgba(196,30,58,.12)}.card-title{font-family:var(--font-display);font-size:var(--text-2xl);font-weight:600;color:var(--rose-deep);margin:0 0 1.25rem}.form{display:flex;flex-direction:column;gap:1rem}.paper{position:relative;padding:1rem 1.25rem;min-height:120px;background:var(--card-bg);box-shadow:inset 0 1px #fffc,0 2px 8px #8b153814,0 0 0 1px #c41e3a0f;clip-path:polygon(0% .5%,1.2% 0%,3% .8%,5% 0%,7% .6%,10% 0%,12% .4%,15% 0%,18% .7%,22% 0%,25% .5%,28% 0%,32% .6%,36% 0%,40% .4%,45% 0%,50% .8%,55% 0%,60% .3%,65% 0%,70% .6%,75% 0%,80% .5%,85% 0%,88% .4%,92% 0%,95% .7%,98% 0%,100% .5%,99.5% 4%,100% 8%,99% 12%,100% 18%,99.5% 24%,100% 30%,99% 36%,100% 42%,99.5% 50%,100% 58%,99% 64%,100% 70%,99.5% 76%,100% 82%,99% 88%,100% 94%,99.5% 98%,100% 100%,98% 99.5%,92% 100%,85% 99%,78% 100%,70% 99.5%,62% 100%,55% 99%,48% 100%,40% 99.5%,32% 100%,25% 99%,18% 100%,10% 99.5%,4% 100%,0% 99%,0% 94%,.5% 88%,0% 80%,.5% 72%,0% 64%,.5% 56%,0% 48%,.5% 40%,0% 32%,.5% 24%,0% 16%,.5% 8%,0% 2%)}.paper:before{content:"";position:absolute;top:1.5rem;right:1.5rem;bottom:1rem;left:1.5rem;background:repeating-linear-gradient(transparent,transparent 1.5em,rgba(196,30,58,.06) 1.5em,rgba(196,30,58,.06) 1.52em);pointer-events:none;z-index:0}.paper--letter{display:flex;flex-direction:column;flex:1 1 0;min-height:0}.letter-scroll{flex:1 1 0;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;position:relative;z-index:1;display:flex;flex-direction:column;scrollbar-width:none;-ms-overflow-style:none}.letter-scroll::-webkit-scrollbar{display:none}.letter-text{position:relative;z-index:1;font-family:Allura,Great Vibes,cursive;font-size:var(--text-lg);font-weight:400;color:var(--ink);line-height:1.6;margin:0;white-space:pre-wrap}.valentine-ask{position:relative;z-index:1;margin-top:1.25rem;padding-top:.5rem;text-align:center}.valentine-ask-question{font-family:Allura,Great Vibes,cursive;font-size:var(--text-xl);font-weight:400;color:var(--ink);margin:0 0 .75rem}.valentine-options{display:flex;gap:.75rem;flex-wrap:wrap;justify-content:center}.valentine-dare{font-size:var(--text-xs);color:var(--ink);opacity:.65;margin:.5rem 0 0;font-style:italic}.valentine-option{display:inline-flex;align-items:center;gap:.5rem;cursor:pointer;font-family:Allura,Great Vibes,cursive;font-size:var(--text-xl);font-weight:400;color:var(--ink);-webkit-user-select:none;user-select:none;padding:.4rem .9rem;border-radius:12px;background:var(--rose-pale);border:1px solid rgba(196,30,58,.15);transition:background .2s,border-color .2s,box-shadow .2s}.valentine-option:hover{background:#fce4ece6;border-color:#c41e3a40}.valentine-option input{width:1.15em;height:1.15em;accent-color:var(--rose);cursor:pointer;flex-shrink:0}.valentine-option--yes span{color:var(--rose-deep)}.valentine-option--yes:has(input:checked){background:var(--rose);border-color:var(--rose-deep);color:var(--btn-text)}.valentine-option--yes:has(input:checked) span{color:var(--btn-text)}.valentine-option--no input{cursor:not-allowed}.error-popup-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;display:flex;align-items:center;justify-content:center;padding:1rem;background:#2d1b2e66;animation:errorOverlayIn .2s ease}@keyframes errorOverlayIn{0%{opacity:0}to{opacity:1}}.error-popup{background:var(--card-bg);border-radius:16px;padding:1.5rem 1.75rem;box-shadow:0 8px 32px #0003;border:2px solid var(--rose);text-align:center;max-width:320px;animation:errorPopIn .25s ease}@keyframes errorPopIn{0%{opacity:0;transform:scale(.9) translateY(-8px)}to{opacity:1;transform:scale(1) translateY(0)}}.error-popup-message{font-family:var(--font-display),Georgia,serif;font-size:var(--text-lg);font-weight:600;color:var(--rose-deep);margin:0 0 .35rem}.error-popup-sub{font-size:var(--text-sm);color:var(--ink);opacity:.85;margin:0 0 1rem}.btn--popup{min-width:80px}.input{width:100%;padding:1rem 1.25rem;font-family:var(--font-body);font-size:var(--text-base);font-weight:300;color:var(--ink);background:var(--rose-pale);border:1px solid transparent;border-radius:12px;resize:vertical;min-height:100px;transition:border-color .2s,box-shadow .2s}.input--paper{position:relative;z-index:1;background:transparent;border:none;border-radius:0;min-height:96px;padding:.25rem 0 1rem;line-height:1.5em;font-family:var(--font-display),Georgia,serif;font-size:1.15rem;font-style:italic}.input--paper::placeholder{color:var(--ink);opacity:.45;font-style:italic}.input::placeholder{color:var(--ink);opacity:.5}.input:focus{outline:none;border-color:var(--rose);box-shadow:0 0 0 3px #c41e3a26}.input--paper:focus{box-shadow:none}.btn{font-family:var(--font-body);font-size:var(--text-base);font-weight:500;color:var(--btn-text);background:var(--rose);border:none;border-radius:12px;padding:.9rem 1.5rem;cursor:pointer;transition:background .2s,transform .15s}.btn:hover:not(:disabled){background:var(--rose-deep);transform:translateY(-1px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--ghost{background:transparent;color:var(--rose-deep);margin-top:1rem}.btn--ghost:hover{background:var(--rose-pale)}.card--result{text-align:center;padding:2.5rem 2rem}.heart-burst{font-size:var(--text-hero);color:var(--rose);margin-bottom:1rem;animation:heartPop .6s ease-out}@keyframes heartPop{0%{transform:scale(0);opacity:0}50%{transform:scale(1.2)}to{transform:scale(1);opacity:1}}.result-message{font-family:var(--font-display);font-size:var(--text-xl);font-style:italic;color:var(--ink);line-height:1.5;margin:0;white-space:pre-wrap}.itinerary{width:100%;max-width:420px;height:100%;min-height:0;display:flex;flex-direction:column;text-align:center;padding:clamp(.75rem,2vh,1.5rem) 0;overflow:auto;-webkit-overflow-scrolling:touch;animation:pageFadeIn .5s ease;justify-content:space-evenly;gap:0}.btn--back{flex-shrink:0;display:block;margin:0 0 .25rem;padding:.35rem 0;background:transparent;color:var(--rose-deep);font-size:var(--text-sm);text-align:left;box-shadow:none}.btn--back:hover{background:transparent;color:var(--rose);transform:none;text-decoration:underline}.itinerary-intro{font-family:Allura,Great Vibes,cursive;font-size:var(--text-xl);color:var(--rose-deep);margin:0 0 .75rem}.itinerary .heart-burst{flex-shrink:0;font-size:var(--text-hero);margin-bottom:.25rem}.itinerary-header{flex-shrink:0;display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;gap:.35rem .5rem;margin-bottom:.5rem;line-height:1.2}.itinerary-title{flex-shrink:0;font-family:Allura,Great Vibes,cursive;font-size:var(--text-display-lg);font-weight:600;color:var(--rose-deep);margin:0}.itinerary-tagline{flex-shrink:0;font-family:var(--font-display);font-size:var(--text-sm);font-style:italic;color:var(--ink);opacity:.85;margin:0}.itinerary-list{flex:1 1 auto;min-height:0;text-align:left;display:flex;flex-direction:column;gap:.85rem;justify-content:center;width:100%}@keyframes cardFadeIn{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}.itinerary-day{flex-shrink:0;background:var(--card-bg);border-radius:12px;padding:1rem 1.25rem;box-shadow:0 4px 24px #8b153814;border:1px solid rgba(196,30,58,.12);box-sizing:border-box;opacity:0;animation:cardFadeIn .5s ease both}.itinerary-day:nth-child(1){animation-delay:.1s}.itinerary-day:nth-child(2){animation-delay:.22s}.itinerary-day:nth-child(3){animation-delay:.34s}.itinerary-day-title{font-family:Allura,Great Vibes,cursive;font-size:var(--text-2xl);font-weight:600;color:var(--rose-deep);margin:0 0 .35rem}.itinerary-items{margin:0;padding-left:1.15rem;font-family:var(--font-display),Georgia,serif;font-size:var(--text-md);font-weight:600;font-style:italic;color:var(--ink);line-height:1.55}.itinerary-items li{margin-bottom:.2rem}.itinerary-items li:last-child{margin-bottom:0}.itinerary-closing{flex-shrink:0;display:flex;flex-direction:column;align-items:center;padding-top:clamp(.75rem,2vh,1.25rem)}.itinerary-outro{font-family:Allura,Great Vibes,cursive;font-size:var(--text-2xl);font-weight:600;color:var(--rose-deep);margin:0}.itinerary-signature{font-family:Allura,Great Vibes,cursive;font-size:var(--text-xl);font-weight:600;color:var(--rose-deep);margin:.25rem 0 0;text-align:center}.itinerary-signature-name{font-family:Allura,Great Vibes,cursive;font-size:var(--text-xl);font-weight:600;color:var(--rose-deep);margin:0;text-align:center}@media (max-height: 844px){.itinerary .heart-burst{font-size:var(--text-display-lg);margin-bottom:.1rem}.itinerary-title{font-size:var(--text-display)}.itinerary-list{gap:.5rem;margin-bottom:.4rem}.itinerary-day{padding:.6rem 1rem}.itinerary-day-title{font-size:var(--text-xl);margin-bottom:.15rem}.itinerary-items{font-size:var(--text-base);line-height:1.45;padding-left:.9rem}.itinerary-items li{margin-bottom:.1rem}.itinerary-outro{font-size:var(--text-xl);margin-top:.25rem}.itinerary-signature,.itinerary-signature-name{font-size:var(--text-lg)}.itinerary-signature{margin-bottom:.35rem}}@media (max-height: 700px){.itinerary .heart-burst{font-size:var(--text-display);margin-bottom:0}.itinerary-title{font-size:var(--text-display)}.itinerary-list{gap:.4rem;margin-bottom:.35rem}.itinerary-day{padding:.5rem 1rem}.itinerary-day-title{font-size:var(--text-lg)}.itinerary-items{font-size:var(--text-sm);line-height:1.4;padding-left:.85rem}.itinerary-outro{font-size:var(--text-lg)}.itinerary-signature,.itinerary-signature-name{font-size:var(--text-base)}.footer{padding-top:.35rem;font-size:var(--text-xs)}}.footer{flex-shrink:0;margin-top:auto;padding-top:clamp(.5rem,2vh,2rem);font-size:var(--text-sm);color:var(--ink);opacity:.8}.footer-heart{color:var(--rose)}:root{--cream: #faf6f2;--card-bg: #ffffff;--rose-deep: #8b1538;--rose-pale: #fce4ec;--rose: #c41e3a;--btn-text: #ffffff;--ink: #2d1b2e;--gold: #c9a227;--font-display: "Cormorant Garamond", Georgia, serif;--font-body: "Outfit", system-ui, sans-serif;--text-xs: .85rem;--text-sm: .95rem;--text-base: 1rem;--text-md: 1.1rem;--text-lg: 1.25rem;--text-xl: 1.35rem;--text-2xl: 1.5rem;--text-display: 1.5rem;--text-display-lg: 2rem;--text-cursive-lg: 2.25rem;--text-hero: 3.5rem}*{box-sizing:border-box}html{scroll-behavior:smooth;height:100%;overflow:hidden}body{margin:0;min-height:100%;height:100%;font-family:var(--font-body);font-weight:300;color:var(--ink);background:var(--rose-pale);-webkit-font-smoothing:antialiased;overflow:hidden}#root{min-height:100%;height:100%;overflow:hidden}
