*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;color:#443e35;background:#f7f2e8;font-family:"Songti SC","SimSun",serif;line-height:1.65}body:before{content:"";position:fixed;inset:0;pointer-events:none;background-image:radial-gradient(#90785718 .7px,transparent .7px);background-size:5px 5px;z-index:3}a{color:inherit;text-decoration:none}button{font:inherit;cursor:pointer}button,a{-webkit-tap-highlight-color:transparent}button:focus-visible,a:focus-visible{outline:3px solid #b76b4e;outline-offset:3px}.topbar{position:absolute;z-index:4;top:0;width:100%;display:flex;align-items:center;justify-content:space-between;padding:18px max(24px,calc((100% - 950px)/2));font:10px Arial;letter-spacing:2px}.brand span{color:#b84936}.music{border:1px solid #d0c5b2;border-radius:40px;background:#faf6ecde;padding:8px 12px;color:#6f5148;letter-spacing:0}.toast{position:fixed;z-index:10;right:15px;top:65px;max-width:270px;padding:9px 14px;background:#4a3d36;color:#fff;border-radius:6px;font:13px/1.6 sans-serif}.toast:empty{display:none}.page{position:relative;min-height:100svh;overflow:hidden}.opening{display:flex;align-items:center;max-width:1100px;margin:auto;padding:95px 5% 55px;background:radial-gradient(ellipse at 75% 55%,#e5e7d8 0,transparent 54%)}.opener{width:52%;position:relative;z-index:1}.tiny{font:10px/1.5 Arial;letter-spacing:3px;color:#9b8061}.opening>.tiny{position:absolute;top:90px;left:5%}.mini{color:#9c4f3c;font-size:16px;letter-spacing:3px}.opening h1{font-size:clamp(56px,8vw,100px);line-height:1.12;margin:22px 0;font-weight:400;letter-spacing:5px}.opening h1 em{font-style:normal;color:#9d4939}.opening h1 span{color:#9d4939}.names{font-size:25px;letter-spacing:4px}.names i{font-family:Georgia;font-style:italic;color:#a48868}.date-line{font:13px Arial;letter-spacing:2px}.date-line b{color:#b15c49}.pill{display:inline-flex;align-items:center;justify-content:center;min-height:45px;padding:10px 21px;border-radius:100px;font-size:14px;line-height:1.3}.pill.dark{background:#6b735b;color:#fffdf8;border:1px solid #6b735b}.pill.outline{border:1px solid #857c6d;color:#51483c}.opener .pill{margin-top:20px;gap:35px}.character{width:48%;position:relative;text-align:center;align-self:center}.character button{background:none;border:0;padding:0;width:100%;animation:sway 5s ease-in-out infinite;filter:drop-shadow(0 16px 9px #554f4328)}.character img{display:block;width:100%;max-height:500px;object-fit:contain}.bubble{position:absolute;top:4%;right:2%;background:#fffaf0;border:1px solid #bcae95;padding:10px 15px;border-radius:50%;z-index:1;transform:rotate(5deg);font-size:14px}.tap-tip{font-size:11px;color:#8c7b62}.spark{position:absolute;color:#ad8e65;font-size:35px}.s1{top:18%;right:9%}.s2{bottom:24%;left:45%}.scrollhint{position:absolute;bottom:25px;left:5%;font-size:12px;letter-spacing:3px;color:#927e67}.scrollhint span{display:inline-block;animation:down 1.8s infinite}.details{background:#ece9dc;padding:60px max(5%,calc((100% - 960px)/2))}.label{display:flex;justify-content:space-between;gap:10px;font-size:12px;letter-spacing:2px;color:#7b7965;margin:0 auto 28px;max-width:960px}.label span{font:12px Arial;color:#a18669}.details-grid{display:grid;grid-template-columns:1fr .85fr;align-items:center;gap:45px;max-width:960px;margin:auto}.letter{position:relative;background:#fffbf2;padding:40px;box-shadow:0 12px 35px #6a5a4018;border:1px solid #eee4d1}.letter:before{content:"";position:absolute;inset:7px;border:1px solid #ded2bb;pointer-events:none}.letter-top{display:flex;justify-content:space-between;font-size:13px;color:#9d8470}.postmark,.red-stamp{border:1px solid #ad5b4c;color:#ad5b4c;display:inline-block;transform:rotate(12deg);font-size:24px;padding:0 8px}.letter h2,.moments h2,.final-card h2{font-size:38px;line-height:1.35;font-weight:400;letter-spacing:2px;margin:20px 0}.letter h2 span,.moments h2 span{color:#b66a55}.letter p{font-size:15px}.rule{height:1px;background:#ded5c4;margin:23px 0}.time{display:flex;align-items:center;gap:20px}.time strong{font:50px Georgia;color:#9a4d3d}.time strong span{font-size:22px}.time div{font-size:14px}.venue{margin-top:18px;font-size:16px}.venue p{font-size:13px;color:#77715f;margin:8px 0}.actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}.detail-photo img{display:block;width:100%;max-height:610px;object-fit:cover}.detail-photo p{text-align:center;font:10px Arial;letter-spacing:3px;color:#8f7f66}.moments{padding:60px max(5%,calc((100% - 960px)/2));background:#faf7ef}.moments-head{display:flex;justify-content:space-between;align-items:center}.moments-head p:not(.tiny){font-size:14px;color:#797567}.hand-stamp{width:88px;height:88px;border:1px solid #aa6551;border-radius:50%;display:grid;place-items:center;text-align:center;transform:rotate(15deg);font:11px/1.4 Arial;letter-spacing:2px;color:#aa6551}.gallery{display:flex;gap:20px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;padding:14px 4px 20px;scrollbar-width:thin}.frame{flex:0 0 30%;min-width:210px;background:#fffdf8;border:0;padding:9px 9px 15px;box-shadow:0 5px 18px #6758441c;scroll-snap-align:center;transform:rotate(-1deg)}.frame:nth-child(even){transform:rotate(2deg)}.frame img{width:100%;height:290px;object-fit:cover;object-position:center 32%;display:block}.frame:last-child img{object-fit:contain;background:#ece8df}.frame span{display:block;font-size:13px;padding-top:10px;color:#756957}.gallery-foot{display:flex;justify-content:space-between;align-items:center;font:11px Arial;letter-spacing:2px;color:#887d6d}.gallery-foot button{border:1px solid #b9b09e;border-radius:50%;width:40px;height:40px;background:transparent;margin-left:6px}.story-strip{display:flex;align-items:center;gap:20px;border-top:1px solid #e6ddcd;margin-top:25px;padding-top:20px}.story-strip img{width:75px;height:90px;object-fit:cover;object-position:top}.story-strip p{font-size:13px;color:#726a5d}.story-strip span{font-size:12px;color:#a54f3e;letter-spacing:2px}.finale{background:#776a5a;padding:60px max(5%,calc((100% - 960px)/2));color:#f9f3e6}.label.light,.label.light span{color:#f3e6cf}.handprint{display:block;position:relative;width:100%;max-width:960px;margin:auto;border:0;padding:0;background:#2a241f}.handprint img{width:100%;height:310px;object-fit:cover;display:block;opacity:.82}.handprint span{position:absolute;bottom:12px;right:14px;color:white;font-size:12px;background:#2d2921a8;padding:6px 10px}.final-card{position:relative;background:#f8f2e7;color:#403b34;text-align:center;max-width:630px;margin:-48px auto 0;padding:35px 25px;box-shadow:0 10px 30px #312b2135}.red-stamp{position:absolute;right:24px;top:18px}.final-card h2{font-size:36px}.final-card p:not(.tiny){font-size:15px}.sign{letter-spacing:3px;margin:23px 0 4px}.back{font-size:12px;color:#8c7b69}.end-note{text-align:center;font:10px Arial;letter-spacing:3px;margin:24px 0 0;color:#e8dbc5}.reveal.visible{animation:appear .75s both}dialog{border:0;padding:42px 10px 10px;background:#f7f2e8;max-width:94vw;max-height:92vh}dialog::backdrop{background:#1c1b19e8}dialog img{display:block;max-width:88vw;max-height:80vh;object-fit:contain}dialog button{position:absolute;right:10px;top:5px;border:0;background:none}.hop{animation:hop .6s!important}@keyframes hop{50%{transform:translateY(-16px) rotate(4deg)}}@keyframes sway{50%{transform:rotate(2deg) translateY(-5px)}}@keyframes down{50%{transform:translateY(6px)}}@keyframes appear{from{opacity:.6;transform:translateY(18px)}to{opacity:1;transform:none}}@media(max-width:650px){.page{min-height:0}.topbar{padding:16px 18px}.opening{min-height:100svh;padding:90px 24px 55px;display:block}.opening>.tiny{top:70px;left:24px}.opener{width:100%}.mini{font-size:14px;margin:15px 0}.opening h1{font-size:clamp(55px,15vw,73px);line-height:1.12;margin:15px 0}.names{font-size:20px;margin:15px 0}.date-line{font-size:11px}.opener .pill{margin-top:8px}.character{position:absolute;width:56%;right:-1%;bottom:6%;max-width:300px}.character img{max-height:36svh}.bubble{font-size:11px;top:-5%;right:3%;padding:8px 11px}.tap-tip{font-size:10px}.spark.s1{top:17%;right:12%}.spark.s2{bottom:29%;left:5%}.details,.moments,.finale{padding:35px 20px 42px}.label{margin-bottom:18px;font-size:11px}.details-grid{display:block}.letter{padding:26px 22px}.letter-top{font-size:12px}.letter h2{font-size:29px;margin:12px 0}.letter p{font-size:14px;margin:8px 0}.rule{margin:15px 0}.time strong{font-size:40px}.time div{font-size:13px}.venue{font-size:15px;margin-top:10px}.venue p{font-size:12px;line-height:1.6}.actions{gap:8px;margin-top:12px}.actions .pill{font-size:12px;padding:9px 13px;min-height:42px}.detail-photo{display:none}.moments-head h2{font-size:29px;margin:10px 0}.moments-head p:not(.tiny){font-size:12px}.hand-stamp{width:62px;height:62px;font-size:9px}.gallery{gap:12px;margin-right:-20px;padding:8px 20px 16px 4px}.frame{flex:0 0 62%;min-width:0;padding:7px 7px 10px}.frame img{height:clamp(180px,28vh,270px)}.frame span{font-size:12px;padding-top:6px}.gallery-foot button{width:36px;height:36px}.story-strip{margin-top:12px;padding-top:12px;gap:14px}.story-strip img{width:58px;height:67px}.story-strip p{font-size:12px;line-height:1.5;margin:0}.handprint img{height:30vh;min-height:190px;max-height:260px}.final-card{margin:-30px 13px 0;padding:25px 18px}.final-card h2{font-size:27px;margin:12px 0}.final-card p:not(.tiny){font-size:13px}.final-card .pill{font-size:13px}.red-stamp{font-size:19px;right:15px;top:13px}.sign{margin:15px 0 4px}.end-note{font-size:9px;margin-top:18px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}}
@media(max-width:650px){.music{position:fixed;right:14px;top:14px;z-index:7}}

/* 喜帖互动与放大的新人合影 */
.envelope-trigger{display:flex;align-items:center;gap:12px;text-align:left;margin-top:16px;padding:10px 14px;background:#fffaf1;border:1px solid #dacbb4;border-radius:8px;color:#695345;box-shadow:0 6px 15px #78512b12}.envelope-trigger .envelope-icon{font-size:29px;color:#ad5c4a;line-height:1;animation:mail-wiggle 3s ease-in-out infinite}.envelope-trigger span:nth-child(2){font-size:13px;line-height:1.3}.envelope-trigger small{font-size:11px;color:#9b8871}.envelope-trigger b{font-size:14px;color:#a55f4b;margin-left:10px}.story-strip{position:relative;display:grid;grid-template-columns:minmax(160px,.9fr) 1.1fr;gap:28px;align-items:center;background:#efe9dc;border:1px solid #e0d4c1;padding:22px;margin-top:27px;overflow:hidden}.story-picture{display:block;position:relative;padding:8px;background:#fffdf7;border:0;box-shadow:0 5px 18px #6d5c4924;transform:rotate(-2deg)}.story-picture img{display:block;width:100%;height:clamp(170px,27vw,285px);object-fit:cover;object-position:center 25%}.story-picture>span{position:absolute;bottom:13px;right:12px;background:#fff9e8e8;padding:2px 8px;font-size:11px;color:#655342}.story-copy{position:relative;z-index:1}.story-kicker{color:#a0523f;font-size:12px;letter-spacing:2px}.story-copy h3{font-size:clamp(24px,3vw,36px);line-height:1.35;font-weight:400;letter-spacing:2px;margin:12px 0}.story-copy p{font-size:15px;color:#655d50;line-height:1.8}.story-copy a{display:inline-block;font-size:13px;color:#a0523f;border-bottom:1px solid #bc9981;padding-bottom:3px}.story-heart{position:absolute;right:25px;top:4px;color:#c29982;font:70px Georgia;transform:rotate(15deg);opacity:.55}.envelope-dialog{width:min(480px,92vw);max-width:92vw;max-height:90vh;overflow:auto;background:#eee1cd;border:1px solid #d3bca0;padding:16px;box-shadow:0 16px 60px #0005}.envelope-dialog::backdrop{background:#28231fd9}.envelope-close{z-index:5;position:absolute;top:8px;right:12px;background:#fff9ef;border:1px solid #ddcbb7;border-radius:50%;width:35px;height:35px;color:#67483c;font-size:25px;line-height:1}.envelope-shell{position:relative;padding:20px;background:#c5ad92;overflow:hidden}.envelope-card{position:relative;z-index:2;background:#fffaf0;padding:35px 20px;text-align:center;box-shadow:0 4px 15px #59452e30;animation:letter-rise .65s ease both}.envelope-card h2{font-size:30px;line-height:1.4;font-weight:400;margin:16px 0}.envelope-card p:not(.tiny){font-size:15px;line-height:1.8}.envelope-card .envelope-date{font-size:13px;color:#807363}.envelope-card .pill{margin-top:10px}.envelope-seal{display:inline-block;margin:15px auto 0;border:1px solid #b86b52;color:#b25e49;border-radius:50%;width:44px;height:44px;line-height:42px;font-size:23px}.envelope-flap{position:absolute;bottom:-1px;left:0;right:0;height:38%;background:#d9c4aa;clip-path:polygon(0 100%,0 0,50% 65%,100% 0,100% 100%);z-index:1}.confetti{position:fixed;inset:0;pointer-events:none;z-index:20;overflow:hidden}.confetti i{position:absolute;top:-20px;left:var(--x);width:7px;height:12px;background:#b65d49;animation:fall 2s var(--d) ease-in forwards}.confetti i:nth-child(3n){background:#d9b67a;border-radius:50%}.confetti i:nth-child(3n+1){background:#98a183}@keyframes mail-wiggle{0%,80%,100%{transform:rotate(0)}85%{transform:rotate(-12deg)}90%{transform:rotate(10deg)}95%{transform:rotate(-5deg)}}@keyframes letter-rise{from{opacity:0;transform:translateY(40px)}to{opacity:1;transform:translateY(0)}}@keyframes fall{to{top:100vh;transform:translateX(30px) rotate(var(--r));opacity:0}}@media(max-width:650px){.envelope-trigger{margin-top:10px;padding:8px 10px}.envelope-trigger .envelope-icon{font-size:24px}.envelope-trigger span:nth-child(2){font-size:12px}.story-strip{grid-template-columns:44% 1fr;gap:15px;padding:12px;margin-top:15px}.story-picture{padding:5px}.story-picture img{height:170px}.story-copy h3{font-size:19px;line-height:1.35;letter-spacing:1px;margin:8px 0}.story-copy p{font-size:12px;line-height:1.65;margin:8px 0}.story-copy a{font-size:12px}.story-kicker{font-size:10px;letter-spacing:1px}.story-heart{font-size:40px;right:6px;top:0}.envelope-card{padding:25px 12px}.envelope-card h2{font-size:25px}.envelope-card p:not(.tiny){font-size:14px}}
/* 参考来信与开幕的节奏：短暂揭幕，不阻挡直接浏览 */
.envelope-shell:before,.envelope-shell:after{content:"";position:absolute;top:0;bottom:0;width:51%;z-index:3;pointer-events:none;background:repeating-linear-gradient(90deg,#853b31,#9a493a 17px,#77382e 31px);box-shadow:inset 0 0 24px #57271d55;animation:curtain-left 1.2s .1s ease-in-out forwards}.envelope-shell:before{left:0;transform-origin:left}.envelope-shell:after{right:0;transform-origin:right;animation-name:curtain-right}@keyframes curtain-left{0%,25%{transform:translateX(0)}100%{transform:translateX(-100%)}}@keyframes curtain-right{0%,25%{transform:translateX(0)}100%{transform:translateX(100%)}}.envelope-card .tiny{display:inline-block;white-space:nowrap;overflow:hidden;max-width:100%;animation:typed-note 1.6s steps(27,end) both}@keyframes typed-note{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}@media(prefers-reduced-motion:reduce){.envelope-shell:before,.envelope-shell:after{display:none}.envelope-card .tiny{clip-path:none}}
.envelope-card button{position:static;right:auto;top:auto}

/* 移动端重新编排：文字、按钮、小迎宾员各占独立空间 */
.stage-curtain{position:absolute;inset:0;z-index:5;overflow:hidden;pointer-events:none;animation:stage-finish .1s 2s forwards}.stage-curtain i{position:absolute;top:0;bottom:0;width:51%;background:repeating-linear-gradient(90deg,#752f2b,#984b40 18px,#6f302b 36px);box-shadow:inset 0 0 45px #3c171766;animation:stage-left 1.4s .5s ease-in-out forwards}.stage-curtain i:first-child{left:0}.stage-curtain i:nth-child(2){right:0;animation-name:stage-right}.stage-curtain span{position:absolute;top:42%;left:50%;transform:translate(-50%,-50%);border:1px solid #ecd2a9;border-radius:50%;width:64px;height:64px;text-align:center;line-height:62px;color:#f5dfbb;font-size:30px;animation:seal-away .4s .6s forwards}@keyframes stage-left{to{transform:translateX(-101%)}}@keyframes stage-right{to{transform:translateX(101%)}}@keyframes seal-away{to{opacity:0;transform:translate(-50%,-50%) scale(.7)}}@keyframes stage-finish{to{visibility:hidden}}
.hero-couple{display:none}.opening .opener{z-index:1}.envelope-trigger{position:relative;z-index:2}.envelope-card button{position:static}.frame:nth-last-child(-n+2) img{object-fit:cover}.frame:nth-child(7) img{object-fit:contain;background:#ece8df}
@media(max-width:650px){.opening{min-height:0;display:flex;flex-direction:column;align-items:stretch;padding:78px 22px 46px}.opening>.tiny{top:61px;left:22px}.opening .opener{width:100%;flex:none}.opening h1{font-size:clamp(43px,12.5vw,62px);line-height:1.12;margin:12px 0}.mini{margin:10px 0}.names{font-size:19px;margin:10px 0}.date-line{font-size:11px;letter-spacing:1px;margin:8px 0}.opener .pill{margin-top:5px}.envelope-trigger{display:inline-flex;margin-left:5px;vertical-align:middle;min-height:45px}.envelope-trigger .envelope-icon{font-size:20px}.envelope-trigger span:nth-child(2){font-size:11px}.envelope-trigger b{display:none}.hero-couple{display:block;position:relative;width:66%;margin:23px 0 0 3%;transform:rotate(-3deg);background:#fffdf6;padding:7px 7px 24px;box-shadow:0 8px 25px #5b4f3e26}.hero-couple img{width:100%;height:clamp(160px,29vh,240px);object-fit:cover;object-position:center 35%;display:block}.hero-couple span{position:absolute;bottom:3px;left:10px;font-size:10px;color:#96755f;letter-spacing:1px}.character{width:40%;position:absolute;right:0;bottom:35px;z-index:2;max-width:175px}.character img{max-height:190px}.bubble{font-size:10px;top:-12%;right:5%;padding:6px 8px;white-space:nowrap}.tap-tip{font-size:9px}.scrollhint{bottom:13px;left:22px;font-size:10px}.spark.s1{top:80px;right:9%}.spark.s2{bottom:23%;left:3%}.envelope-dialog{padding:10px}.envelope-shell{padding:14px}.envelope-card{padding:22px 12px}.envelope-card h2{font-size:24px}.envelope-card p:not(.tiny){font-size:14px}}
@media(max-width:380px){.opening{padding-left:16px;padding-right:16px}.opening h1{font-size:46px}.hero-couple{width:64%}.opener .pill{font-size:12px;padding:9px 12px;gap:10px}.envelope-trigger{margin-left:2px;padding:8px}.envelope-trigger .envelope-icon{display:none}}
@media(prefers-reduced-motion:reduce){.stage-curtain{display:none}}
