:root{--paper:#eee9df;--ink:#242620;--muted:#858478;--gold:#af9162;--line:rgba(36,38,32,.18);--serif:'Songti SC','Noto Serif SC','STSong','SimSun',serif;--sans:-apple-system,BlinkMacSystemFont,'Segoe UI','Microsoft YaHei',sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:80px}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased}button,a{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer;border:0;background:none;padding:0}button:focus-visible,a:focus-visible{outline:2px solid var(--gold);outline-offset:6px}img{display:block;max-width:100%}::selection{background:#b59165;color:white}.reading-progress{position:fixed;top:0;left:0;width:100%;height:2px;background:var(--gold);transform:scaleX(0);transform-origin:left;z-index:110}.site-header{position:absolute;left:0;top:0;z-index:20;width:100%;padding:28px 4.5%;display:flex;align-items:center;justify-content:space-between;color:#fff}.brand{display:flex;align-items:center;gap:9px;font:24px Georgia,serif;letter-spacing:1px}.brand>span:first-child{font-size:16px;font-style:italic}.brand-line{height:18px;width:1px;background:currentColor;opacity:.4;margin:0 10px}.brand small{font:12px var(--sans);letter-spacing:3px}nav{display:flex;gap:38px;font-size:12px;letter-spacing:2px}nav a{padding:8px 0}nav a:hover{opacity:.65}.nav-location span{margin-left:12px}.hero{height:100svh;min-height:680px;position:relative;overflow:hidden;color:#fff;background:#777366}.hero-image,.hero-shade{position:absolute;inset:0}.hero-image{will-change:transform}.hero-image img{width:100%;height:100%;object-fit:cover;object-position:50% 52%}.hero-shade{background:linear-gradient(180deg,rgba(18,23,19,.26) 0%,transparent 28%,rgba(13,20,14,.12) 42%,rgba(13,20,14,.7) 100%)}.hero-top{position:absolute;top:112px;left:4.5%;right:4.5%;display:flex;justify-content:space-between;letter-spacing:3px;font-size:10px}.hero-title{position:absolute;bottom:175px;left:8%;}.eyebrow{font-size:10px;letter-spacing:3px;line-height:2;margin:0 0 28px}.eyebrow.dark{color:#747366}h1,h2,h3,p{margin-top:0}h1{font:clamp(72px,8.2vw,130px)/1.2 var(--serif);letter-spacing:.035em;margin:0;position:relative}h1 span{display:block;margin-left:1.5em}h1 i{font:italic clamp(34px,4vw,68px)/1 Georgia,serif;position:absolute;left:55%;top:.25em;color:#e7d8ba;white-space:nowrap;transform:rotate(-7deg)}.hero-names{margin-top:26px;font:22px var(--serif);letter-spacing:6px}.hero-names span{font:italic 20px Georgia,serif;margin:0 15px;color:#dec9a6}.hero-bottom{position:absolute;left:4.5%;right:4.5%;bottom:36px;border-top:1px solid #ffffff45;padding-top:22px;display:flex;align-items:end;justify-content:space-between}.hero-date{display:block;font:32px Georgia,serif;letter-spacing:2px}.hero-day{font-size:10px;letter-spacing:3px;display:block;margin-top:8px}.scroll-cue{display:flex;align-items:center;gap:22px;font-size:10px;letter-spacing:2px}.scroll-arrow{font-size:25px;animation:float 2.6s ease-in-out infinite}.edition{font-size:9px;letter-spacing:2px}.section-pad{padding:110px 8%}.section-kicker{display:flex;justify-content:space-between;border-bottom:1px solid var(--line);padding-bottom:22px;font-size:10px;letter-spacing:2px;margin-bottom:85px}.invite-grid{display:grid;grid-template-columns:1.2fr 1fr;gap:12%}h2{font:clamp(36px,4.4vw,68px)/1.5 var(--serif);letter-spacing:.02em;font-weight:400}h2 span{color:var(--gold)}.invite-title h2{margin:35px 0 24px}.script{font:italic 28px Georgia,serif;color:var(--gold);margin-top:30px}.invite-copy{font-family:var(--serif);line-height:2.25;font-size:16px;position:relative;padding-top:5px}.invite-copy p{margin-bottom:24px}.invite-copy strong{font-weight:400;color:#84714f}.salutation{font-size:18px}.seal{position:absolute;right:0;top:-15px;border:1px solid #ac8a5b;color:#ac8a5b;width:50px;height:56px;display:grid;place-items:center;font:32px var(--serif);transform:rotate(5deg)}.signature{font-size:18px;margin-top:35px;letter-spacing:3px}.signature span{font:10px var(--sans);letter-spacing:2px;display:block;margin-top:12px;color:var(--muted)}.cinema{height:220svh;position:relative;background:#20251f}.cinema-sticky{position:sticky;top:0;height:100svh;overflow:hidden;color:#fff}.cinema-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;will-change:transform,opacity}.cinema-two{opacity:0}.cinema-shade{position:absolute;inset:0;background:linear-gradient(90deg,rgba(19,25,19,.65),rgba(19,25,19,0) 75%),linear-gradient(0deg,rgba(19,25,19,.55),transparent 50%)}.cinema-caption{position:absolute;left:8%;top:25%;}.cinema-caption h2{font-size:clamp(44px,5.5vw,84px);line-height:1.5;margin-bottom:32px}.cinema-caption h2 span{display:block;color:#ebdbc0}.cinema-sub{font:15px/2 var(--serif);letter-spacing:2px;color:#e5e1d5}.cinema-index{position:absolute;bottom:40px;left:8%;font:13px var(--serif);letter-spacing:3px}.cinema-index span{font:9px var(--sans);letter-spacing:2px;margin-left:20px}.photo-open{position:absolute;bottom:40px;right:8%;font-size:11px;letter-spacing:2px;padding-bottom:8px;border-bottom:1px solid #ffffff60}.couple-heading{display:flex;justify-content:space-between;align-items:end;margin-bottom:70px}.couple-heading h2{margin-bottom:0;line-height:1.45}.muted{color:#a8a699}.couple-heading p{font:15px/2.1 var(--serif);color:#75756c;max-width:300px}.portraits{display:grid;grid-template-columns:1fr 100px 1fr;max-width:1050px;margin:auto;position:relative}.portrait{margin:0}.portrait button{display:block;width:100%;overflow:hidden}.portrait img{width:100%;aspect-ratio:2/3;object-fit:cover;transition:transform 1s}.portrait button:hover img{transform:scale(1.04)}.groom{padding-top:110px}.portrait-amp{font:italic 85px Georgia,serif;color:var(--gold);display:flex;justify-content:center;align-items:center;position:relative;z-index:1}.portrait figcaption{padding-top:25px;position:relative}.portrait figcaption>span{font-size:9px;letter-spacing:2px;color:var(--muted)}.portrait h3{font:32px var(--serif);letter-spacing:5px;margin:12px 0 0}.portrait i{font:italic 24px Georgia,serif;position:absolute;right:0;bottom:0;color:var(--gold)}.moments{height:280svh;background:#22261f;color:var(--paper);position:relative}.moments-sticky{position:sticky;top:0;height:100svh;padding:65px 0 35px;overflow:hidden;display:flex;flex-direction:column;justify-content:center}.moments-heading{padding:0 8%;display:flex;justify-content:space-between;align-items:end;margin-bottom:35px}.moments-heading h2{font-size:clamp(32px,4vw,56px);margin:0}.moments-heading .eyebrow{color:#b5ad98;margin-bottom:8px}.gallery-instruction{font-size:10px;letter-spacing:2px;margin-bottom:15px}.gallery-instruction>span{margin-left:18px}.gallery-window{width:100%;overflow:hidden}.gallery-track{display:flex;gap:35px;padding:0 8%;width:max-content;will-change:transform}.gallery-track figure{width:52vw;margin:0;flex-shrink:0}.gallery-track figure.gallery-vertical{width:26vw}.gallery-track button{width:100%;display:block;overflow:hidden}.gallery-track img{width:100%;height:min(52svh,530px);object-fit:cover;transition:transform .8s}.gallery-track button:hover img{transform:scale(1.035)}.gallery-track figcaption{display:flex;justify-content:space-between;padding-top:20px;font-size:10px;letter-spacing:2px}.gallery-track figcaption i{font:italic 18px Georgia,serif;color:#b7a88b}.gallery-progress{height:1px;background:#ffffff25;width:84%;margin:35px auto 0}.gallery-progress span{display:block;width:25%;height:100%;background:#c9b58e;transform-origin:left}.date-layout{display:grid;grid-template-columns:1.2fr 1fr;align-items:center;gap:12%}.date-numbers>span{font:48px Georgia,serif;letter-spacing:12px;color:var(--gold);display:block}.date-numbers strong{font:clamp(80px,11vw,170px)/1.2 Georgia,serif;letter-spacing:-5px;white-space:nowrap;font-weight:400}.date-numbers strong span{color:var(--gold);font-size:.55em;vertical-align:15%}.date-numbers p{font:16px var(--serif);letter-spacing:4px;margin:20px 0 0}.date-note h2{font-size:42px;margin:0 0 24px}.date-note>p:not(.eyebrow){font:15px/2.1 var(--serif);color:#6e7064}.date-note .eyebrow{margin-bottom:15px}.date-note p.meal-time{font:12px var(--sans);margin-top:22px;letter-spacing:1px}.text-link{font-size:11px;letter-spacing:1px;border-bottom:1px solid var(--line);padding:12px 0;display:inline-block}.text-link span{margin-left:30px}.countdown{border-top:1px solid var(--line);margin-top:75px;padding-top:24px;display:flex;align-items:center;gap:14px;font-size:11px;letter-spacing:2px}.countdown strong{font:32px Georgia,serif;color:var(--gold)}.countdown-end{margin-left:auto;color:var(--muted)}.location{background:#e4dfd4}.location-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:60px}.location-heading h2{margin-bottom:0}.location-mark{font:120px var(--serif);color:#b9aa8b;opacity:.7;margin-right:40px}.location-grid{display:grid;grid-template-columns:1fr 1fr;gap:8%}.address-block{border-top:1px solid var(--line);padding-top:25px}.address-type{font-size:10px;letter-spacing:2px;color:#8c816c}.address-block h3{font:30px var(--serif);margin:24px 0}.address-block p{font:16px/2 var(--serif)}.address-block strong{font-weight:400}.address-block p.address-hint{font:11px/1.8 var(--sans);color:#78796d;margin-top:20px}.address-actions{display:flex;align-items:center;gap:25px;margin-top:28px}.filled-link{background:#30392f;color:#f1ebdf;padding:17px 22px;font-size:11px;letter-spacing:1px;display:flex;align-items:center;justify-content:space-between;gap:25px;cursor:pointer}.filled-link:hover{background:#52604f}.filled-link.outline{border:1px solid #85887a;background:transparent;color:var(--ink)}.filled-link.outline:hover{background:#d3cec1}.travel-note{border-top:1px solid var(--line);display:flex;gap:55px;margin-top:65px;padding-top:25px;font-size:11px;letter-spacing:1px}.travel-note>span{color:#8f8065}.travel-note p{line-height:2.1;margin:0;color:#6d7064}footer{text-align:center;padding:100px 8% 30px;background:#22281f;color:#eee9df}footer .eyebrow{color:#b1b09f;font-size:9px}footer h2{font-size:clamp(56px,7vw,96px);margin-bottom:22px}footer h2 span{color:#c1ac85}.footer-names{font:21px var(--serif);letter-spacing:4px}.footer-names i{font:italic 22px Georgia,serif;margin:0 18px;color:#c1ac85}.footer-date{font-size:10px;letter-spacing:2px;color:#a9aa9a;margin-top:20px}footer .text-link{border-color:#fff4;margin-top:22px;color:#dfd7c7}.footer-bottom{border-top:1px solid #fff2;display:flex;justify-content:space-between;margin-top:90px;padding-top:23px;font-size:9px;letter-spacing:2px;color:#a4a896}.mobile-dock{display:none}.reveal{opacity:1;transform:none}.js-ready .reveal{opacity:0;transform:translateY(30px);transition:opacity .9s ease,transform .9s ease}.js-ready .reveal.visible{opacity:1;transform:translateY(0)}dialog{background:#111912;border:0;color:#fff;padding:0;width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;margin:0;overflow:hidden}dialog::backdrop{background:#111912}dialog[open]{display:flex;align-items:center;justify-content:center}dialog img{max-width:90%;max-height:85%;object-fit:contain}.lightbox-close{position:absolute;right:24px;top:12px;font:40px var(--sans);z-index:2}.lightbox-prev,.lightbox-next{position:absolute;top:50%;font-size:26px;background:#172019b3;border-radius:50%;width:44px;height:44px;display:grid;place-items:center;z-index:2}.lightbox-prev{left:10px}.lightbox-next{right:10px}.lightbox-counter{position:absolute;bottom:12px;font-size:11px;letter-spacing:3px}#toast{position:fixed;bottom:90px;left:50%;transform:translate(-50%,15px);background:#252d24ee;color:#fff;padding:14px 24px;max-width:90%;border-radius:4px;font-size:12px;line-height:1.7;z-index:150;opacity:0;pointer-events:none;transition:.3s;white-space:pre-line;text-align:center}#toast.show{opacity:1;transform:translate(-50%,0)}@keyframes float{50%{transform:translateY(7px)}}
@media(min-width:1600px){.section-pad{padding-left:max(8%,calc((100vw - 1400px)/2));padding-right:max(8%,calc((100vw - 1400px)/2))}}
@media(max-width:800px){.hero{min-height:640px}.site-header{padding:25px 6%}.brand{font-size:20px;gap:6px}.brand-line{margin:0 4px}.brand small{font-size:10px}nav{gap:15px;font-size:10px;letter-spacing:1px}nav a:nth-child(2){display:none}.hero-top{left:6%;right:6%;top:96px;font-size:8px;letter-spacing:2px}.hero-image img{object-position:53% 45%}.hero-title{left:7%;bottom:180px}.hero-title>.eyebrow{font-size:10px;margin-bottom:20px}h1{font-size:clamp(68px,15vw,108px)}h1 i{font-size:34px}.hero-names{font-size:19px;letter-spacing:3px;margin-top:22px}.hero-names span{margin:0 10px}.hero-bottom{left:7%;right:7%;bottom:30px;align-items:center}.hero-date{font-size:28px}.hero-day{font-size:9px;letter-spacing:2px}.edition{display:none}.scroll-cue{gap:10px;max-width:120px;line-height:1.8;font-size:9px;letter-spacing:1px}.section-pad{padding:75px 7%}.section-kicker{font-size:8px;letter-spacing:1px;margin-bottom:50px;gap:15px;padding-bottom:18px}.invite-grid{grid-template-columns:1fr;gap:50px}.invite-title h2{font-size:42px;margin-top:24px;line-height:1.5}.script{font-size:26px}.invite-copy{font-size:16px;line-height:2.2;padding-right:6%}.seal{right:0;top:-5px;width:40px;height:48px;font-size:27px}.salutation{font-size:17px}.signature{font-size:17px;margin-top:30px}.cinema{height:190svh}.cinema-photo{object-position:55% center}.cinema-caption{left:7%;top:auto;bottom:140px}.cinema-shade{background:linear-gradient(0deg,rgba(16,24,18,.8),rgba(16,24,18,.1) 65%)}.cinema-caption h2{font-size:46px;line-height:1.45;margin-bottom:24px}.cinema-caption .eyebrow{font-size:8px;margin-bottom:18px}.cinema-sub{font-size:13px}.cinema-index{left:7%;bottom:90px;font-size:11px}.cinema-index span{display:none}.photo-open{bottom:85px;right:7%;font-size:10px}.couple-heading{align-items:start;gap:24px;margin-bottom:45px}.couple-heading h2{font-size:32px;white-space:nowrap}.couple-heading p{font-size:12px;max-width:145px;margin-top:8px}.portraits{grid-template-columns:1fr 20px 1fr}.groom{padding-top:65px}.portrait-amp{font-size:42px;margin:0 -20px;align-items:center}.portrait figcaption{padding-top:18px}.portrait figcaption>span{font-size:7px;letter-spacing:1px}.portrait h3{font-size:24px;letter-spacing:3px;margin-top:10px}.portrait i{font-size:17px;position:static;display:block;margin-top:7px}.moments{height:260svh}.moments-sticky{padding:70px 0 90px}.moments-heading{display:block;padding:0 7%;margin-bottom:28px}.moments-heading h2{font-size:32px}.moments-heading .eyebrow{font-size:8px;margin-bottom:12px}.gallery-instruction{display:block;margin-top:17px;font-size:9px}.gallery-track{padding:0 7%;gap:20px}.gallery-track figure{width:84vw}.gallery-track figure.gallery-vertical{width:57vw}.gallery-track img{height:43svh;min-height:260px}.gallery-track figcaption{font-size:9px;letter-spacing:1px;padding-top:18px}.gallery-track figcaption i{font-size:16px}.gallery-progress{margin-top:25px;width:86%}.date-layout{grid-template-columns:1fr;gap:45px}.date-numbers>span{font-size:34px;letter-spacing:9px}.date-numbers strong{font-size:clamp(76px,23vw,120px);letter-spacing:-3px}.date-numbers p{font-size:14px;letter-spacing:3px}.date-note h2{font-size:38px}.date-note>p:not(.eyebrow){font-size:15px}.countdown{margin-top:45px;gap:10px;font-size:10px;letter-spacing:1px;flex-wrap:wrap}.countdown-end{width:100%;margin:8px 0 0}.location-heading{margin-bottom:40px}.location-heading h2{font-size:36px}.location-mark{font-size:70px;margin-right:0}.location-grid{grid-template-columns:1fr;gap:45px}.address-block h3{font-size:27px}.address-block p{font-size:16px}.address-actions{gap:25px}.filled-link{padding:16px 20px;font-size:11px}.travel-note{gap:22px;margin-top:45px;font-size:10px;letter-spacing:0}.travel-note>span{white-space:nowrap}footer{padding:75px 7% 100px}footer h2{font-size:56px}footer .eyebrow{font-size:8px;letter-spacing:1.5px}.footer-bottom{margin-top:60px;font-size:8px;letter-spacing:1px}.mobile-dock{display:flex;position:fixed;bottom:14px;left:5%;right:5%;z-index:25;justify-content:space-between;align-items:center;padding:17px 20px;background:#eee9dfef;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);border:1px solid #ffffff70;box-shadow:0 6px 30px #19231818;font-size:10px;letter-spacing:1px;color:#30392d;opacity:0;pointer-events:none;transform:translateY(20px);transition:.4s}.mobile-dock.visible{opacity:1;pointer-events:auto;transform:none}.mobile-dock span{border-left:1px solid #8c8f8050;padding-left:20px}.lightbox-close{top:18px;right:20px}dialog img{max-width:100%;max-height:85%}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.scroll-arrow{animation:none}.js-ready .reveal{opacity:1;transform:none;transition:none}.hero-image,.cinema-photo,.gallery-track{will-change:auto}.portrait img,.gallery-track img{transition:none}}

/* 双人照保持完整构图，竖屏下照片与文字分区，避免裁掉人物。 */
.cinema-photo{object-fit:contain;object-position:center;background:#20251f}
.cinema-shade{background:linear-gradient(0deg,rgba(19,25,19,.68),transparent 38%);pointer-events:none}
.cinema-caption{top:auto;bottom:100px;pointer-events:none}
.cinema-caption h2{font-size:clamp(38px,4vw,58px);line-height:1.3;margin-bottom:18px}
.cinema-caption h2 br{display:none}
.cinema-caption h2 span{display:inline}
.cinema-caption .eyebrow{margin-bottom:15px}
.gallery-track img{object-fit:contain;background:#22261f}
.hero-image img{object-position:53% center}
@media(max-aspect-ratio:1/1){
 .cinema-photo{top:6%;height:54%;object-fit:contain}
 .cinema-shade{background:none}
 .cinema-caption{top:auto;bottom:135px;left:7%;right:7%}
 .cinema-caption h2{font-size:clamp(30px,7.5vw,44px);line-height:1.5;margin-bottom:16px}
 .cinema-caption h2 br{display:block}
 .cinema-caption h2 span{display:inline}
 .cinema-caption .eyebrow{font-size:8px;margin-bottom:12px}
 .cinema-sub{font-size:12px;line-height:1.8;letter-spacing:1px;margin-bottom:0}
 .cinema-index{bottom:90px}
 .photo-open{bottom:85px}
 .gallery-track img{height:36svh;min-height:0;object-fit:contain}
 .hero-title h1 i{left:60%}
}
@media(max-aspect-ratio:1/2){.cinema-photo{top:5%;height:55%}.cinema-caption{bottom:140px}.cinema-caption h2{font-size:36px}.cinema-sub{font-size:13px}}

/* 男左女右：保留照片原本朝向，让新娘朝向新郎。 */
.portrait.groom{grid-column:1;grid-row:1;padding-top:0}
.portrait.bride{grid-column:3;grid-row:1;padding-top:110px}
.portrait-amp{grid-column:2;grid-row:1}
@media(max-width:800px){.portrait.bride{padding-top:65px}}
