@charset "UTF-8";
:root{color-scheme:light;--wine:#731e30;--dark:#4d1524;--paper:#fbf7f0;--ink:#3d2928;--muted:#8b706c;--line:#d9c9bc;--serif:"Songti SC","Noto Serif CJK SC","STSong","SimSun",serif;--sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:20px}body{margin:0;background:var(--wine);color:var(--ink);font-family:var(--sans);font-size:16px;-webkit-font-smoothing:antialiased}a{color:inherit}a:focus-visible{outline:3px solid #c28a3f;outline-offset:5px}img{display:block;width:100%;height:auto}h1,h2,h3,p,figure{margin:0}h1,h2,h3{font-family:var(--serif);font-weight:400}main{max-width:600px;margin:auto;background:var(--paper);overflow:hidden}.tiny,.section-label,.eyebrow{font-size:12px;letter-spacing:.15em}.skip{position:fixed;left:10px;top:-100px;z-index:10;background:white;padding:14px}.skip:focus{top:10px}.desktop-note{display:none}.cover{height:900px;height:100svh;min-height:650px;max-height:1100px;position:relative;color:white;background:#afa596}.cover:after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(49,29,18,.13),transparent 32%,transparent 48%,rgba(35,21,17,.18) 61%,rgba(35,21,17,.83) 100%);pointer-events:none}.cover-photo{height:100%;object-fit:cover;object-position:50% 37%}.cover-top{position:absolute;top:30px;left:28px;right:28px;z-index:1;display:flex;justify-content:space-between;gap:16px;font-size:12px;letter-spacing:.12em;color:#522d2a}.cover-top span:first-child{border-top:1px solid #76594b;border-bottom:1px solid #76594b;padding:7px 0}.cover-top span:last-child{padding-top:8px;letter-spacing:.09em}.cover-copy{position:absolute;bottom:32px;left:20px;right:20px;text-align:center;z-index:1}.cover-kicker{font-family:Georgia,serif;font-size:12px;letter-spacing:.18em;margin-bottom:20px}.cover h1{font-size:clamp(34px,6vw,49px);letter-spacing:.06em;white-space:nowrap}.cover h1 em{font-family:Georgia,serif;font-size:.75em;font-weight:400;margin:0 8px;color:#e2c2a7}.cover-sub{font-size:14px;letter-spacing:.18em;margin-top:18px}.cover-scroll{display:flex;flex-direction:column;align-items:center;gap:13px;width:max-content;margin:34px auto 0;text-decoration:none;font-size:12px;letter-spacing:.15em;color:#ece3d9}.cover-scroll i{height:31px;width:1px;background:#d9c9bb}.paper{background:var(--paper)}.section-label{display:flex;justify-content:space-between;gap:16px;color:var(--muted);border-bottom:1px solid var(--line);padding-bottom:17px;font-size:12px;letter-spacing:.08em}.letter{padding:35px 35px 27px;text-align:center;position:relative}.letter-mark{font-family:var(--serif);color:var(--wine);font-size:58px;line-height:1;display:block;margin:47px auto 29px}.eyebrow{color:var(--muted);font-size:14px;letter-spacing:.1em}.letter h2{font-size:35px;line-height:1.65;letter-spacing:.1em;margin:22px 0 27px;color:var(--wine)}.letter-body{font-size:15px;line-height:2.25;letter-spacing:.05em}.letter-body p+p{margin-top:22px}.signature{font-size:12px;letter-spacing:.25em;text-indent:.25em;color:var(--muted);margin:37px 0 47px;text-align:center}.letter-bottom{display:flex;justify-content:space-between;border-top:1px solid var(--line);padding-top:17px;color:var(--wine);font-size:12px;letter-spacing:.12em}.story{padding:50px 27px 54px;background:var(--wine);color:var(--paper)}.story-heading{padding:0 9px 34px}.story-heading>.tiny{color:#d6b4ae;letter-spacing:.12em}.story h2{font-size:37px;line-height:1.5;margin-top:26px;letter-spacing:.05em}.story h2 em{font-style:normal}.story-heading>p{font-size:14px;color:#ddc9c1;line-height:1.8;margin-top:17px}.banquet{padding:35px 32px 45px}.banquet-heading{text-align:center;margin-top:45px}.seal{display:block;width:43px;height:43px;border:1px solid var(--wine);outline:1px solid var(--wine);outline-offset:4px;font-family:var(--serif);font-size:32px;line-height:41px;color:var(--wine);margin:0 auto 29px}.banquet h2{font-size:29px;letter-spacing:.035em;color:var(--wine)}.banquet-heading p{font-size:14px;margin-top:16px;line-height:1.8;color:var(--muted)}.date-card{border-top:1px solid var(--line);border-bottom:1px solid var(--line);text-align:center;padding:25px 0 21px;margin-top:35px;color:var(--wine)}.date-card>p{font-size:14px;letter-spacing:.2em}.big-date{display:flex;align-items:center;justify-content:center;gap:22px;font-family:Georgia,serif;font-size:89px;font-weight:400;line-height:1.3;letter-spacing:-.065em}.big-date i{font-style:normal;font-size:47px;font-weight:400;color:#b49783}.date-caption{display:flex;justify-content:center;gap:65px;font-size:14px;letter-spacing:.2em}.venue{display:flex;gap:22px;align-items:flex-start;padding:31px 0 25px}.venue-index{font-size:12px;letter-spacing:.08em;color:var(--muted);padding-top:5px}.venue h3{font-size:20px;line-height:1.5}.venue p{font-size:14px;color:var(--muted);line-height:1.8;margin-top:6px}.map-button{display:flex;align-items:center;justify-content:center;gap:12px;background:var(--wine);color:var(--paper);text-decoration:none;min-height:57px;padding:15px 12px;font-size:15px;letter-spacing:.08em;transition:background .2s}.map-button:hover{background:var(--dark)}.banquet-footnote{text-align:center;color:var(--muted);font-size:12px;letter-spacing:.08em;margin-top:17px}footer{background:var(--wine);color:var(--paper);text-align:center;padding:58px 25px max(33px,env(safe-area-inset-bottom));border-top:1px solid #9d5e65}footer .tiny{font-family:Georgia,serif;letter-spacing:.13em;color:#d5b7ae}.footer-title{font-family:var(--serif);font-size:31px;letter-spacing:.08em;margin-top:28px}.footer-names{font-family:var(--serif);font-size:21px;margin-top:27px;letter-spacing:.1em}.footer-names span{font-family:Georgia,serif;font-style:italic;color:#d5b7ae;margin:0 9px}.footer-date{font-family:Georgia,serif;font-size:14px;letter-spacing:.14em;margin-top:15px}.footer-heart{display:block;color:#c08f83;font-size:14px;margin-top:31px}
@media(min-width:960px){body{background:radial-gradient(ellipse at 15% 30%,#8b3542 0,#651a2c 58%,#4e1422 100%);background-attachment:fixed}main{margin-left:calc(50% - 90px);margin-right:40px;box-shadow:0 0 100px #30071340}.desktop-note{display:block;position:fixed;left:calc((100vw - 960px)/2 + 25px);top:50%;transform:translateY(-50%);width:280px;text-align:center;color:var(--paper)}.desktop-note .tiny{font-family:Georgia,serif;color:#d5b7ae}.side-names{font-family:var(--serif);font-size:43px;letter-spacing:.14em;margin-top:36px}.side-names span{display:block;font-size:17px;margin:17px 0;color:#d5b7ae}.side-verse{font-family:var(--serif);font-size:19px;letter-spacing:.12em;margin-top:35px}.side-rule{height:48px;width:1px;background:#b88177;margin:31px auto}.side-date{font-family:Georgia,serif;font-size:25px;letter-spacing:.1em}.side-location{font-size:12px;letter-spacing:.2em;color:#d5b7ae;margin-top:15px}.side-link{display:inline-block;font-size:14px;letter-spacing:.1em;text-decoration:none;border-bottom:1px solid #b88177;padding-bottom:8px;margin-top:39px}.cover h1{font-size:46px}}
@media(max-width:370px){.cover h1{font-size:30px}.cover h1 em{margin:0 3px}.cover-top{left:20px;right:20px;font-size:12px}.letter,.banquet{padding-left:23px;padding-right:23px}.letter h2{font-size:31px}.story{padding-left:22px;padding-right:22px}.story h2{font-size:32px}.banquet h2{font-size:25px}.venue{gap:14px}.venue h3{font-size:18px}.big-date{font-size:80px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}

.music-toggle{position:fixed;z-index:5;right:max(16px,env(safe-area-inset-right));top:max(82px,env(safe-area-inset-top));display:flex;align-items:center;gap:7px;min-height:44px;padding:8px 13px;border:1px solid #ead8c4;border-radius:30px;background:#fbf7f0ed;color:var(--wine);box-shadow:0 3px 16px #30121b20;font-family:var(--sans);font-size:12px;cursor:pointer}.music-icon{font-family:Georgia,serif;font-size:23px;line-height:1}.music-toggle[aria-pressed="true"]{background:var(--wine);color:var(--paper)}.music-toggle:focus-visible{outline:3px solid #c28a3f;outline-offset:4px}.music-status{position:fixed;z-index:5;right:16px;top:135px;max-width:230px;background:var(--paper);color:var(--wine);font-size:12px;line-height:1.6;border-radius:8px;box-shadow:0 3px 16px #30121b20}.music-status:not(:empty){padding:10px 13px}@media(min-width:960px){.music-toggle{top:28px;right:28px}.music-status{top:82px;right:28px}}

/* 拆信、翻页与喜气彩蛋 */
button:focus-visible{outline:3px solid #c28a3f;outline-offset:5px}
.envelope{position:fixed;inset:0;width:min(100%,600px);height:100%;height:100svh;max-width:100%;max-height:100%;margin:auto;padding:50px 30px 35px;border:0;background:radial-gradient(ellipse at 50% 20%,#984350,var(--wine) 65%,var(--dark));color:#eed6ad;text-align:center;overflow:hidden;touch-action:none;user-select:none;transform:translateY(var(--swipe-offset,0px));transition:opacity .65s,transform .65s}
.envelope::backdrop{background:#4d1524f5;transition:opacity .65s}.envelope[open]{display:flex;flex-direction:column;align-items:center;justify-content:center}.envelope.is-dragging{transition:none}.envelope.is-opening{opacity:0;transform:translateY(calc(var(--swipe-offset,0px) - 35px));pointer-events:none}.envelope.is-opening::backdrop{opacity:0}
.envelope-lines{position:absolute;inset:18px;border:1px solid #d6b58260;pointer-events:none}.envelope-lines:after{content:"";position:absolute;width:90%;height:45%;left:5%;bottom:-28%;border:1px solid #d6b58250;transform:rotate(45deg)}
.envelope-date{font-size:12px;letter-spacing:.3em;position:absolute;top:55px}.envelope-message{position:relative}.envelope-message>p{font-size:12px;letter-spacing:.25em}.envelope-message h2{font-size:clamp(31px,7vw,43px);line-height:1.7;letter-spacing:.14em;margin:25px 0}.envelope-message>span{font-family:var(--serif);font-size:19px;letter-spacing:.15em}.envelope-open{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;width:102px;height:102px;border-radius:50%;border:1px solid #e5c18b;outline:1px solid #d6b58266;outline-offset:6px;background:linear-gradient(140deg,#f3dfb5,#c89f65);color:var(--dark);box-shadow:0 10px 35px #30071350;cursor:pointer;margin:49px 0 28px}.envelope-open>span{font-family:var(--serif);font-size:42px;line-height:1.2}.envelope-open small{font-size:11px;margin-top:5px}.envelope-hint{font-size:11px;letter-spacing:.2em;color:#dcc19f}
.letter-mark{border:0;background:transparent;cursor:pointer;padding:8px;margin-bottom:6px}.blessing{min-height:22px;font-size:12px;letter-spacing:.14em;color:var(--muted);margin-bottom:26px}.blessing.is-new{animation:blessing-in .4s ease-out;color:var(--wine)}
.portrait-frame{padding:10px;background:#f1e5d7;transform:rotate(-2deg);margin:0 5px;color:var(--wine)}.portrait-frame img{aspect-ratio:2/3;object-fit:cover}.portrait-frame figcaption{display:flex;justify-content:space-between;gap:12px;font-size:12px;letter-spacing:.06em;padding:16px 4px 7px}.photo-pair{display:grid;grid-template-columns:1.25fr 1fr;gap:22px;margin-top:55px;align-items:center}.photo-pair img{aspect-ratio:3/4;object-fit:cover}.photo-pair figcaption{font-size:12px;letter-spacing:.08em;color:#ddc9c1;margin-top:13px}.pair-note>span{font-family:Georgia,serif;font-size:65px;line-height:.8;color:#b88479}.pair-note p{font-family:var(--serif);font-size:clamp(16px,4.8vw,24px);line-height:1.9;letter-spacing:.05em}.pair-note small{display:block;font-family:Georgia,serif;font-size:12px;letter-spacing:.05em;color:#ddc9c1;margin-top:21px}
.celebration{position:fixed;inset:0;pointer-events:none;z-index:20;overflow:hidden}.celebration i{position:absolute;left:var(--x);top:-20px;width:6px;height:11px;background:#d7b87c;animation:confetti-fall 1.5s var(--delay) ease-in forwards}.celebration i:nth-child(3n){background:#af5760;width:5px;height:5px;border-radius:50%}
@keyframes confetti-fall{to{transform:translate(var(--drift),100vh) rotate(420deg);opacity:0}}@keyframes blessing-in{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
@media(max-height:600px){.envelope{padding:25px}.envelope-date{position:static;margin-bottom:15px}.envelope-message h2{font-size:27px;margin:12px 0}.envelope-open{width:75px;height:75px;margin:24px 0 18px}.envelope-open>span{font-size:30px}}
