@font-face{font-family:"Noto Serif SC";font-style:normal;font-weight:400;font-display:swap;src:url(/assets/serif-400-Bg9qa5mx.ttf) format("truetype")}@font-face{font-family:"Noto Serif SC";font-style:normal;font-weight:600;font-display:swap;src:url(/assets/serif-600-CU3UltEw.ttf) format("truetype")}html{scroll-behavior:smooth}.letter-content{opacity:0;visibility:hidden;transition:opacity .7s}.letter-content.is-open{opacity:1;visibility:visible;animation:letter-appear .8s both}.letter-bar{display:flex;align-items:center;gap:14px;padding:38px 27px 28px;color:var(--red);font-size:16px;letter-spacing:2px;font-weight:600}.ornament{display:block;width:145px;height:27px;object-fit:contain;margin:24px auto}.letter-bar .ornament{width:80px;flex:1;min-width:20px;height:20px;margin:0}.music-control{position:relative;display:grid;place-items:center;width:34px;height:34px;flex-shrink:0;border:1px solid #90291980;border-radius:50%;padding:0}.music-control>span{position:absolute;top:37px;white-space:nowrap;font-size:10px;letter-spacing:1px;font-weight:400}.photo-button{display:block;width:100%;padding:0;overflow:hidden;background:transparent}.photo-button img{display:block;width:100%;height:auto;object-fit:contain}.hero-photo{width:calc(100% - 40px);margin:0 auto;border-radius:100px 100px 3px 3px;overflow:hidden}.letter-body{padding:35px 35px 22px;outline:none}.letter-body h2{font-size:25px;font-weight:600;letter-spacing:2px;color:var(--red);margin:0 0 13px}.letter-body p{font-size:16px;line-height:2;letter-spacing:1px;margin:0 0 20px;text-align:justify}.letter-body .greeting{font-size:14px;margin-bottom:24px;color:var(--muted)}.letter-body .chapter-title,.chapter-title{text-align:center;color:var(--red);font-size:14px;line-height:1.9;letter-spacing:3px;margin:12px 0}.letter-body>.ornament{margin:24px auto 10px}.read-on{display:flex;flex-direction:column;align-items:center;gap:7px;padding:8px 18px;margin:8px auto 0;color:var(--muted)}.read-on span{font-size:10px;letter-spacing:3px}.read-on svg{animation:gentle-down 3s infinite}.letter-index{position:sticky;top:0;z-index:8;display:flex;justify-content:space-around;gap:6px;padding:11px 18px;background:var(--paper) url(/assets/paper.webp);border-block:1px solid #b28a6426}.letter-index a{display:block;padding:7px 10px;color:var(--red);font-size:12px;letter-spacing:3px}.letter-index a:hover{text-decoration:underline;text-underline-offset:5px}#our-days,#album,#wedding,#letter-start{scroll-margin-top:70px}.our-days{padding:65px 24px 10px}.section-intro{text-align:center}.section-intro small,.wedding-details>small,.map-sheet small,.prose-section>small{font-size:10px;letter-spacing:4px;color:var(--muted)}.section-intro h2{font-size:25px;line-height:1.7;letter-spacing:3px;color:var(--red);margin:16px 0 20px}.section-intro p{font-size:14px;line-height:2.1;letter-spacing:1px;color:#886246;margin:0}.journey-timeline{margin-top:74px}.journey-chapter{margin:0 0 85px;position:relative}.scene-heading{position:relative;padding:0 7px}.journey-date{display:flex;align-items:center;gap:15px;font-size:10px;letter-spacing:2px;color:var(--muted);margin-bottom:18px}.journey-date>span{color:var(--red);font-size:11px}.journey-date time{font-variant-numeric:lining-nums;letter-spacing:2px}.journey-chapter h3{font-size:34px;line-height:1.3;font-weight:400;letter-spacing:8px;color:var(--red);margin:0 0 15px}.journey-chapter h4{font-size:16px;font-weight:400;line-height:1.9;letter-spacing:1px;margin:0 0 20px;color:#805536}.journey-prose{font-size:14.5px;line-height:2.15;letter-spacing:.8px;text-align:justify;margin:0 7px 30px}.photo-stage{position:relative;padding:8px 0 0}.photo-stage figure,.registration-gallery figure,.album-images figure{position:relative;display:block;margin:0;min-width:0}.frame-arch .photo-button,.photo-button.frame-arch{border-radius:48% 48% 3px 3px/25% 25% 3px 3px;overflow:hidden}.frame-oval .photo-button,.photo-button.frame-oval{border-radius:49% 49% 48% 48%;overflow:hidden}.frame-round .photo-button,.photo-button.frame-round{border-radius:42px 4px;overflow:hidden}.frame-paper .photo-button{padding:5px;background:#fffaf0;box-shadow:0 5px 15px #67422617}.frame-paper .photo-button img{border-radius:1px}.photo-stage figcaption,.registration-gallery figcaption{font-size:11px;line-height:1.8;color:var(--muted);letter-spacing:1px;text-align:center;margin:17px 0 0}.scene-whisper{font-size:12px;letter-spacing:2px;line-height:2;color:#916b4c;text-align:center;margin:29px 12px 0}.scene-roam .photo-stage figure:nth-child(1){width:92%;margin-left:0}.scene-roam .photo-stage figure:nth-child(2){width:62%;margin:30px 0 0 2%;transform:rotate(-3deg)}.scene-roam .photo-stage figure:nth-child(3){width:50%;margin:-24px 0 0 49%}.scene-sea .scene-heading{text-align:right}.scene-sea .journey-date{justify-content:flex-end}.scene-sea .photo-stage figure:nth-child(1){width:78%;margin-left:3%}.scene-sea .photo-stage figure:nth-child(2){width:88%;margin:-44px 0 0 12%;transform:rotate(2deg);z-index:1}.scene-dusk .photo-stage figure:nth-child(1){width:85%;margin:0 auto 35px}.scene-dusk .photo-stage figure:nth-child(2){width:78%;transform:rotate(-2deg)}.scene-dusk .photo-stage figure:nth-child(3){width:48%;margin:-56px 0 0 51%}.scene-meadow .scene-heading{text-align:center}.scene-meadow .journey-date{justify-content:center}.scene-meadow .photo-stage figure:nth-child(1){width:100%}.scene-meadow .photo-stage figure:nth-child(2){width:53%;margin:30px 0 0 2%}.scene-meadow .photo-stage figure:nth-child(3){width:48%;margin:-38px 0 0 52%;transform:rotate(3deg)}.scene-play .photo-stage figure{width:78%;margin:0 auto}.scene-play .scene-heading{text-align:center}.scene-play .journey-date{justify-content:center}.scene-dunes .photo-stage figure:nth-child(1){width:86%;margin-left:0}.scene-dunes .photo-stage figure:nth-child(2){width:83%;margin:24px 0 0 17%}.scene-shore .photo-stage figure{width:100%}.scene-shore .scene-heading{text-align:right}.scene-shore .journey-date{justify-content:flex-end}.registration-chapter{padding:3px 0 40px;margin:0}.registration-chapter .section-intro h2{font-size:26px;letter-spacing:4px}.registration-gallery{margin-top:42px}.registration-gallery .registration-main{width:76%;margin:0 auto}.registration-gallery .registration-one{width:88%;margin:40px 0 0;transform:rotate(-3deg)}.registration-gallery .registration-two{width:85%;margin:26px 0 0 15%}.registration-last{display:flex;gap:24px;align-items:center;margin:34px 5px 0}.registration-last>figure{width:48%;flex-shrink:0}.registration-last>p{font-size:14px;color:var(--red);line-height:2.25;letter-spacing:2px;text-align:left;margin:0}.registration-last>p span{display:block;font-size:12px;color:var(--muted);margin-top:18px}.album-section{padding:30px 24px 20px}.album-section>.section-intro{margin-bottom:55px}.album-section .section-intro h2{font-size:25px;letter-spacing:2px}.album-spread{position:relative;margin:0 0 68px}.album-spread h3{color:var(--red);font-size:20px;font-weight:400;letter-spacing:6px;text-align:center;margin:0 0 27px}.album-images{position:relative}.album-images figure:nth-child(1){width:86%;margin:0 auto}.album-images figure:nth-child(2){width:57%;margin:28px 0 0 1%;transform:rotate(-2deg)}.album-images figure:nth-child(3){width:57%;margin:-32px 0 0 43%;transform:rotate(2deg)}.album-images figure:nth-child(4){width:64%;margin:32px auto 0}.spread-white .album-images figure:nth-child(1){width:100%}.spread-warm .album-images figure:nth-child(1){width:78%;margin-left:0}.spread-warm .album-images figure:nth-child(2){width:57%;margin-left:43%;margin-top:-48px;transform:rotate(3deg);z-index:1}.spread-warm .album-images figure:nth-child(3){width:100%;margin:30px 0 0;transform:none}.spread-warm .album-images figure:nth-child(4){width:69%;margin:30px 0 0 7%;transform:rotate(-2deg)}.spread-red h3{text-align:right;margin-right:15px}.spread-red .album-images figure:nth-child(1){width:80%;margin:0 0 0 17%}.spread-red .album-images figure:nth-child(2){width:62%;margin-top:30px}.spread-red .album-images figure:nth-child(3){width:54%;margin-left:46%;margin-top:-23px;transform:none}.spread-red .album-images figure:nth-child(4){width:69%;margin-left:2%;transform:rotate(-2deg)}.spread-light .album-images figure:nth-child(1){width:79%;margin-left:0}.spread-light .album-images figure:nth-child(2){width:62%;margin:28px 0 0 38%;transform:none}.spread-chinese .album-images figure:nth-child(1){width:85%;margin:0 auto}.spread-chinese .album-images figure:nth-child(2){width:64%;margin:32px auto 0;transform:none}.spread-line{font-size:12px;line-height:2;letter-spacing:1.5px;text-align:center;color:var(--muted);margin:28px 5px 0}.album-note{font-size:11px;letter-spacing:2px;line-height:2;text-align:center;color:var(--muted);margin:0 0 30px}.prose-section{padding:26px 35px;text-align:center}.prose-section>small{display:block;margin:12px 0 15px}.prose-section>h2{font-size:23px;letter-spacing:2px;color:var(--red);line-height:1.8;margin:0 0 23px}.prose-section>p{font-size:14.5px;line-height:2.1;letter-spacing:.8px;text-align:justify;margin:0 0 21px}.prose-section .promise-line{color:var(--red);text-align:center;font-size:18px;letter-spacing:2px;line-height:2.1;margin:30px 0 0}.guest-letter{padding-top:35px;padding-bottom:12px}.wedding-details{padding:52px 30px 20px;text-align:center}.wedding-details>h2{font-size:28px;letter-spacing:7px;color:var(--red);margin:15px 0 18px}.event-invitation{font-size:14px;letter-spacing:2px;line-height:2.1;margin:0}.wedding-details>.ornament{width:125px;margin:25px auto}.event-date{display:block;font-size:38px;letter-spacing:2px;line-height:1.3;color:var(--red)}.lunar-date{font-size:12px;letter-spacing:2px;margin:10px 0 16px;color:var(--muted)}.ceremony-time{font-size:14px;letter-spacing:1px;margin:0}.ceremony-time strong{font-size:20px;font-weight:500}.event-location{border-top:1px solid #b28a6444;margin:29px auto 0;padding-top:26px}.event-location h3{font-size:21px;letter-spacing:1px;color:var(--red);margin:0 0 12px}address{font-size:12px;font-style:normal;letter-spacing:1px;line-height:2}.route-button{display:flex;align-items:center;justify-content:center;gap:12px;border:1px solid #90291988;border-radius:24px;padding:11px 23px;min-height:44px;width:max-content;max-width:100%;margin:24px auto 0;font-size:14px;letter-spacing:2px;color:var(--red)}.route-button:hover{background:#90291908}.signature{font-size:15px;letter-spacing:2px;color:var(--red);margin:28px 0 0}footer{padding:34px 35px 35px;text-align:center}footer .closing-photo{width:76%;margin:0 auto}footer>p{font-size:16px;line-height:2.1;letter-spacing:2px;color:var(--red);margin:30px 0 18px}footer>span{font-size:10px;letter-spacing:4px;color:var(--muted)}.back-envelope{display:flex;align-items:center;justify-content:center;gap:8px;font-size:11px;letter-spacing:1px;padding:12px;margin:20px auto 0;color:var(--muted)}.music-note{font-size:11px;line-height:1.9;margin:0 25px 20px;color:var(--muted)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;display:flex;align-items:center;justify-content:center;padding:28px;background:#1b120df2}.modal-close{position:absolute;top:max(20px,env(safe-area-inset-top));right:20px;display:grid;place-items:center;min-width:44px;min-height:44px;padding:10px;z-index:2;color:inherit}.lightbox{color:#f8ecd7}.lightbox-frame{width:100%;max-width:700px;text-align:center}.lightbox-frame>img{width:auto;max-width:100%;max-height:72svh;object-fit:contain;margin:auto}.lightbox-frame>p{font-size:13px;line-height:1.9;letter-spacing:1px;margin:18px 0 6px}.album-controls{display:flex;align-items:center;justify-content:center;gap:35px}.album-controls button{padding:12px}.album-controls span{font-size:12px;letter-spacing:3px}.map-overlay{background:#3520169c;align-items:flex-end;padding:0}.map-sheet{position:relative;width:100%;max-width:440px;padding:42px 27px 30px;text-align:center;background:var(--paper) url(/assets/paper.webp)}.map-sheet .modal-close{top:8px;right:7px}.map-sheet h2{font-size:23px;color:var(--red);margin:17px 0}.selectable-address{font-size:15px;line-height:1.9;-webkit-user-select:text;user-select:text}.map-help{font-size:12px;line-height:1.9;margin:18px 8px;color:var(--muted)}.map-sheet .route-button{font-size:13px;letter-spacing:1px}.copy-address{display:flex;align-items:center;justify-content:center;gap:7px;font-size:12px;letter-spacing:1px;margin:10px auto 0;padding:10px;color:var(--muted)}.toast{position:fixed;z-index:60;left:50%;bottom:35px;display:flex;align-items:center;gap:7px;white-space:nowrap;padding:12px 20px;font-size:13px;border-radius:4px;background:#6a3429;color:#fff6e9;opacity:0;transform:translate(-50%,20px);pointer-events:none;transition:.2s}.toast.show{opacity:1;transform:translate(-50%)}@keyframes letter-appear{0%{opacity:0}to{opacity:1}}@keyframes gentle-down{0%,to{transform:translateY(0)}50%{transform:translateY(5px)}}@media(max-width:360px){.letter-bar{padding-left:22px;padding-right:22px;font-size:14px}.letter-body{padding-left:29px;padding-right:29px}.letter-body p{font-size:15.5px}.our-days,.album-section{padding-left:20px;padding-right:20px}.section-intro h2{font-size:22px;letter-spacing:2px}.journey-chapter h3{font-size:31px}.journey-chapter h4{font-size:14.5px;letter-spacing:.5px}.journey-prose{font-size:14px;letter-spacing:.5px}.scene-whisper{font-size:11px;letter-spacing:1px}.registration-last{gap:17px}.registration-last>p{font-size:12px;letter-spacing:1px}.prose-section{padding-left:29px;padding-right:29px}.wedding-details{padding-left:24px;padding-right:24px}.event-date{font-size:34px}.event-location h3{font-size:20px}.letter-index{padding-inline:12px;gap:0}}@media(min-width:600px){.map-overlay{align-items:center}.map-sheet{border:1px solid #b9956c}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}:root{font-family:"Noto Serif SC",Songti SC,STSong,serif;color:#673821;background:#f7efdf;font-synthesis:none;font-weight:400;--red:#902919;--muted:#926d4e;--gold:#b28a64;--paper:#f7efdf;font-size:16px}*{box-sizing:border-box}body{margin:0;background:var(--paper) url(/assets/paper.webp) repeat}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer}button:disabled{cursor:default}button:focus-visible,a:focus-visible{outline:2px solid var(--red);outline-offset:5px}button{border:0;background:none}a{color:inherit;text-decoration:none}img{display:block;max-width:100%}p,h1,h2,h3{margin:0}h1,h2,h3{font-weight:500}button svg,a svg{flex-shrink:0}.invitation{position:relative;width:100%;max-width:440px;margin:0 auto}.preview-mode{max-width:390px}.cover{position:fixed;inset:0 auto auto 50%;transform:translate(-50%);width:min(100%,440px);height:100svh;min-height:680px;max-height:1100px;z-index:20;overflow:hidden;perspective:1000px}.preview-mode .cover{width:390px;height:844px;min-height:844px}.cover-art{position:absolute;top:0;right:0;bottom:0;left:0;background:url(/assets/envelope.webp) center/100% 100% no-repeat;transition:transform 1.1s cubic-bezier(.3,.05,.2,1),opacity .9s}.paper-layer{clip-path:polygon(0 0,100% 0,100% 42%,50% 65%,0 42%)}.flap-left{clip-path:polygon(0 42%,50% 65%,0 78%);transform-origin:0 65%}.flap-right{clip-path:polygon(100% 42%,50% 65%,100% 78%);transform-origin:100% 65%}.flap-front{clip-path:polygon(0 78%,50% 65%,100% 78%,100% 100%,0 100%)}.cover-ink{position:absolute;text-align:center;color:var(--red);transition:opacity .35s,transform .9s}.eyebrow{top:8.4%;left:0;width:100%;font-size:13px;letter-spacing:5px}.cover-title{top:13.5%;left:0;width:100%;display:flex;justify-content:center;gap:28px;font-size:47px;line-height:1.12;letter-spacing:4px}.cover-title span{writing-mode:vertical-rl}.cover-title span+span{position:relative}.cover-title span+span:before{content:"";position:absolute;left:-15px;top:14px;bottom:12px;width:1px;background:#b28a64}.cover-names{top:41.6%;left:0;width:100%;font-size:23px;letter-spacing:2px;font-weight:500}.cover-names span{font-size:17px}.cover-date{top:45.5%;width:100%;font-size:19px;letter-spacing:5px}.cover-lunar{top:48.5%;width:100%;font-size:12px;letter-spacing:2px;color:#98704f}.seal-button{position:absolute;top:59.5%;left:0;width:100%;height:25%;padding:0;transition:opacity .4s,transform .6s;display:flex;align-items:center;flex-direction:column;color:#ffe9c8}.seal-button>img{width:84px;height:84px;object-fit:contain;filter:drop-shadow(0 4px 4px #30000040);transition:transform .25s}.seal-button:hover>img{transform:scale(1.06)}.salutation{margin-top:12px;font-size:15px;letter-spacing:3px}.open-hint{margin-top:39px;display:block;font-size:14px;letter-spacing:3px}.cover-skip{bottom:4.8%;left:50%;transform:translate(-50%);white-space:nowrap;color:#fff0d7;font-size:14px;letter-spacing:2px;padding:10px 5px;display:flex;gap:10px;align-items:center;border-bottom:1px solid #e8caa47a}.opening .cover-ink{opacity:0;transform:translateY(-35px)}.opening .cover-skip{transform:translate(-50%,-15px)}.opening .seal-button{opacity:0;transform:scale(1.18) rotate(-8deg)}.opening .flap-left{transform:rotateY(-105deg) translate(-15%);opacity:0}.opening .flap-right{transform:rotateY(105deg) translate(15%);opacity:0}.opening .flap-front{transform:translateY(75%);opacity:0}.opening .paper-layer{transform:translateY(-100%);opacity:0}.cover-title,.cover-names{font-weight:600}.seal-button{top:60.3%}.cover{container-type:size;min-height:560px}.preview-mode{max-width:var(--preview-width,390px)}.preview-mode .cover{width:var(--preview-width,390px);height:var(--preview-height,844px);min-height:0}.cover-heading{top:13.5%;left:0;width:100%;display:flex;flex-direction:column;align-items:center}.cover-heading .cover-title{position:static;width:auto;margin:0;overflow:visible;font-size:clamp(28px,5.2cqh,44px);letter-spacing:clamp(2px,.414cqh,3.5px);font-weight:600}.cover-heading .cover-title span{padding-inline:2px;overflow:visible}.cover-heading .cover-ornament{position:static;inset:auto;transform:none;width:140px;height:clamp(18px,3cqh,25px);object-fit:contain;margin:clamp(7px,1cqh,9px) 0 0}.opening .cover-heading{opacity:0;transform:translateY(-35px)}.opening .cover-heading .cover-ornament{transform:none}.cover .eyebrow{font-size:clamp(11px,1.54cqh,13px)}.cover .cover-names{font-size:clamp(18px,2.73cqh,23px)}.cover .cover-date{font-size:clamp(15px,2.25cqh,19px)}.cover .cover-lunar{font-size:clamp(10px,1.42cqh,12px)}.cover .seal-button>img{width:clamp(64px,11.4cqh,96px);height:clamp(64px,11.4cqh,96px)}.cover .salutation{font-size:clamp(12px,1.78cqh,15px);margin-top:clamp(8px,1.4cqh,12px)}.cover .open-hint{font-size:clamp(11px,1.66cqh,14px);margin-top:clamp(18px,3.7cqh,31px)}.cover .cover-skip{font-size:clamp(11px,1.66cqh,14px)}@media(min-width:600px){.cover{box-shadow:0 0 50px #6d30100c}}
