:root{--cream:#fff9f2;--paper:#fffdf9;--blush:#f6dbdd;--rose:#d98a94;--rose-deep:#b85c68;--plum:#493342;--plum-soft:#7a6270;--sage:#93a683;--gold:#c79a56;--shadow:#49334224}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--cream);color:var(--plum);margin:0;font-family:Lora,serif;line-height:1.6;overflow-x:hidden}h1,h2,h3,.script{color:var(--rose-deep);margin:0;font-family:Caveat,cursive;font-weight:700}a{color:var(--rose-deep)}img{max-width:100%;display:block}section{max-width:1000px;margin:0 auto;padding:100px 24px;position:relative}.eyebrow{letter-spacing:.04em;color:var(--plum-soft);margin-bottom:6px;font-family:Lora,serif;font-size:.95rem;font-style:italic}.center{text-align:center}:focus-visible{outline:3px solid var(--sage);outline-offset:3px}@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.birthday-confetti{z-index:30;pointer-events:none;animation:7.2s forwards confetti-layer-fade;position:fixed;inset:0;overflow:hidden}.confetti-piece{top:-14px;left:var(--confetti-left);background:var(--confetti-color);opacity:0;width:9px;height:14px;animation:confetti-fall var(--confetti-duration) var(--confetti-delay) cubic-bezier(.18, .72, .32, 1) forwards;border-radius:2px;position:absolute}.confetti-piece:nth-child(3n){border-radius:50%;width:7px;height:7px}.confetti-piece:nth-child(4n){width:12px;height:6px}.confetti-piece:nth-child(5n){width:5px;height:18px}.birthday-balloon{left:var(--balloon-left);background:radial-gradient(circle at 30% 24%, #ffffffb8 0 8px, transparent 9px), var(--balloon-color);opacity:0;width:42px;height:54px;animation:balloon-rise var(--balloon-duration) var(--balloon-delay) ease-out forwards;border-radius:50% 50% 46% 46%;position:absolute;bottom:-140px;box-shadow:inset -8px -10px 16px #4933421f,0 8px 18px #49334229}.birthday-balloon:after{content:"";background:var(--balloon-color);clip-path:polygon(50% 0,100% 100%,0 100%);width:10px;height:8px;position:absolute;bottom:-7px;left:50%;transform:translate(-50%)}.balloon-string{background:#49334247;width:1px;height:76px;position:absolute;top:calc(100% + 4px);left:50%;transform:translate(-50%)}@keyframes confetti-fall{0%{opacity:0;transform:translateY(-20px)rotate(0)}12%{opacity:1}to{opacity:0;transform:translate3d(var(--confetti-drift), 105vh, 0) rotate(var(--confetti-rotation))}}@keyframes balloon-rise{0%{opacity:0;transform:translate(0,0)rotate(-3deg)}12%,78%{opacity:1}45%{transform:translate3d(var(--balloon-sway), -48vh, 0) rotate(4deg)}to{opacity:0;transform:translate3d(calc(var(--balloon-sway) * -.8), -112vh, 0) rotate(-5deg)}}@keyframes confetti-layer-fade{0%,88%{visibility:visible}to{visibility:hidden}}.grain{pointer-events:none;z-index:0;opacity:.35;background-image:radial-gradient(var(--blush) .6px, transparent .6px);background-size:14px 14px;position:fixed;inset:0}.app-shell{z-index:1;position:relative}.site-nav{z-index:10;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fff9f2e0;border-bottom:1px solid #f6dbddcc;flex-wrap:wrap;justify-content:center;gap:10px;padding:16px 18px;display:flex;position:sticky;top:0}.site-nav button{border:1px solid var(--blush);background:var(--paper);color:var(--plum-soft);cursor:pointer;border-radius:999px;padding:10px 16px;font-family:Lora,serif;font-size:.92rem;transition:background .2s,color .2s,transform .2s;box-shadow:0 6px 16px #49334214}.site-nav button:hover{transform:translateY(-2px)}.site-nav button.active{background:var(--rose-deep);color:#fff}.page-intro{padding-bottom:16px}.hero{text-align:center;z-index:1;flex-direction:column;justify-content:center;align-items:center;min-height:100svh;padding:80px 24px 60px;display:flex;position:relative}.hero-tape{background:#d4b25a59;width:140px;height:34px;position:absolute;top:36px;left:50%;transform:translate(-50%)rotate(-3deg);box-shadow:0 2px 4px #00000014}.hero h1{margin-bottom:10px;font-size:clamp(3rem,9vw,6.5rem);line-height:1;transform:rotate(-2deg)}.hero .to{color:var(--plum-soft);margin-bottom:4px;font-family:Lora,serif;font-size:1.1rem;font-style:italic}.hero p.sub{max-width:520px;color:var(--plum-soft);margin:18px auto 46px;font-size:1.15rem;font-style:italic}.countdown{flex-wrap:wrap;justify-content:center;gap:14px;display:flex}.countdown .card{background:var(--paper);border:1px solid var(--blush);width:88px;height:96px;box-shadow:0 8px 20px var(--shadow);border-radius:10px;flex-direction:column;justify-content:center;align-items:center;display:flex}.countdown .num{color:var(--rose-deep);font-family:Caveat,cursive;font-size:2.6rem;font-weight:700;line-height:1}.countdown .label{letter-spacing:.08em;text-transform:uppercase;color:var(--plum-soft);margin-top:4px;font-size:.7rem}.countdown-caption{color:var(--plum-soft);margin-top:18px;font-size:.95rem;font-style:italic}.scroll-cue{color:var(--plum-soft);flex-direction:column;align-items:center;gap:4px;margin-top:56px;font-family:Caveat,cursive;font-size:1.3rem;display:flex}.scroll-cue span{animation:2s ease-in-out infinite bob;display:inline-block}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(8px)}}.section-head{margin-bottom:56px}.section-head h2{font-size:clamp(2.2rem,5vw,3.4rem)}.timeline{padding-left:0;position:relative}.timeline:before{content:"";background:repeating-linear-gradient(to bottom, var(--rose) 0 8px, transparent 8px 16px);width:2px;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%)}.t-item{width:100%;margin-bottom:64px;display:flex;position:relative}.t-item:nth-child(odd){justify-content:flex-start}.t-item:nth-child(2n){justify-content:flex-end}.t-card{background:var(--paper);width:44%;box-shadow:0 10px 26px var(--shadow);transform-origin:50% 8px;border-radius:12px;padding:20px;position:relative}.t-item:nth-child(odd) .t-card{transform:rotate(-1.3deg)}.t-item:nth-child(2n) .t-card{transform:rotate(1.3deg)}.t-item:nth-child(odd) .t-card:hover{animation:.9s ease-in-out rock-card-left}.t-item:nth-child(2n) .t-card:hover{animation:.9s ease-in-out rock-card-right}@keyframes rock-card-left{0%,to{transform:rotate(-1.3deg)}30%{transform:rotate(1deg)}60%{transform:rotate(-2.2deg)}}@keyframes rock-card-right{0%,to{transform:rotate(1.3deg)}30%{transform:rotate(-1deg)}60%{transform:rotate(2.2deg)}}.t-dot{background:var(--rose-deep);border:3px solid var(--cream);border-radius:50%;width:14px;height:14px;position:absolute;top:14px;left:50%;transform:translate(-50%)}.polaroid{background:#fff;border-radius:4px;margin-bottom:10px;padding:8px 8px 0;box-shadow:0 4px 10px #0000001f}.polaroid .frame{aspect-ratio:4/3;background:linear-gradient(135deg, var(--blush), var(--sage) 140%);color:#4933428c;text-align:center;border-radius:2px;justify-content:center;align-items:center;padding:10px;font-size:.78rem;font-style:italic;display:flex;overflow:hidden}.polaroid .frame img{object-fit:cover;transform-origin:50%;width:100%;height:100%}.polaroid .cap{text-align:center;color:var(--plum);padding:8px 4px 12px;font-family:Caveat,cursive;font-size:1.15rem}.t-date{letter-spacing:.06em;text-transform:uppercase;color:var(--rose-deep);margin-bottom:4px;font-size:.78rem;font-weight:600}.t-title{color:var(--plum);margin-bottom:4px;font-family:Caveat,cursive;font-size:1.6rem}.t-text{color:var(--plum-soft);font-size:.95rem}@media (width<=720px){.timeline:before{left:18px}.t-item,.t-item:nth-child(odd),.t-item:nth-child(2n){justify-content:flex-start;padding-left:40px}.t-card{width:100%;transform:none!important}.t-dot{left:18px}}.distance-wrap{background:var(--paper);box-shadow:0 14px 40px var(--shadow);border-radius:20px;padding:48px 24px}.pins{justify-content:space-between;align-items:center;gap:16px;max-width:640px;margin:0 auto 30px;display:flex;position:relative}.pin{text-align:center;flex:none}.pin .dot{background:var(--rose-deep);border-radius:50%;width:16px;height:16px;margin:0 auto 10px;box-shadow:0 0 0 6px #d98a9440}.pin .city{color:var(--plum);font-family:Caveat,cursive;font-size:1.6rem}.pin .sub{color:var(--plum-soft);letter-spacing:.04em;text-transform:uppercase;font-size:.75rem}.thread-svg{flex:1;min-width:80px;height:40px}.thread-path{fill:none;stroke:var(--rose);stroke-width:2px;stroke-dasharray:6 8;animation:20s linear infinite march}@keyframes march{to{stroke-dashoffset:-400px}}.heart-on-path{filter:drop-shadow(0 2px 2px #4933422e);font-size:12px}.distance-stats{text-align:center;flex-wrap:wrap;justify-content:center;gap:56px;display:flex}.stat .num{color:var(--rose-deep);font-family:Caveat,cursive;font-size:3rem;line-height:1}.stat .label{color:var(--plum-soft);text-transform:uppercase;letter-spacing:.05em;margin-top:4px;font-size:.82rem}.notes-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:20px;display:grid}.flip-card{perspective:1000px;cursor:pointer;height:180px}.flip-inner{width:100%;height:100%;transform-style:preserve-3d;transition:transform .6s;position:relative}.flip-card.flipped .flip-inner{transform:rotateY(180deg)}.flip-face{backface-visibility:hidden;text-align:center;box-shadow:0 8px 22px var(--shadow);border-radius:12px;justify-content:center;align-items:center;padding:18px;display:flex;position:absolute;inset:0}.flip-front{background:var(--blush);color:var(--rose-deep);font-family:Caveat,cursive;font-size:1.4rem}.flip-back{background:var(--rose-deep);color:#fff;font-size:.95rem;font-style:italic;transform:rotateY(180deg)}.envelope{background:linear-gradient(145deg, var(--paper), #f9e3e5);width:min(520px,100%);min-height:260px;color:var(--plum);cursor:pointer;box-shadow:0 18px 42px var(--shadow);border:0;border-radius:18px;justify-content:center;align-items:center;margin:0 auto;transition:transform .2s,box-shadow .2s;display:flex;position:relative;overflow:hidden}.envelope:hover{transform:translateY(-4px)rotate(-1deg);box-shadow:0 22px 48px #49334233}.envelope:before,.envelope:after{content:"";background:#d98a943d;width:60%;height:70%;position:absolute;bottom:0}.envelope:before{clip-path:polygon(0 0,100% 100%,0 100%);left:0}.envelope:after{clip-path:polygon(100% 0,100% 100%,0 100%);right:0}.envelope-flap{clip-path:polygon(0 0,100% 0,50% 100%);background:#b85c6838;width:100%;height:58%;position:absolute;top:0;left:0}.envelope-copy{z-index:1;text-align:center;gap:4px;display:grid;position:relative}.envelope-copy span{color:var(--plum-soft);font-family:Lora,serif;font-size:.85rem;font-style:italic}.envelope-copy .letter-date{color:var(--gold);letter-spacing:.04em;text-transform:uppercase;font-size:.95rem;font-weight:600}.envelope-copy strong{color:var(--rose-deep);font-family:Caveat,cursive;font-size:clamp(1.8rem,5vw,2.6rem);line-height:1}.letter-modal{z-index:20;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#49334257;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.popup-letter{text-align:left;background:linear-gradient(#fffdf9,#fff8ef);border:1px solid #d98a9447;border-radius:16px;width:min(560px,100%);max-height:min(680px,86vh);padding:42px 36px 36px;position:relative;overflow:auto;box-shadow:0 24px 60px #49334247}.popup-letter:before{content:"";pointer-events:none;border:1px dashed #d98a9447;border-radius:12px;position:absolute;inset:14px}.letter-header{text-align:center;border-bottom:1px solid #f6dbdde6;margin-bottom:26px;padding-bottom:18px;position:relative}.letter-from{color:var(--gold);letter-spacing:.08em;text-transform:uppercase;margin:0 0 4px;font-size:.78rem;font-weight:600}.popup-letter h3{margin-bottom:6px;font-size:clamp(2.1rem,6vw,3.2rem);line-height:1}.letter-recipient{color:var(--plum-soft);margin:0;font-style:italic}.letter-content{position:relative}.letter-content p{color:var(--plum-soft);margin:0 0 16px;font-size:1rem;line-height:1.75}.letter-close{background:var(--blush);width:32px;height:32px;color:var(--rose-deep);cursor:pointer;border:0;border-radius:50%;font-family:Lora,serif;font-weight:700;position:absolute;top:14px;right:14px}.bucket-card{background:var(--paper);border:1px solid var(--blush);max-width:680px;box-shadow:0 14px 32px var(--shadow);border-radius:18px;margin:0 auto;padding:30px}.bucket-progress{text-align:center;color:var(--plum-soft);margin:0 0 22px;font-style:italic}.bucket-list{gap:14px;margin:0;padding:0;list-style:none;display:grid}.bucket-list li{background:#f6dbdd57;border-radius:12px;transition:background .2s,transform .2s}.bucket-list li:hover{transform:translateY(-2px)}.bucket-list li.done{background:#93a68338}.bucket-list label{cursor:pointer;align-items:center;gap:14px;padding:14px 16px;display:flex}.bucket-list input{width:20px;height:20px;accent-color:var(--rose-deep);flex:none}.bucket-list span{color:var(--plum);transition:color .2s,text-decoration-color .2s}.bucket-list li.done span{color:var(--plum-soft);text-decoration:line-through;-webkit-text-decoration-color:var(--rose-deep);text-decoration-color:var(--rose-deep);text-decoration-thickness:2px}.bucket-add-form{margin-top:16px}.bucket-add-form input{border:1px dashed var(--rose);width:100%;color:var(--plum);background:#fffdf9d1;border-radius:12px;padding:14px 16px;font-family:Lora,serif;font-size:.95rem}.bucket-add-form input::placeholder{color:var(--plum-soft);font-style:italic}.signoff{color:var(--rose-deep);font-family:Caveat,cursive;font-size:1.5rem}footer{text-align:center;color:var(--plum-soft);padding:60px 24px 70px;font-size:.85rem}footer .script{color:var(--rose-deep);margin-bottom:8px;font-size:1.6rem;display:block}
