:root{--bg:#101629;--bg2:#1b2440;--gold:#dfbc83;--cream:#f8eddf;--muted:#b6b5bc;--pink:#d4a3af;--line:rgba(223,188,131,.22)}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;color:var(--cream);background:var(--bg);font-family:"PingFang SC","Microsoft YaHei",system-ui,sans-serif;line-height:1.75;overflow-x:hidden}body.is-locked{overflow:hidden}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible{outline:2px solid var(--gold);outline-offset:5px}::selection{background:var(--gold);color:#101629}em{font-style:normal;color:var(--gold)}[hidden]{display:none!important}
#starfield,#confetti{position:fixed;inset:0;width:100%;height:100%;pointer-events:none}#starfield{z-index:0;opacity:.75}#confetti{z-index:30}.ambient{position:fixed;border-radius:50%;filter:blur(85px);pointer-events:none;z-index:0;opacity:.38}.ambient-one{top:15%;left:-180px;width:380px;height:380px;background:#415080}.ambient-two{top:55%;right:-190px;width:400px;height:400px;background:#543d5e}
.topbar{position:fixed;top:0;left:0;right:0;z-index:20;display:flex;justify-content:space-between;align-items:center;padding:20px clamp(20px,5vw,72px);pointer-events:none}.topbar>*{pointer-events:auto}.brand{font-family:Georgia,serif;letter-spacing:.26em;font-size:13px;color:var(--gold)}.brand>span{padding-left:9px}.round-btn{border:1px solid var(--line);width:43px;height:43px;border-radius:50%;background:rgba(20,29,49,.72);color:var(--cream);backdrop-filter:blur(14px);font-size:20px}.round-btn:hover{background:#293653}
.panel{position:relative;z-index:1}.eyebrow{letter-spacing:.34em;color:var(--gold);font-size:11px;font-weight:650;margin:0 0 24px;text-transform:uppercase}.subtle,.small-note{font-size:12px;color:#aaa6b2;letter-spacing:.1em}.section-number,.hero-number{position:absolute;right:clamp(22px,5vw,80px);bottom:28px;color:rgba(223,188,131,.6);font:12px Georgia,serif;letter-spacing:.18em}.section-heading{text-align:center;max-width:760px;margin:0 auto 72px}.section-heading h2{font-family:Georgia,"Songti SC","SimSun",serif;font-size:clamp(31px,5vw,56px);font-weight:400;letter-spacing:.02em;line-height:1.4;margin:0 0 18px}.section-heading>p:last-child{font-size:14px;color:var(--muted);margin:0}
.welcome{position:fixed;inset:0;z-index:40;display:grid;place-items:center;overflow:hidden;background:radial-gradient(ellipse at 50% 48%,#2b3050 0%,#161e36 38%,#0c1221 80%);transition:opacity 1s ease,visibility 1s}.welcome.dismissed{opacity:0;visibility:hidden;pointer-events:none}.welcome-glow{position:absolute;width:400px;height:400px;max-width:90vw;max-height:90vw;background:#bd9c7d;border-radius:50%;filter:blur(110px);opacity:.18;animation:glow 5s ease-in-out infinite alternate}.welcome-inner{display:flex;align-items:center;flex-direction:column;text-align:center;padding:24px;position:relative}.welcome h1{font-family:Georgia,"Songti SC",serif;font-size:clamp(32px,6vw,54px);letter-spacing:.1em;font-weight:400;line-height:1.5;margin:0 0 48px}.welcome .subtle{margin-top:20px}.gift-button{position:relative;width:160px;height:150px;background:none;border:none;margin:0 0 30px;filter:drop-shadow(0 18px 35px rgba(223,188,131,.23));transition:transform .4s}.gift-button:hover{transform:translateY(-9px) rotate(-3deg)}.gift-box,.gift-lid{display:block;position:absolute;background:linear-gradient(135deg,#f1d5a9,#bc895c);border:1px solid #e6c899;box-shadow:inset 0 0 20px #fff2}.gift-box{width:118px;height:96px;left:21px;bottom:5px;border-radius:5px 5px 10px 10px}.gift-lid{z-index:2;width:140px;height:31px;left:10px;bottom:94px;border-radius:5px;transform-origin:15% 75%;transition:transform .8s}.gift-ribbon{position:absolute;z-index:3;width:20px;height:125px;left:70px;bottom:6px;background:linear-gradient(90deg,#703f54,#be7285,#703f54);pointer-events:none}.gift-ribbon:before{content:'∞';position:absolute;top:-37px;left:-24px;color:#d88fa1;font:70px Georgia}.gift-sparkle{position:absolute;color:var(--gold);font-size:31px;animation:float 3s ease-in-out infinite}.sp1{left:-24px;top:5px}.sp2{right:-19px;top:18px;animation-delay:-1.3s}.gift-button.opened .gift-lid{transform:translate(-24px,-105px) rotate(-30deg)}.gift-button.opened{transform:scale(1.08)}.primary-btn,.outline-btn{border:1px solid var(--gold);padding:13px 29px;border-radius:30px;background:var(--gold);color:#1a2030;letter-spacing:.13em;font-size:13px;transition:all .25s}.primary-btn:hover{background:#f3d8aa;transform:translateY(-2px)}.primary-btn span{margin-left:13px}
.hero{min-height:100svh;display:grid;place-items:center;text-align:center;overflow:hidden;padding:100px 24px 80px}.hero-halo{position:absolute;width:min(70vw,650px);height:min(70vw,650px);border-radius:50%;background:radial-gradient(circle,rgba(180,133,112,.21),rgba(169,139,147,.08) 38%,transparent 70%);filter:blur(2px)}.hero-content{position:relative;z-index:2}.hero-overline{letter-spacing:.3em;font-size:14px;color:#d0c3ba;margin-bottom:12px}.hero h2{font-family:Georgia,'Times New Roman',serif;font-weight:400;font-size:clamp(74px,13vw,180px);line-height:.88;letter-spacing:-.065em;margin:24px 0 34px;text-shadow:0 0 90px #c89d8b28}.hero h2 em{font-style:italic;font-weight:400}.hero-dot{display:inline-block;font-size:.16em;vertical-align:top;letter-spacing:0;margin:9px 0 0 15px;color:var(--gold)}.hero-name{font-family:Georgia,"Songti SC",serif;font-size:clamp(21px,3vw,34px);letter-spacing:.16em;margin:0}.hero-intro{font-size:13px;color:var(--muted);max-width:370px;line-height:2.2;margin:18px auto 42px}.scroll-invite{display:inline-flex;align-items:center;gap:30px;color:var(--gold);font-size:12px;letter-spacing:.1em;border-bottom:1px solid var(--line);padding-bottom:11px}.scroll-invite span{font-size:22px}.hero-orbit{position:absolute;border-radius:50%;border:1px solid #dfbc8320;transform:rotate(-25deg);pointer-events:none}.orbit1{height:65vw;width:100vw;max-height:850px;max-width:1400px}.orbit2{height:45vw;width:85vw;max-height:650px;max-width:1100px;transform:rotate(20deg)}
.memories{padding:140px 24px 125px;background:linear-gradient(180deg,transparent,#19203960 12%,transparent 94%)}.memory-grid{width:min(1100px,100%);margin:auto;display:grid;grid-template-columns:1fr 1fr;gap:100px 9%}.memory-item{width:100%;max-width:450px;min-width:0}.memory-item:nth-child(even){margin-top:165px}.memory-photo{display:block;position:relative;width:100%;aspect-ratio:4/5;padding:12px 12px 53px;background:#efe8dc;border:0;transform:rotate(var(--tilt,0deg));box-shadow:0 20px 45px #0005;transition:transform .4s,box-shadow .4s;cursor:zoom-in}.memory-photo:hover{transform:rotate(0deg) translateY(-8px);box-shadow:0 28px 55px #0008}.memory-photo img{width:100%;height:100%;object-fit:cover;display:block;background:#29334e}.memory-photo .photo-mark{position:absolute;bottom:13px;left:0;right:0;color:#6d5763;text-align:center;font:italic 17px Georgia,serif}.memory-caption{margin:24px 4px 0}.memory-caption .chapter{color:var(--gold);font:11px Georgia,serif;letter-spacing:.24em}.memory-caption h3{font-size:clamp(19px,3vw,28px);font-weight:450;margin:6px 0;color:var(--cream)}.memory-caption p{font-size:13px;color:var(--muted);margin:0}.small-note{text-align:center;margin-top:85px}
.letter-section{padding:135px 24px 150px;text-align:center}.envelope-wrap{display:grid;justify-items:center}.envelope{position:relative;width:min(330px,78vw);height:215px;border:0;background:none;perspective:800px;filter:drop-shadow(0 30px 30px #0005);margin:25px 0 10px}.envelope-back{position:absolute;inset:0;background:#cba98b;border-radius:5px}.envelope-front{position:absolute;inset:0;background:#e3c7a8;clip-path:polygon(0 0,50% 53%,100% 0,100% 100%,0 100%);z-index:3}.envelope-flap{position:absolute;inset:0;background:#f4d8b4;clip-path:polygon(0 0,100% 0,50% 59%);transform-origin:top;z-index:5;transition:transform .75s ease,z-index .3s .3s}.envelope-paper{position:absolute;background:#fff9ed;inset:14px 16px 18px;display:grid;place-items:center;z-index:2;font:italic 28px Georgia,serif;color:#81676a;transition:transform .8s .25s}.wax-seal{position:absolute;z-index:6;left:calc(50% - 19px);top:97px;background:#a95e6b;border-radius:50%;height:38px;width:38px;display:grid;place-items:center;color:#f5d9ae;box-shadow:0 3px 8px #0002;transition:opacity .35s}.envelope.is-open .envelope-flap{transform:rotateX(180deg);z-index:1}.envelope.is-open .envelope-paper{transform:translateY(-82px)}.envelope.is-open .wax-seal{opacity:0}.envelope-wrap>p{font-size:13px;color:var(--muted)}.letter-card{width:min(600px,100%);margin:60px auto 0;padding:clamp(30px,6vw,66px);background:#f5ebdb;color:#554b4b;text-align:left;border-radius:3px;box-shadow:0 18px 70px #0004;animation:rise 1s ease both}.letter-greeting{font-size:18px;font-family:Georgia,"Songti SC",serif}.letter-body{font-size:15px;line-height:2.35}.letter-body p{margin:22px 0}.letter-sign{text-align:right;font-size:14px;margin-top:45px;color:#a27674}
.wish-section{padding:130px 24px 160px;text-align:center;overflow:hidden}.cake-area{display:grid;justify-items:center}.cake-illustration{width:290px;height:300px;position:relative;margin:24px 0 24px;filter:drop-shadow(0 25px 35px #0005)}.cake-body{position:absolute;bottom:30px;left:35px;width:220px;height:110px;background:linear-gradient(90deg,#d9a3ad,#f4ccd3 50%,#c88b9b);border-radius:14px 14px 30px 30px;box-shadow:inset 0 -20px 0 #b97c8e7a}.cake-top{position:absolute;bottom:127px;left:30px;width:230px;height:42px;background:#f7e9d4;border-radius:50%;z-index:3;box-shadow:0 7px 0 #e6cba8}.cake-base{position:absolute;bottom:20px;left:15px;width:260px;height:22px;background:linear-gradient(#c6a17c,#8b6c63);border-radius:50%}.cake-decoration{display:block;margin-top:55px;color:#fbe7c4;letter-spacing:16px;font-size:17px}.candle-group{position:absolute;bottom:159px;left:87px;display:flex;gap:23px;z-index:5}.candle{position:relative;height:62px;width:15px;background:repeating-linear-gradient(140deg,#f7e9d9 0 9px,#dba9b8 9px 14px);border-radius:3px}.flame{position:absolute;left:2px;bottom:69px;width:12px;height:24px;border-radius:80% 0 70% 70%;background:linear-gradient(#fff9be,#ffca6c,#ff7d57);transform:rotate(45deg);box-shadow:0 0 25px 9px #f4bd748c;animation:flicker 1.1s ease-in-out infinite alternate}.candle:nth-child(2) .flame{animation-delay:-.5s}.candle:nth-child(3) .flame{animation-delay:-.9s}.wish-section.wished .flame{animation:flameout .4s forwards}.hold-button{position:relative;min-width:235px;padding:13px 26px;border:1px solid var(--gold);background:transparent;color:var(--gold);border-radius:30px;overflow:hidden;touch-action:none;user-select:none}.hold-progress{position:absolute;inset:0;width:0;background:#dfbc8333;pointer-events:none}.hold-label{position:relative;z-index:1;letter-spacing:.08em;font-size:13px}.wish-section.wished .hold-button{opacity:.65;pointer-events:none}.wish-section .subtle{margin-top:18px}
.finale{min-height:95svh;display:grid;place-items:center;padding:120px 24px;text-align:center}.finale-content{max-width:660px}.final-sparkle{font:100px Georgia,serif;color:var(--gold);line-height:1.2;text-shadow:0 0 40px #d5b07d50;animation:float 4s ease-in-out infinite}.finale h2{font-family:Georgia,"Songti SC",serif;font-weight:400;font-size:clamp(39px,6vw,70px);line-height:1.42;margin:18px 0}.finale-content>p:not(.eyebrow){font-size:15px;color:#c8bec1;line-height:2.2}.final-line{height:1px;width:80px;background:var(--gold);margin:32px auto}.finale .final-from{font-size:11px!important;color:var(--gold)!important;letter-spacing:.24em}.outline-btn{margin-top:32px;color:var(--gold);background:transparent}.outline-btn:hover{background:#dfbc8320}
.lightbox{position:fixed;inset:0;z-index:60;background:rgba(8,12,23,.96);display:flex;align-items:center;justify-content:center;flex-direction:column;padding:60px 18px 35px}.lightbox img{max-width:min(95vw,900px);max-height:75vh;object-fit:contain;box-shadow:0 20px 50px #0008}.lightbox p{color:var(--cream);font-size:14px;text-align:center}.lightbox button{position:absolute;right:22px;top:19px;width:44px;height:44px;border:1px solid #ffffff55;background:#ffffff18;color:white;border-radius:50%}
.reveal{opacity:0;transform:translateY(35px);transition:opacity 1s ease,transform 1s cubic-bezier(.2,.7,.2,1)}.reveal.visible{opacity:1;transform:translateY(0)}
@keyframes flicker{from{transform:rotate(40deg) scale(.87)}to{transform:rotate(50deg) scale(1.12)}}@keyframes flameout{to{opacity:0;transform:translateY(-25px) scale(.1)}}@keyframes float{50%{transform:translateY(-10px)}}@keyframes glow{to{opacity:.35;transform:scale(1.15)}}@keyframes rise{from{opacity:0;transform:translateY(25px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:700px){.topbar{padding:13px 18px}.brand{font-size:11px}.eyebrow{font-size:10px;letter-spacing:.24em}.hero h2{font-size:clamp(63px,14.4vw,105px);margin:30px 0}.hero-orbit{width:140vw;height:95vw}.hero-intro{max-width:300px}.memories{padding:100px 20px}.section-heading{margin-bottom:52px}.memory-grid{grid-template-columns:1fr;gap:65px;max-width:420px}.memory-item:nth-child(even){margin-top:0}.memory-item:nth-child(odd){margin-right:auto}.memory-item:nth-child(even){margin-left:auto}.memory-photo{padding:10px 10px 45px;max-width:92%;margin:auto}.memory-caption{margin-left:6%;margin-right:6%}.memory-item:nth-child(odd) .memory-photo{--tilt:-2.5deg}.memory-item:nth-child(even) .memory-photo{--tilt:2.5deg}.letter-section,.wish-section{padding:105px 20px 125px}.finale h2{font-size:clamp(34px,9vw,51px)}.welcome h1{margin-bottom:20px}.gift-button{transform:scale(.86);margin-bottom:13px}.gift-button:hover{transform:scale(.86)}.gift-button.opened{transform:scale(.9)}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}.reveal{opacity:1;transform:none}}
