:root{--ivory:#fffaf8;--paper:#fffdfce0;--blush:#f3d3de;--blush-light:#faedf1;--burgundy:#62404c;--rose:#9b6c7b;--rose-gold:#b98b91;--hairline:#a66d7f47;--serif-cn:"Songti SC", "STSong", "Noto Serif CJK SC", serif;--sans-cn:"PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--serif-en:Didot, "Bodoni 72", "Times New Roman", serif}*{box-sizing:border-box}html{scroll-behavior:smooth;background:#efd5de}body{color:var(--burgundy);font-family:var(--sans-cn);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;background:radial-gradient(circle at 50% -8%,#fff8fa 0,#0000 38rem),#efd5de;margin:0;overflow-x:hidden}a{color:inherit;-webkit-tap-highlight-color:transparent;text-decoration:none}.invitation-shell{min-height:100svh;position:relative;overflow:hidden}.invitation{isolation:isolate;width:min(100%,640px);min-height:100svh;padding:0 clamp(20px, 6vw, 44px) calc(78px + env(safe-area-inset-bottom));background:radial-gradient(circle at -15% 5%,#ffffffad 0 14rem,#0000 14.1rem),linear-gradient(#f4d9e2 0%,#fbf1f4 25%,#fffaf8 51%,#fbf0f4 77%,#f2cfdb 100%);margin:0 auto;position:relative;box-shadow:0 0 60px #6732481f}.invitation:before{content:"";z-index:-1;border:1px solid var(--hairline);pointer-events:none;border-radius:28px;position:absolute;inset:24px 18px}.ambient{z-index:-1;aspect-ratio:1;filter:blur(2px);pointer-events:none;border-radius:50%;width:30rem;position:fixed}.ambient-one{background:#fff8fa99;top:-18rem;left:-12rem}.ambient-two{background:#d89eb42e;bottom:-16rem;right:-18rem}.hero{min-height:100svh;padding:max(62px, calc(38px + env(safe-area-inset-top))) 0 54px;text-align:center;flex-direction:column;align-items:center;display:flex;position:relative}.eyebrow{color:#9f7080;font-family:var(--serif-en), var(--serif-cn);letter-spacing:.24em;margin:0;font-size:clamp(.72rem,2.7vw,.88rem);font-weight:400;line-height:1.5}.hero-eyebrow{letter-spacing:.38em;font-style:italic}.hero h1,.section-heading h2,.closing>p{font-family:var(--serif-cn);font-weight:300}.hero h1{letter-spacing:.12em;margin:30px 0 0;font-size:clamp(3rem,13vw,4.35rem);line-height:1.16}.names{font-family:var(--serif-cn);letter-spacing:.06em;margin:34px 0 0;font-size:clamp(2rem,8.5vw,3rem);font-weight:400;line-height:1.25}.names span{color:var(--rose-gold);font-family:var(--serif-en);margin:0 .18em;font-size:.78em;font-style:italic;display:inline-block}.hero-date{color:var(--rose);font-family:var(--serif-en);letter-spacing:.2em;margin-top:20px;font-size:clamp(1.4rem,5vw,2rem)}.promise{color:#9d7381;font-family:var(--sans-cn);letter-spacing:.25em;margin:26px 0 0;font-size:clamp(.68rem,2.6vw,.84rem);font-weight:300}.promise b{color:var(--rose-gold);margin:0 .35em}.portrait-frame{background:#fffefce6;border:1px solid #b98b9194;border-radius:26px;width:100%;margin:clamp(38px,7vh,58px) 0 0;padding:9px;position:relative;overflow:hidden;box-shadow:0 16px 36px #7341511f}.portrait-frame img{filter:saturate(.93)contrast(.98)brightness(1.015);border-radius:19px;width:100%;height:auto;display:block}.scroll-cue{color:#62404c8c;letter-spacing:.22em;flex-direction:column;align-items:center;gap:8px;margin-top:auto;padding-top:28px;font-size:.7rem;display:inline-flex}.scroll-cue i{border-bottom:1px solid;border-right:1px solid;width:10px;height:10px;animation:1.8s ease-in-out infinite cue;transform:rotate(45deg)}.divider{grid-template-columns:1fr auto 1fr;align-items:center;gap:22px;margin:26px clamp(8px,4vw,22px) 44px;display:grid}.divider span{background:#b98b917a;height:1px}.divider i{background:#b98b91bf;width:10px;height:10px;transform:rotate(45deg)}.content-card{background:var(--paper);-webkit-backdrop-filter:blur(4px);border:1px solid #b98b9147;border-radius:28px;padding:clamp(48px,10vw,70px) clamp(28px,8vw,52px);position:relative;overflow:hidden;box-shadow:0 14px 36px #6d3e4f14}.section-heading{text-align:center}.section-heading h2{letter-spacing:.08em;margin:28px 0 0;font-size:clamp(2.3rem,10vw,3.45rem);line-height:1.2}.story-copy{font-family:var(--sans-cn);letter-spacing:.035em;margin-top:clamp(48px,10vw,68px);font-size:clamp(1rem,4.25vw,1.2rem);font-weight:300;line-height:2.05}.story-copy p{margin:0}.story-copy p+p{margin-top:30px}blockquote{text-align:center;background:#f9e8eeb8;border:1px solid #b98b914d;border-radius:22px;margin:clamp(46px,10vw,70px) 0 0;padding:clamp(58px,12vw,76px) 20px;position:relative}blockquote p{font-family:var(--serif-cn);margin:0;font-size:clamp(1.18rem,5vw,1.55rem);font-weight:300;line-height:2}.quote-mark{color:#b98b917a;font-family:var(--serif-cn);font-size:3.8rem;line-height:1;position:absolute}.quote-open{top:18px;left:20px}.quote-close{bottom:3px;right:20px}.with-love{color:#a47786;font-family:var(--serif-en);letter-spacing:.12em;text-align:center;margin:clamp(44px,11vw,68px) 0 4px;font-size:clamp(.78rem,3.3vw,.98rem);font-style:italic}.banquet-card{text-align:center}.venue-panel{background:#fffefcc7;border:1px solid #b98b9147;border-radius:22px;margin-top:clamp(46px,10vw,66px);padding:clamp(42px,9vw,60px) 22px}.venue-label{color:#a87988;letter-spacing:.45em;margin:0;font-size:.82rem;font-weight:500}.venue-panel address{font-family:var(--serif-cn);margin-top:30px;font-size:clamp(1.45rem,6.3vw,2rem);font-style:normal;line-height:1.85}.venue-rule{background:#b98b914d;width:82%;height:1px;margin:36px auto;display:block}.venue-panel time{font-family:var(--serif-cn);letter-spacing:.04em;font-size:clamp(1.15rem,5vw,1.45rem);display:block}.venue-panel>p:last-child{color:#a87988;letter-spacing:.12em;margin:16px 0 0;font-size:.95rem}.banquet-copy{margin-top:clamp(52px,12vw,78px);font-size:clamp(1rem,4.3vw,1.2rem);font-weight:300;line-height:2}.banquet-copy p{margin:0}.banquet-copy p+p{margin-top:34px}.closing{margin-top:clamp(52px,12vw,80px)}.closing>p{letter-spacing:.09em;margin:0;font-size:clamp(2rem,8vw,2.7rem)}.closing strong{color:#a57684;font-family:var(--serif-cn);letter-spacing:.1em;margin-top:26px;font-size:1.05rem;font-weight:400;display:block}.closing span{color:#ad7d8c;font-family:var(--serif-en);letter-spacing:.22em;margin-top:14px;font-size:.78rem;font-style:italic;display:block}.peony{color:#b98b9117;font-family:var(--serif-cn);pointer-events:none;font-size:6.5rem;line-height:1;position:absolute}.peony-story{bottom:10px;right:-10px}.peony-closing{color:#b98b9121;bottom:18px;left:-12px}.page-finish{color:#9b6c7ba6;font-family:var(--serif-en);text-align:center;margin:52px 0 0;font-size:1.5rem}.bamboo{opacity:.22;pointer-events:none;width:34px;height:150px;position:absolute}.bamboo-top{top:70px;right:10px}.bamboo:before{content:"";background:var(--rose-gold);width:1px;height:145px;position:absolute;top:0;left:17px;transform:rotate(5deg)}.bamboo i{border:1px solid var(--rose-gold);border-radius:100% 0;width:26px;height:13px;position:absolute}.bamboo i:first-child{top:30px;left:0;transform:rotate(18deg)}.bamboo i:nth-child(2){top:72px;left:13px;transform:scaleX(-1)rotate(15deg)}.bamboo i:nth-child(3){top:112px;left:0;transform:rotate(22deg)}.petal{z-index:2;pointer-events:none;border:1px solid #b98b9129;border-radius:100% 0;width:18px;height:10px;animation:13s ease-in-out infinite drift;position:fixed}.petal-one{top:18%;left:8%}.petal-two{animation-duration:16s;animation-delay:-6s;top:57%;right:7%}.has-motion [data-reveal]{opacity:0;transition:opacity .9s,transform .9s cubic-bezier(.2,.65,.3,1);transform:translateY(22px)}.has-motion [data-reveal].is-visible{opacity:1;transform:translateY(0)}.hero [data-reveal]:nth-of-type(2){transition-delay:80ms}.hero [data-reveal]:nth-of-type(3){transition-delay:.16s}@keyframes cue{0%,to{opacity:.35;transform:translateY(0)rotate(45deg)}50%{opacity:.8;transform:translateY(5px)rotate(45deg)}}@keyframes drift{0%,to{transform:translate(0,0)rotate(12deg)}50%{transform:translate(12px,28px)rotate(48deg)}}@media (width>=641px){.invitation-shell{padding:32px 0}.invitation{border-radius:32px}.hero{min-height:920px}}@media (width<=380px){.invitation{padding-inline:17px}.invitation:before{inset-inline:10px}.hero h1{letter-spacing:.08em}.names{font-size:1.9rem}.content-card{padding-inline:23px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.has-motion [data-reveal]{opacity:1;transform:none}}
