
:root{--cream:#fff3f2;--paper:#fffaf6;--ink:#7b2d42;--muted:#9a6370;--rose:#f2c6d5;--pink:#f8d9e2;--red:#b82b48;--line:rgba(123,45,66,.22);--serif:"Songti SC","STSong","Noto Serif CJK SC","SimSun",serif;--sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:20px}body{margin:0;background:#f2e0e5;color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased}button,a{-webkit-tap-highlight-color:transparent}button,input{font:inherit}button{cursor:pointer}button:disabled{cursor:default}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible{outline:3px solid #d45279;outline-offset:5px}img{display:block;max-width:100%}button{color:inherit}svg{display:block}button svg,a svg{pointer-events:none}.hidden,[hidden]{display:none!important}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.desktop-aside{display:none}.invite{max-width:480px;margin:auto;position:relative;background:var(--cream);box-shadow:0 0 70px #5c21380e;overflow:hidden}.chapter{position:relative;isolation:isolate;container-type:inline-size}.chapter:after{content:"";position:absolute;inset:0;background-image:url("assets/paper-grain.png");opacity:.7;pointer-events:none;z-index:20}.section-inner{position:relative;z-index:2}.eyebrow{font-size:10px;font-weight:500;letter-spacing:.21em;text-transform:uppercase}.folio{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:0 30px;line-height:1.5}.folio>span:last-child{font-family:Georgia,serif;font-size:12px;letter-spacing:.12em}.thin-rule{height:1px;background:var(--line);margin:16px 30px 0}.title{font-family:var(--serif);font-weight:700;letter-spacing:.015em;margin:0;line-height:1.4}.body-copy{font-size:13px;line-height:2.1;letter-spacing:.1em;margin:0}.hand{font-family:Georgia,var(--serif);font-style:italic}.icon{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.flower{width:70px;height:70px;color:var(--red)}.bow{width:98px;height:76px;color:var(--red)}.doodle{position:absolute;z-index:5;pointer-events:none}.torn-end{position:absolute;left:-2%;bottom:-1px;width:104%;height:22px;z-index:25;background:var(--next,var(--cream));clip-path:polygon(0 36%,2% 25%,3% 41%,5% 23%,7% 45%,9% 32%,11% 56%,13% 27%,15% 31%,17% 11%,19% 38%,21% 28%,23% 53%,25% 34%,27% 42%,29% 12%,31% 37%,33% 25%,35% 54%,37% 32%,39% 46%,41% 25%,43% 42%,45% 19%,47% 45%,49% 30%,51% 43%,53% 21%,55% 47%,57% 34%,59% 52%,61% 24%,63% 42%,65% 20%,67% 44%,69% 36%,71% 61%,73% 42%,75% 23%,77% 44%,79% 16%,81% 41%,83% 28%,85% 47%,87% 30%,89% 44%,91% 14%,93% 31%,95% 22%,97% 39%,99% 16%,100% 33%,100% 100%,0 100%)}
.paper{background:var(--paper);box-shadow:1px 8px 18px #6928411a}.torn-photo{clip-path:polygon(1% 1%,12% 0,20% .7%,31% 0,40% .4%,53% 0,62% .8%,73% 0,82% .8%,92% 0,99% 1%,100% 8%,99.3% 20%,100% 33%,99.1% 41%,100% 50%,99.4% 63%,100% 75%,99.2% 90%,100% 98.5%,92% 99.6%,84% 99%,71% 100%,64% 99.2%,55% 100%,46% 99.1%,34% 100%,24% 99%,14% 100%,5% 99.1%,0 100%,.6% 92%,0 83%,.7% 71%,0 62%,.9% 50%,0 42%,.7% 28%,0 17%,.8% 8%)}.photo-button{display:block;padding:0;border:0;background:transparent;text-align:inherit;position:relative}.photo-button img{width:100%;height:100%;object-fit:cover}.tape{position:absolute;width:85px;height:25px;left:50%;top:-10px;transform:translateX(-50%) rotate(-7deg);background:repeating-linear-gradient(100deg,#dba1b562 0 2px,#ecc2cb85 2px 5px);opacity:.9;clip-path:polygon(4% 0,100% 4%,97% 19%,100% 34%,96% 51%,99% 73%,96% 99%,1% 100%,3% 80%,0 62%,4% 42%,1% 20%);z-index:5}.photo-label{font-family:var(--serif);font-size:12px;line-height:1.5;text-align:center;letter-spacing:.05em}.section-number{font:italic 13px Georgia,serif;letter-spacing:.06em}.reveal{opacity:1;transform:none}.js .reveal{opacity:0;transform:translateY(22px);transition:opacity .7s ease,transform .8s cubic-bezier(.2,.6,.25,1)}.js .reveal.in{opacity:1;transform:translateY(0)}.progress{position:fixed;top:0;left:0;height:3px;background:var(--red);width:0;z-index:100;transition:width .12s linear}.mini-heart{color:var(--red);font-family:Georgia,serif;font-size:14px}

/* 01 — A real portrait, a paper garden, and room to breathe. */
.cover{height:820px;background:var(--cream);--next:#fff1f0}.cover .folio{padding-top:27px}.cover .thin-rule{margin-top:14px}.cover-heading{position:absolute;top:86px;left:31px;z-index:7}.cover-kicker{font-family:var(--serif);font-size:27px;line-height:1.3;letter-spacing:.12em}.cover h1{font-family:var(--serif);font-size:68px;line-height:1.28;font-weight:800;letter-spacing:-.065em;margin:2px 0 0}.cover h1 span{position:relative;display:inline-block}.cover h1 span:after{content:"";position:absolute;left:1px;bottom:2px;width:96%;height:12px;border-top:3px solid #dc6c8c;border-radius:50%;transform:rotate(-4deg);opacity:.85}.cover-subtitle{margin-top:15px;font-size:10px;letter-spacing:.27em}.cover .bow{right:28px;top:87px;transform:rotate(10deg);width:92px;height:76px}.cover-star{right:70px;top:225px;color:#c34868;transform:rotate(12deg)}.cover-date{position:absolute;right:31px;top:250px;text-align:center;z-index:6;transform:rotate(8deg)}.cover-date strong{display:block;font:italic 40px Georgia,serif;line-height:1}.cover-date span{font-size:9px;letter-spacing:.14em}.cover-halo{position:absolute;left:20%;top:312px;width:72%;height:370px;border-radius:50% 50% 44% 42%;background:#eeafc4;transform:rotate(7deg)}.cover-scrap{position:absolute;left:-18px;top:497px;width:218px;height:180px;background:#f7edf0;transform:rotate(-12deg);clip-path:polygon(0 6%,13% 0,24% 8%,37% 2%,53% 7%,71% 0,87% 7%,100% 3%,98% 97%,84% 94%,68% 100%,48% 94%,35% 99%,17% 92%,0 98%)}.cover-scribble{position:absolute;right:20px;top:443px;font:italic 12px/1.7 Georgia,serif;transform:rotate(9deg);z-index:3}.cover-portrait{position:absolute;left:calc(50% - 184px);top:313px;width:368px;height:447.5px;z-index:4;filter:drop-shadow(0 2px 1px #75354e16)}.cover-portrait img{width:100%;height:100%;object-fit:contain}.cover-flower{left:24px;top:331px;width:47px;height:47px;transform:rotate(-16deg)}.name-slip{position:absolute;left:30px;right:30px;top:710px;z-index:8;display:flex;align-items:center;justify-content:center;gap:18px;height:58px;background:var(--paper);transform:rotate(-2deg);filter:drop-shadow(0 4px 3px #672c4013);clip-path:polygon(0 6%,11% 2%,24% 7%,34% 0,47% 5%,60% 0,72% 6%,86% 0,99% 5%,100% 88%,88% 98%,76% 92%,62% 100%,50% 95%,38% 100%,26% 94%,11% 100%,0 93%)}.name-slip b{font:600 23px var(--serif);letter-spacing:.12em}.name-slip .amp{font:italic 28px Georgia,serif;color:var(--red)}.open-invite{position:absolute;left:0;bottom:25px;width:100%;display:flex;justify-content:center;align-items:center;gap:10px;font-size:10px;letter-spacing:.13em;z-index:30}.open-invite .icon{width:13px;height:13px;animation:nod 2.7s ease-in-out infinite}.cover .section-number{position:absolute;right:31px;bottom:28px;z-index:30}@keyframes nod{0%,100%{transform:translateY(0)}50%{transform:translateY(4px)}}

/* 02 — Cream and rose story spread. */
.story{height:875px;background:#fff1f0;--next:#f5d4df}.story .folio{padding-top:34px}.story .title{font-size:36px;position:absolute;left:30px;top:91px;z-index:7}.story .title em{font-style:normal;position:relative}.story .title em:after{content:"";position:absolute;bottom:-8px;left:0;width:95%;height:12px;border-top:2px solid #c95074;border-radius:50%;transform:rotate(-3deg)}.story .flower{right:29px;top:124px;width:64px;height:64px;transform:rotate(13deg)}.story-a{position:absolute;left:24px;top:249px;width:247px;height:405px;padding:8px 8px 30px;transform:rotate(-5deg)}.story-a .photo-button{width:100%;height:100%}.story-a img{object-position:50% 50%}.story-a .photo-label{position:absolute;bottom:7px;left:0;width:100%;font-size:11px}.story-b{position:absolute;right:22px;top:472px;width:191px;height:297px;padding:7px 7px 28px;transform:rotate(7deg);z-index:5}.story-b .photo-button{width:100%;height:100%}.story-b img{object-position:50% 48%}.story-b .photo-label{position:absolute;bottom:6px;left:0;width:100%;font-size:11px}.story .side-note{position:absolute;right:35px;top:323px;writing-mode:vertical-rl;font-size:10px;letter-spacing:.16em;line-height:2}.story-dash{position:absolute;left:38px;top:707px;width:84px;height:45px;color:#b9768d}.story .body-copy{position:absolute;left:31px;bottom:46px;font-size:12px}.story .little-caption{position:absolute;left:30px;top:219px;font-size:9px;letter-spacing:.18em}

/* 03 — Pink photograph notebook. */
.moments{height:910px;background:#f5d4df;--next:#edbccd}.moments .folio{padding-top:34px}.moments .title{font-size:35px;position:absolute;left:31px;top:91px}.moments .short-note{position:absolute;left:31px;top:202px;font-size:10px;letter-spacing:.12em}.moments-a{position:absolute;right:22px;top:260px;width:270px;height:405px;transform:rotate(3deg);filter:drop-shadow(0 6px 5px #71334b1c)}.moments-a .photo-button{width:100%;height:100%}.moments-a img{object-position:center}.moments-b{position:absolute;left:21px;top:227px;width:142px;height:213px;transform:rotate(-9deg);padding:6px 6px 23px;z-index:6}.moments-b .photo-button{width:100%;height:100%}.moments-b img{object-position:50% 55%}.moments-b .photo-label{position:absolute;left:0;bottom:5px;width:100%;font:italic 11px Georgia,serif}.moments-c{position:absolute;left:30px;top:621px;width:153px;height:229px;padding:7px 7px 24px;transform:rotate(-5deg);z-index:6}.moments-c .photo-button{width:100%;height:100%}.moments-c img{object-position:50% 45%}.moments-c .photo-label{position:absolute;left:0;bottom:6px;width:100%;font-size:10px}.moments .flower{right:29px;top:154px;width:50px;height:50px}.moments .hand-note{position:absolute;right:31px;top:720px;width:145px;font-size:15px;line-height:1.9;letter-spacing:.09em}.moments .hand-note:before{content:"";width:26px;height:1px;background:#c65878;display:block;margin-bottom:18px}.moments .smile-note{position:absolute;right:32px;top:678px;font:italic 12px Georgia,serif;transform:rotate(-3deg)}

/* 04 — Quiet magazine page. */
.forever{height:815px;background:#edbccd;color:#fff7f7;--next:#b82b48}.forever .folio{padding-top:33px;opacity:.8}.forever .title{font-size:35px;position:absolute;left:30px;top:92px;line-height:1.4}.forever .side-word{position:absolute;right:33px;top:116px;writing-mode:vertical-rl;font:italic 13px Georgia,serif;letter-spacing:.08em;opacity:.75}.forever-photo{position:absolute;left:31px;right:31px;top:224px;height:458px;background:#fae9ef;padding:8px 8px 27px;transform:rotate(-1deg)}.forever-photo .photo-button{width:100%;height:100%}.forever-photo img{object-position:50% 42%}.forever-photo .photo-label{position:absolute;left:0;bottom:6px;width:100%;color:#7b2d42;font:10px Georgia,serif;letter-spacing:.2em}.forever .body-copy{position:absolute;left:30px;top:719px;font-size:12px;line-height:2.2}.forever .rings{right:35px;top:726px;width:49px;height:35px;color:#a85572}

/* 05 — A little red, a lot of joy. */
.joy{height:972px;background:#b82b48;color:#fff7f4;--next:#fff3f2}.joy .folio{padding-top:35px;color:#f9ced7}.joy .title{font-size:46px;position:absolute;left:27px;top:101px;letter-spacing:.02em;z-index:4}.joy .joy-seal{position:absolute;right:27px;top:84px;transform:rotate(11deg);width:56px;height:65px;display:flex;justify-content:center;align-items:center;border:1px solid #ffdde798;font:40px var(--serif);border-radius:2px;color:#fce0e6}.joy .joy-subtitle{position:absolute;left:30px;top:174px;font-size:10px;letter-spacing:.15em}.joy-a{position:absolute;left:22px;top:229px;width:326px;height:239px;padding:7px 7px 25px;transform:rotate(-5deg);background:#fff1ef;color:#982c46}.joy-a .photo-button{height:100%;width:100%}.joy-a img{object-position:50% 35%}.joy-a .photo-label{position:absolute;bottom:6px;left:0;width:100%;font-size:10px;letter-spacing:.13em}.joy-b{position:absolute;right:25px;top:448px;width:309px;height:226px;padding:7px 7px 25px;transform:rotate(4deg);background:#fff1ef;color:#982c46}.joy-b .photo-button{height:100%;width:100%}.joy-b img{object-position:50% 45%}.joy-b .photo-label{position:absolute;bottom:6px;left:0;width:100%;font-size:10px;letter-spacing:.08em}.joy .spark{right:21px;top:354px;width:29px;height:44px;color:#ffd9e4}.film-strip{position:absolute;left:0;right:0;top:711px;display:flex;gap:11px;overflow-x:auto;padding:12px 29px 17px;scroll-snap-type:x mandatory;scrollbar-width:none;overscroll-behavior-x:contain}.film-strip::-webkit-scrollbar{display:none}.film-item{flex:0 0 112px;height:154px;background:#f3c7d2;padding:4px 4px 18px;position:relative;scroll-snap-align:center;color:#892e4a}.film-item .photo-button{width:100%;height:100%}.film-item img{object-position:center}.film-item figcaption{position:absolute;bottom:4px;left:6px;right:6px;display:flex;justify-content:space-between;font:7px Georgia,serif;letter-spacing:.14em}.film-item{margin:0}.joy .film-note{position:absolute;left:30px;top:690px;font-size:9px;letter-spacing:.12em;color:#ffd0dd}.joy .body-copy{position:absolute;left:0;right:0;text-align:center;bottom:42px;font-size:12px}.film-controls{position:absolute;top:680px;right:21px;display:flex;gap:4px;z-index:5}.film-controls button{width:34px;height:32px;border:0;background:transparent;color:#ffe1e9;display:grid;place-items:center}.film-controls svg{width:16px;height:16px}

/* 06 — The practical part, dressed as a paper ticket. */
.details{min-height:900px;background:var(--cream);--next:#f7dce5;padding:35px 0 61px}.details .folio{padding-top:0}.details .section-inner{padding:43px 27px 0}.details .title{font-size:36px;line-height:1.45}.details .title em{font-style:normal;position:relative;display:inline-block}.details .title em:after{content:"";position:absolute;left:0;bottom:-2px;width:100%;height:10px;border-top:2px solid #d17090;border-radius:50%;transform:rotate(-4deg)}.details .bow{right:27px;top:85px;width:96px;height:82px;color:#b4496d;transform:rotate(6deg)}.details .intro{font-size:12px;letter-spacing:.05em;line-height:2.1;margin:20px 0 25px}.ticket{background:#fffaf7;border:1px solid #d296aa;box-shadow:2px 7px 0 #edbecd;padding:0 22px;position:relative}.ticket-top{display:flex;justify-content:space-between;align-items:center;padding:21px 0 18px;border-bottom:1px solid #d6a5b5}.ticket-top>span:first-child{font-size:12px;letter-spacing:.15em}.ticket-top>span:last-child{font:italic 11px Georgia,serif}.ticket-main{padding:18px 0 23px;position:relative}.ticket-date{font:74px/.95 Georgia,serif;letter-spacing:-.075em;display:flex;align-items:baseline;gap:6px}.ticket-date .dot{font-size:35px;align-self:center;line-height:1}.ticket-year{position:absolute;right:0;top:24px;font:13px/1.6 Georgia,serif;letter-spacing:.08em;text-align:right}.ticket-lunar{font-size:11px;line-height:1.9;letter-spacing:.065em;margin-top:13px}.ticket-time{margin-top:20px;display:flex;align-items:center;justify-content:space-between;border-top:1px solid #eac6d2;padding-top:17px}.ticket-time b{font:34px Georgia,serif;letter-spacing:-.04em}.ticket-time span{font-size:11px;letter-spacing:.1em}.ticket-perforation{position:relative;border-top:1px dashed #c889a0;margin:0 -22px}.ticket-perforation:before,.ticket-perforation:after{content:"";position:absolute;top:-9px;width:17px;height:17px;border-radius:50%;background:var(--cream);border:1px solid #d296aa}.ticket-perforation:before{left:-9px;border-left-color:transparent;border-top-color:transparent;transform:rotate(-45deg)}.ticket-perforation:after{right:-9px;border-left-color:transparent;border-top-color:transparent;transform:rotate(135deg)}.ticket-place{padding:23px 0}.ticket-place .eyebrow{font-size:9px;opacity:.6}.venue-name{font-size:21px;font-family:var(--serif);font-weight:600;letter-spacing:.03em;line-height:1.65;margin:10px 0 7px}.venue-hall{font-size:14px;line-height:1.9;letter-spacing:.02em}.venue-address{font-size:12px;line-height:1.9;color:#995b71;margin:7px 0 0}.ticket-bottom{border-top:1px solid #e7c1ce;padding:15px 0;display:flex;align-items:center;justify-content:space-between;font-size:9px;letter-spacing:.12em}.ticket-bottom b{font:italic 11px Georgia,serif;letter-spacing:.03em}.details-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:29px}.action-btn{min-height:47px;padding:11px 8px;display:flex;justify-content:center;align-items:center;gap:8px;font-size:12px;letter-spacing:.04em;border:1px solid #bb7b91;border-radius:2px;background:transparent;color:var(--ink)}.action-btn.primary{background:#ad2f52;color:#fff9f7;border-color:#ad2f52}.action-btn .icon{width:16px;height:16px}.calendar-btn{margin:18px auto 0;border:0;background:transparent;display:flex;align-items:center;justify-content:center;gap:7px;font-size:11px;padding:10px 18px;letter-spacing:.05em}.calendar-btn .icon{width:15px;height:15px}.countdown{font-size:10px;text-align:center;margin-top:12px;letter-spacing:.08em;color:#975a71}.countdown b{font:18px Georgia,serif;margin:0 5px;color:#942f50}

/* 07 — The invitation ends with you. */
.ending{height:817px;background:#f7dce5;padding:36px 30px 125px}.ending .eyebrow{text-align:center;font-size:9px}.ending .flower{width:46px;height:46px;margin:27px auto 0;color:#c54e73}.ending .title{font-size:29px;line-height:1.8;text-align:center;margin-top:22px;font-weight:500;letter-spacing:.04em}.ending .title strong{font-weight:700}.ending-photo{position:relative;width:100%;margin:31px 0 0;height:223px;transform:rotate(-3deg);padding:7px 7px 29px}.ending-photo .photo-button{width:100%;height:100%}.ending-photo img{object-position:50% 50%}.ending-photo .photo-label{position:absolute;bottom:7px;left:0;width:100%;font-size:12px}.ending .signoff{display:flex;justify-content:center;align-items:center;gap:17px;font-family:var(--serif);font-size:20px;margin-top:34px}.ending-date{font:13px Georgia,serif;letter-spacing:.15em;text-align:center;margin-top:12px}.ending-footer{font-size:9px;letter-spacing:.1em;text-align:center;margin:27px 0 0;opacity:.7}.ending-share{display:flex;align-items:center;justify-content:center;gap:7px;font-size:11px;border:0;border-bottom:1px solid #cf99ad;background:transparent;margin:17px auto 0;padding:8px 1px 7px}.ending-share .icon{width:14px;height:14px}
.bottom-bar{position:fixed;left:50%;bottom:0;transform:translateX(-50%);width:100%;max-width:480px;background:#fff7f8f5;border-top:1px solid #e8c5d1;z-index:70;padding:9px 19px calc(9px + env(safe-area-inset-bottom,0px));display:flex;gap:9px;align-items:center}.bottom-date{flex:0 0 64px;display:flex;flex-direction:column;align-items:center;border-right:1px solid #e9c5d2;margin-right:3px;padding-right:9px}.bottom-date b{font:21px Georgia,serif;letter-spacing:-.035em}.bottom-date small{font-size:7px;letter-spacing:.12em;margin-top:3px}.bottom-bar .action-btn{flex:1;min-height:42px;font-size:11px;padding:8px 6px;gap:6px}
.dialog-shade{position:fixed;inset:0;background:#542237b8;z-index:200;display:flex;align-items:flex-end;justify-content:center;padding:14px 14px max(14px,env(safe-area-inset-bottom));backdrop-filter:blur(3px)}.dialog-card{width:100%;max-width:446px;background:var(--cream);position:relative;box-shadow:0 10px 60px #541b3340;padding:31px 24px 27px;border-radius:3px;max-height:88vh;overflow:auto}.dialog-card h2{font:600 25px var(--serif);margin:0 45px 19px 0;line-height:1.6}.dialog-card p{font-size:13px;line-height:1.9;margin:0 0 16px}.dialog-card .modal-hint{font-size:11px;color:#966074;line-height:1.85;margin-top:15px;margin-bottom:0}.dialog-close{position:absolute;right:10px;top:10px;width:44px;height:44px;background:transparent;border:0;display:grid;place-items:center}.dialog-close .icon{width:22px;height:22px}.dialog-card .details-actions{margin-top:19px}.dialog-card .action-btn{font-size:12px}.dialog-card .copy-field{width:100%;border:1px solid #c793a6;background:#fffafa;padding:12px 10px;font-size:12px;border-radius:2px;line-height:1.8;color:var(--ink);resize:none;font-family:var(--sans)}.lightbox{position:fixed;inset:0;background:#fae6eefb;z-index:220;display:flex;align-items:center;justify-content:center;flex-direction:column;padding:66px 0 60px;color:#732d45}.lightbox img{max-width:100%;max-height:calc(100dvh - 154px);object-fit:contain;min-height:0;width:auto;height:auto;touch-action:pan-x pan-y pinch-zoom}.lightbox .dialog-close{position:fixed;color:white;top:max(10px,env(safe-area-inset-top));right:11px}.lightbox-tools{position:absolute;bottom:max(15px,env(safe-area-inset-bottom));left:0;right:0;display:flex;align-items:center;justify-content:center;gap:40px;font-size:11px;letter-spacing:.08em}.lightbox-tools button{width:44px;height:44px;display:grid;place-items:center;border:1px solid #b7658088;color:white;background:transparent;border-radius:50%}.lightbox-tools svg{width:20px;height:20px}.lightbox-caption{font-size:10px;letter-spacing:.1em;margin-top:13px;opacity:.65}.toast{position:fixed;left:50%;bottom:100px;transform:translateX(-50%);z-index:400;background:#8b2c4df5;color:#fff6f8;padding:13px 20px;max-width:calc(100% - 36px);font-size:12px;line-height:1.6;text-align:center;box-shadow:0 4px 30px #0002;border-radius:3px;pointer-events:none}.share-arrow{margin:8px 8px 12px auto;width:49px;height:46px;color:#ca4c75}
@media(min-width:481px){.cover-portrait{left:calc(50% - 205px);width:410px;height:499px;top:286px}.cover{height:861px}.cover-halo{top:308px}.name-slip{top:752px}.cover-heading{left:37px}.cover h1{font-size:75px}.cover-date{right:43px;top:250px}.story-a{width:288px;height:457px}.story-b{width:220px;height:337px;top:457px}.story{height:910px}.moments-a{width:315px;height:471px;right:26px;top:230px}.moments-b{left:25px;width:169px;height:249px;top:225px}.moments-c{width:174px;height:254px;top:619px}.moments .hand-note{right:46px;top:758px;width:181px}.moments .smile-note{top:715px;right:36px}.moments{height:936px}.forever-photo{left:40px;right:40px;height:497px;top:220px}.forever{height:850px}.forever .body-copy{top:752px}.forever .rings{top:757px}.joy-a{width:374px;height:270px;left:30px}.joy-b{width:363px;height:259px;top:465px;right:32px}.joy .film-note{top:736px}.film-controls{top:726px}.film-strip{top:756px}.joy{height:1010px}.ending-photo{height:258px}.ending{height:853px}.ending .title{font-size:31px}.ticket-date{font-size:88px}.ticket-place{padding:25px 0}.details .section-inner{padding-left:36px;padding-right:36px}.details{padding-bottom:70px}}
@media(max-width:374px){.folio{padding-left:24px;padding-right:24px}.cover{height:775px}.cover-heading{left:24px;top:84px}.cover h1{font-size:62px}.cover .bow{right:22px;width:80px}.cover-date{right:24px;top:232px}.cover-date strong{font-size:36px}.cover-portrait{left:calc(50% - 170px);top:305px;width:340px;height:413px}.cover-halo{top:306px;height:342px}.name-slip{left:24px;right:24px;top:671px;height:56px}.cover-flower{left:19px;top:311px;width:41px}.cover-star{right:55px;top:207px}.cover-subtitle{font-size:9px}.story{height:829px}.story .title{left:24px;font-size:33px}.story-a{left:17px;width:229px;height:376px;top:241px}.story-b{right:16px;width:176px;height:274px;top:452px}.story-dash{top:670px}.story .body-copy{left:24px}.story .flower{right:22px;width:54px}.story .side-note{right:22px;top:303px}.moments .title{left:24px;font-size:33px}.moments{height:886px}.moments-a{width:250px;height:375px;right:19px}.moments-b{left:16px;width:130px;height:196px}.moments-c{left:23px;top:600px;width:144px;height:218px}.moments .hand-note{right:21px;top:694px;width:133px;font-size:14px}.moments .smile-note{top:654px;right:24px}.forever{height:781px}.forever .title{left:25px;font-size:32px}.forever-photo{left:25px;right:25px;height:428px;top:215px}.forever .body-copy{left:25px;top:682px;font-size:11px}.forever .rings{top:695px}.joy .title{font-size:42px;left:24px}.joy .joy-seal{right:22px;width:47px;height:55px;font-size:34px}.joy-a{width:299px;height:220px;left:18px;top:223px}.joy-b{width:281px;height:208px;right:22px;top:431px}.film-strip{top:679px;padding-left:24px}.joy .film-note{top:659px;left:24px}.film-controls{top:649px}.joy{height:936px}.details .section-inner{padding-left:24px;padding-right:24px}.ticket{padding:0 18px}.ticket-perforation{margin:0 -18px}.ticket-date{font-size:68px}.venue-name{font-size:19px}.ending{padding-left:24px;padding-right:24px;height:808px}.ending .title{font-size:27px}.ending-photo{height:205px}.bottom-bar{padding-left:12px;padding-right:12px}.bottom-date{flex-basis:59px}.bottom-bar .action-btn{font-size:10px}}
@media(max-width:340px){.cover-portrait{width:307px;height:373px;left:calc(50% - 153.5px);top:298px}.cover{height:730px}.name-slip{top:634px}.cover h1{font-size:55px}.cover .bow{width:69px;right:21px;top:79px}.cover-halo{top:299px;height:310px}.cover-date{right:24px;top:232px}.cover-flower{top:293px;width:35px}.story-a{width:207px;height:340px}.story-b{width:160px;height:249px;top:436px}.story{height:794px}.story .flower{width:44px;right:18px}.story .side-note{right:14px}.moments-a{width:222px;height:333px;right:18px;top:269px}.moments-b{width:116px;height:177px;top:233px}.moments-c{width:127px;height:198px;top:588px}.moments .hand-note{width:124px;right:19px;font-size:13px;top:672px}.moments .smile-note{top:622px}.moments{height:850px}.joy-a{width:267px;height:198px}.joy-b{width:254px;height:188px;top:406px}.joy .title{font-size:37px}.film-strip{top:644px}.joy .film-note{top:624px}.film-controls{top:614px}.joy{height:897px}.ticket{padding:0 15px}.ticket-date{font-size:62px}.ticket-year{font-size:11px}.ticket-lunar{font-size:10px}.venue-name{font-size:18px}.ticket-top>span:first-child{font-size:11px}.ticket-perforation{margin:0 -15px}.details .title{font-size:32px}.details .bow{width:75px}.ending .title{font-size:24px}.ending-photo{height:185px}.ending{height:772px}.bottom-date{flex-basis:49px}.bottom-bar .action-btn{gap:4px}}
@media(min-width:1024px){.desktop-aside{display:block;position:fixed;top:20%;left:calc(50% - 468px);width:174px}.desktop-aside .eyebrow{font-size:9px;letter-spacing:.16em}.desktop-aside h2{font:500 29px/1.7 var(--serif);margin:25px 0 24px}.desktop-aside p{font-size:10px;line-height:2;color:#9c6178;letter-spacing:.08em}.desktop-aside .flower{width:36px;height:36px;margin-top:32px;opacity:.8}.desktop-nav{left:auto;right:calc(50% - 427px);width:118px;top:31%}.desktop-nav nav{display:flex;flex-direction:column;gap:21px}.desktop-nav a{font-size:10px;letter-spacing:.1em;display:flex;align-items:center;gap:12px;opacity:.6}.desktop-nav a:before{content:"";width:14px;height:1px;background:#c08a9e;transition:width .2s}.desktop-nav a.active{opacity:1}.desktop-nav a.active:before{width:27px;background:var(--red)}.desktop-nav .aside-bottom{margin-top:43px;font:italic 11px Georgia,serif;color:#a4667f}.dialog-shade{align-items:center}.dialog-card{max-height:85vh}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.js .reveal{opacity:1;transform:none;transition:none}.open-invite .icon{animation:none}.progress{transition:none}*{animation-duration:.01ms!important}}

.cover-star{width:26px;height:38px}

/* Visual review refinements: lighter paper grain, safe cue placement, natural torn edge. */
.chapter:after{opacity:.36}
.torn-end{height:15px;clip-path:polygon(0.000% 17.00%, 0.543% 30.86%, 1.087% 43.00%, 1.630% 41.37%, 2.174% 34.50%, 2.717% 39.46%, 3.261% 43.29%, 3.804% 41.17%, 4.348% 35.52%, 4.891% 33.75%, 5.435% 37.95%, 5.978% 31.61%, 6.522% 29.57%, 7.065% 37.58%, 7.609% 35.06%, 8.152% 30.69%, 8.696% 25.88%, 9.239% 30.48%, 9.783% 37.08%, 10.326% 36.12%, 10.870% 30.66%, 11.413% 28.48%, 11.957% 27.08%, 12.500% 33.38%, 13.043% 43.47%, 13.587% 43.16%, 14.130% 39.13%, 14.674% 36.33%, 15.217% 32.51%, 15.761% 29.07%, 16.304% 26.33%, 16.848% 26.03%, 17.391% 42.37%, 17.935% 44.34%, 18.478% 32.88%, 19.022% 30.66%, 19.565% 37.39%, 20.109% 37.32%, 20.652% 36.55%, 21.196% 37.29%, 21.739% 34.16%, 22.283% 29.44%, 22.826% 36.50%, 23.370% 36.28%, 23.913% 27.01%, 24.457% 24.24%, 25.000% 28.32%, 25.543% 29.32%, 26.087% 30.33%, 26.630% 33.65%, 27.174% 34.76%, 27.717% 38.27%, 28.261% 42.92%, 28.804% 42.09%, 29.348% 34.74%, 29.891% 36.65%, 30.435% 37.26%, 30.978% 44.62%, 31.522% 48.15%, 32.065% 35.97%, 32.609% 21.64%, 33.152% 20.75%, 33.696% 32.52%, 34.239% 38.81%, 34.783% 31.30%, 35.326% 30.43%, 35.870% 30.88%, 36.413% 35.29%, 36.957% 44.20%, 37.500% 44.27%, 38.043% 45.33%, 38.587% 35.71%, 39.130% 38.44%, 39.674% 38.58%, 40.217% 30.98%, 40.761% 35.28%, 41.304% 35.25%, 41.848% 36.37%, 42.391% 42.90%, 42.935% 41.71%, 43.478% 35.00%, 44.022% 38.06%, 44.565% 37.15%, 45.109% 34.22%, 45.652% 37.02%, 46.196% 39.40%, 46.739% 42.53%, 47.283% 44.43%, 47.826% 36.46%, 48.370% 34.54%, 48.913% 35.26%, 49.457% 37.53%, 50.000% 43.31%, 50.543% 45.59%, 51.087% 41.05%, 51.630% 40.88%, 52.174% 40.96%, 52.717% 35.41%, 53.261% 33.49%, 53.804% 37.97%, 54.348% 37.30%, 54.891% 36.90%, 55.435% 37.42%, 55.978% 35.11%, 56.522% 43.38%, 57.065% 44.94%, 57.609% 40.44%, 58.152% 40.48%, 58.696% 40.92%, 59.239% 34.31%, 59.783% 30.09%, 60.326% 41.96%, 60.870% 44.80%, 61.413% 35.40%, 61.957% 37.91%, 62.500% 42.35%, 63.043% 43.17%, 63.587% 40.45%, 64.130% 35.92%, 64.674% 30.32%, 65.217% 30.51%, 65.761% 33.50%, 66.304% 36.68%, 66.848% 40.00%, 67.391% 38.42%, 67.935% 34.35%, 68.478% 30.91%, 69.022% 34.43%, 69.565% 24.50%, 70.109% 26.06%, 70.652% 35.78%, 71.196% 34.27%, 71.739% 30.94%, 72.283% 41.33%, 72.826% 40.04%, 73.370% 39.23%, 73.913% 39.33%, 74.457% 44.30%, 75.000% 44.73%, 75.543% 35.41%, 76.087% 21.63%, 76.630% 22.44%, 77.174% 27.80%, 77.717% 35.40%, 78.261% 38.88%, 78.804% 33.77%, 79.348% 33.32%, 79.891% 32.00%, 80.435% 32.52%, 80.978% 37.57%, 81.522% 33.83%, 82.065% 35.11%, 82.609% 34.65%, 83.152% 34.78%, 83.696% 40.61%, 84.239% 36.71%, 84.783% 32.55%, 85.326% 31.06%, 85.870% 38.37%, 86.413% 42.87%, 86.957% 46.28%, 87.500% 43.71%, 88.043% 39.35%, 88.587% 34.70%, 89.130% 36.21%, 89.674% 39.83%, 90.217% 39.61%, 90.761% 34.96%, 91.304% 34.33%, 91.848% 40.99%, 92.391% 35.03%, 92.935% 30.09%, 93.478% 31.34%, 94.022% 33.40%, 94.565% 41.94%, 95.109% 48.23%, 95.652% 36.13%, 96.196% 27.69%, 96.739% 32.54%, 97.283% 30.80%, 97.826% 29.49%, 98.370% 30.47%, 98.913% 38.32%, 99.457% 39.70%, 100.000% 28.70%,100% 100%,0 100%)}
.open-invite{top:276px;bottom:auto;left:31px;width:auto;justify-content:flex-start;font-size:9px}
.moments .short-note{margin:0}
.moments-b{top:247px}
@media(max-width:480px){
 .moments-a{top:281px;height:390px;width:260px}
 .moments-c{top:646px;height:219px;width:146px}
 .moments .smile-note{top:685px}
 .moments .hand-note{top:737px}
}
@media(min-width:481px){
 .open-invite{top:263px;left:37px}
 .moments-a{top:260px}
 .moments-c{top:646px}
}
@media(max-width:374px){
 .open-invite{top:266px;left:24px}
 .moments-a{top:275px;width:244px;height:366px}
 .moments-c{top:618px;width:140px;height:214px}
 .moments .smile-note{top:658px}
 .moments .hand-note{top:709px}
}
@media(max-width:340px){
 .open-invite{top:263px;font-size:8px}
 .moments-a{width:222px;height:333px}
 .moments-c{top:596px;width:127px;height:198px}
 .moments .smile-note{top:628px}
 .moments .hand-note{top:681px}
}

.bottom-bar .action-btn{min-height:44px}

/* V2：红粉主题。新娘头纱照升级为主图；三张原片用透明人物素材替换。 */
body[data-edition="rose-v2"] { background:#f2e0e5; }
.cover { background:#f9dce5; }
.cover-halo { background:#eeafc4; }
.cover-scrap { background:#fff4ee; }
.cover .name-slip { background:#fff9f6; }
.title,.cover-heading,.cover-date { color:var(--ink); }
.joy .title { color:#fff5f3; }

/* 花园合照：去掉相框和绿色背景，做越出纸张的双人贴纸。 */
#story .story-a { width:64%; height:auto; padding:8px 8px 28px; }
#story .story-a .photo-button { aspect-ratio:853/1280; height:auto; }
#story .story-b { top:470px; right:9px; width:66%; height:auto; padding:0; transform:rotate(2deg); background:none; box-shadow:none; }
#story .story-b:before { content:""; position:absolute; z-index:-1; left:14%; right:3%; top:15%; bottom:15px; border-radius:48% 46% 17% 22%; background:#f2bfd0; transform:rotate(-9deg); }
#story .story-b .photo-button { width:100%; height:auto; filter:drop-shadow(1px 1px 0 #fff9f4) drop-shadow(-1px -1px 0 #fff9f4) drop-shadow(0 5px 5px #84284918); }
#story .story-b picture,#story .story-b img { display:block; width:100%; height:auto; object-fit:contain; }
#story .story-b .photo-label { position:relative; width:82%; margin:-4px auto 0; bottom:auto; padding:8px 4px; background:var(--paper); transform:rotate(-4deg); font-size:11px; }
#story .body-copy { bottom:40px; }
#story .story-dash { top:auto; bottom:112px; }

/* 完整主图：不缩略、不叠压人脸、不裁原图。以下布局为自然文档流。 */
#moments { height:auto; padding-bottom:34px; }
#moments .folio { padding-top:34px; }
#moments .title { position:relative; left:auto; top:auto; margin:42px 30px 0; font-size:35px; }
#moments .short-note { position:relative; left:auto; top:auto; margin:20px 30px 0; font-size:11px; }
#moments .flower { right:26px; top:145px; width:48px; height:48px; }
#moments .moments-main { position:relative; width:88%; margin:32px auto 0; padding:7px 7px 0; transform:rotate(-1.4deg); z-index:3; }
#moments .moments-main .photo-button { width:100%; height:auto; }
#moments .moments-main img { width:100%; height:auto; aspect-ratio:853/1280; object-fit:contain; }
#moments .moments-main .photo-label { position:static; padding:12px 2px 14px; font-size:12px; color:var(--ink); }
#moments .moments-main .tape { width:94px; top:-9px; transform:translateX(-50%) rotate(4deg); }
#moments .moments-pair { position:relative; margin-top:55px; height:390px; }
#moments .moments-pink-scrap { position:absolute; right:-6%; top:19px; width:74%; height:290px; background:#d97999; transform:rotate(8deg); clip-path:polygon(4% 2%,20% 0,42% 3%,60% 0,79% 3%,98% 0,100% 94%,83% 100%,63% 95%,46% 99%,29% 96%,11% 100%,0 95%,3% 66%,0 38%); opacity:.52; }
#moments .moments-a { position:absolute; right:0; top:-4px; width:65%; height:auto; transform:rotate(4deg); filter:drop-shadow(1.5px 1.5px 0 #fff4f7) drop-shadow(-1px -1px 0 #fff4f7) drop-shadow(0 4px 6px #9b4c6820); z-index:4; }
#moments .moments-a .photo-button,#moments .moments-a picture,#moments .moments-a img { width:100%; height:auto; display:block; object-fit:contain; }
#moments .moments-c { left:25px; top:42px; width:35%; height:auto; transform:rotate(-7deg); padding:6px 6px 26px; z-index:5; }
#moments .moments-c .photo-button { width:100%; height:auto; aspect-ratio:853/1280; }
#moments .moments-c .photo-label { bottom:7px; font-size:8px; letter-spacing:0; }
#moments .hand-note { left:28px; right:auto; top:262px; margin:0; width:43%; font-size:13px; line-height:1.9; }
#moments .hand-note:before { background:#c56d8b; }
#moments .smile-note { right:25px; top:auto; bottom:22px; font-size:11px; }

/* 白纱合照：去掉黑背景，放在浅粉与奶油白纸张之间。 */
#forever { height:auto; color:var(--ink); padding:0 0 60px; }
#forever .folio { padding-top:34px; }
#forever .title { position:relative; left:auto; top:auto; margin:42px 30px 0; font-size:35px; }
#forever .side-word { top:205px; right:30px; writing-mode:horizontal-tb; font-size:12px; z-index:5; transform:rotate(5deg); }
#forever .forever-photo { position:relative; left:auto; right:auto; top:auto; width:94%; height:auto; padding:0; margin:38px auto 0; transform:none; background:none; box-shadow:none; }
#forever .portrait-paper { position:absolute; top:6%; left:11%; right:7%; height:88%; background:#fff1ed; border-radius:49% 49% 2% 3%; transform:rotate(-4deg); box-shadow:2px 4px 0 #d39aaa; }
#forever .forever-photo .photo-button { width:100%; height:auto; z-index:2; filter:drop-shadow(0 3px 3px #8c3d5a12); }
#forever .forever-photo picture,#forever .forever-photo img { display:block; width:100%; height:auto; object-fit:contain; }
#forever .forever-photo .photo-label { position:relative; margin:14px 15px 0; left:auto; bottom:auto; width:auto; font-size:8px; letter-spacing:.17em; }
#forever .body-copy { position:relative; left:auto; top:auto; margin:32px 30px 0; font-size:12px; }
#forever .rings { top:auto; bottom:60px; right:28px; color:#a94c6c; }
.joy { background:#b82b48; }
.details { --next:#f7dce5; }
.lightbox { background:#fae6eefb; color:#732d45; }
.lightbox img { background:transparent; }

@media (min-width:420px) {
 #story { height:935px; }
 #story .story-b { top:480px; }
 #moments .moments-pair { height:440px; }
 #moments .hand-note { top:300px; }
 #moments .moments-pink-scrap { height:340px; }
}
@media (max-width:374px) {
 #story .story-b { top:451px; }
 #moments .title,#forever .title { margin-left:24px; margin-right:24px; font-size:32px; }
 #moments .short-note { margin-left:24px; }
 #moments .moments-pair { height:374px; }
 #moments .hand-note { top:247px; font-size:12px; }
 #moments .moments-pink-scrap { height:265px; }
 #forever .body-copy { margin-left:24px; margin-right:24px; }
}
@media (max-width:340px) {
 #story .story-b { top:440px; }
 #story .story-b .photo-label { font-size:10px; }
 #moments .title,#forever .title { font-size:30px; }
 #moments .moments-pair { height:347px; }
 #moments .hand-note { top:229px; left:24px; }
 #moments .moments-c { left:20px; }
 #moments .moments-pink-scrap { height:240px; }
 #forever .forever-photo .photo-label { font-size:7px; }
 #forever .body-copy { font-size:11px; }
}

#story .story-a .photo-label { left:8px; width:88px; text-align:center; font-size:10px; }

/* V2.1：原片轮廓修复 + 实体粗白色贴纸描边。
   白边已烘焙进带透明安全边距的 PNG/WebP，不使用多重阴影冒充描边。
   人物容器不能复用整张纸片的 clip-path，否则会切到发顶。 */
body[data-edition="rose-v2-1"] { background:#f2e0e5; }
.portrait-sticker,
#forever .forever-photo .portrait-sticker {
  clip-path:none;
  -webkit-clip-path:none;
  overflow:visible;
}
#story .story-b .photo-button,
#forever .forever-photo .photo-button,
.cover-portrait {
  filter:drop-shadow(0 3px 2px rgba(114,39,64,.14));
}
#moments .moments-a {
  filter:drop-shadow(0 3px 2px rgba(114,39,64,.14));
}
.portrait-sticker picture,
.portrait-sticker img {
  display:block;
  width:100%;
  height:auto;
  object-fit:contain;
}
#forever .forever-photo { width:96%; }
#forever .portrait-paper { top:7%; height:86%; }
#story .story-b .photo-label { margin:2px auto 0; }
