:root{--wine:#681e2c;--ink:#442b2e;--paper:#faf7f2;--muted:#887773;--line:#ded1c6;--serif:"Noto Serif SC","Songti SC","STSong","SimSun",serif;--sans:"Microsoft YaHei","PingFang SC",sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-bottom:90px}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.8}button,a{-webkit-tap-highlight-color:transparent}a{color:inherit}button{font:inherit}img{display:block;width:100%;object-fit:cover}button{cursor:pointer}button:focus-visible,a:focus-visible{outline:3px solid #c99858;outline-offset:5px}.skip{position:fixed;top:-100px;left:16px;z-index:50;background:white;padding:8px 14px}.skip:focus{top:16px}.hero{position:relative;max-width:1600px;margin:auto;height:min(900px,100svh);min-height:730px;background:#e5dcd2;overflow:hidden}.hero-photo{position:absolute;inset:0 0 0 auto;width:57%;height:100%;object-position:center 48%}.hero-shade{position:absolute;inset:0;background:linear-gradient(90deg,#f1eae0 0%,#f1eae0 35%,#f1eae000 63%)}.hero-top{position:absolute;top:32px;left:6%;right:5%;display:flex;justify-content:space-between;font-size:12px;letter-spacing:.28em}.hero-title{position:absolute;left:8%;top:19%;color:var(--wine)}.eyebrow,.chapter{font-family:var(--sans);font-size:12px;letter-spacing:.22em}.hero h1{font-family:var(--serif);font-weight:400;line-height:1.45;font-size:clamp(48px,5vw,74px);letter-spacing:.12em;margin:25px 0 12px}.hero h1 span{display:block}.handwritten{font-family:Georgia,"Times New Roman",serif;font-size:36px;line-height:1.3;font-style:italic;font-weight:400}.hero .handwritten{font-size:30px;color:#996a64;margin:10px 0}.hero-bottom{position:absolute;left:8%;bottom:8%;width:33%;text-align:left}.couple{font-family:var(--serif);font-size:26px;letter-spacing:.09em;margin:0 0 18px;white-space:nowrap}.couple span,.closing-names span{font:italic 24px Georgia;color:#a17b66;margin:0 8px}.hero-date{display:flex;align-items:center;gap:22px;border-top:1px solid #bba697;padding-top:12px;letter-spacing:.12em}.hero-date strong{font:38px Georgia}.hero-date>span{font-size:14px}.scroll-cue{display:inline-flex;gap:30px;align-items:center;margin-top:24px;font-size:12px;letter-spacing:.15em;text-decoration:none}.scroll-cue span{font-size:22px;animation:float 2s ease-in-out infinite}.hero-edition{position:absolute;right:20px;bottom:38px;writing-mode:vertical-rl;font-size:12px;letter-spacing:.25em;color:#fff}.section-pad{padding:100px 7%;max-width:1240px;margin:auto}.section-heading{text-align:center;margin-bottom:60px}.chapter{color:var(--muted)}.section-heading .handwritten{margin:22px 0 14px;color:var(--wine)}h2{font-family:var(--serif);font-size:32px;letter-spacing:.12em;font-weight:400;line-height:1.7;margin:0}.story-layout{display:grid;grid-template-columns:.95fr 1fr;gap:11%;align-items:center}.story-photo{position:relative;padding:0 24px 25px 0}.story-photo:after{content:"";position:absolute;top:24px;left:24px;right:0;bottom:0;border:1px solid #c5b09d;z-index:-1}.story-photo img{aspect-ratio:2/3}.photo-caption{display:block;position:absolute;bottom:45px;left:26px;color:white;letter-spacing:.25em;font-family:var(--serif)}.small-label{font-size:14px;letter-spacing:.18em;color:var(--muted)}.first-date{font:44px Georgia;color:var(--wine);margin:12px 0 25px;letter-spacing:.025em}.first-date span{color:#b7a088}.fine-rule{height:1px;width:50px;background:#b99474;margin-bottom:28px}.prose{line-height:2.1;font-size:16px;margin:0 0 22px}.duration{display:flex;gap:24px;margin-top:30px;align-items:baseline;white-space:nowrap}.duration span{font-size:14px}.duration strong{font:40px Georgia;color:var(--wine);margin-right:3px}.asof{font-size:12px;color:var(--muted);letter-spacing:.05em;margin:12px 0 0}.sunset-pair{margin-top:75px;display:grid;grid-template-columns:1.6fr 1fr;align-items:center;gap:45px}.sunset-pair img{aspect-ratio:3/2}.sunset-pair>div{text-align:center}.tiny-star{font-size:28px;color:#a3794e}.sunset-pair p{font-family:var(--serif);font-size:27px;letter-spacing:.16em;line-height:1.8}.sunset-pair .eyebrow{font-size:12px;letter-spacing:.15em;color:var(--muted)}.vow{max-width:1600px;margin:auto;display:grid;grid-template-columns:1fr 1fr;background:var(--wine);color:#fbefdc;align-items:stretch}.vow-image img{height:100%;max-height:850px;object-position:center 40%}.vow-copy{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:65px 20px}.vow .chapter{color:#d8b5a6}.double-happiness{font-family:var(--serif);font-size:55px;line-height:1.4;color:#dfbd85;margin:28px 0 22px}.vow h2{font-size:44px;letter-spacing:.2em;line-height:1.7}.vow-copy p{font-family:var(--serif);line-height:2;letter-spacing:.13em;margin-top:25px}.vow-sign{font-family:var(--serif);margin-top:30px;font-size:20px;letter-spacing:.12em}.vow-sign i{font:italic 22px Georgia;color:#d5ae89;margin:0 12px}.section-note{font-size:14px;color:var(--muted);margin-top:14px}.photo-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.photo-button{border:0;background:#e8dfd5;padding:0;overflow:hidden;position:relative}.photo-button img{aspect-ratio:2/3;transition:transform .7s}.photo-button:hover img{transform:scale(1.035)}.photo-button.extra img{aspect-ratio:2/3}.album-more{display:flex;justify-content:center;align-items:center;gap:22px;color:var(--wine);background:none;border:0;border-bottom:1px solid #b89c8f;padding:15px 4px;margin:35px auto 0;font-size:14px;letter-spacing:.08em}.album-more span:first-child{font-size:12px;color:var(--muted)}.album-more span:last-child{font-size:23px}.wedding{max-width:none;background:#ece4db;padding:80px 22px}.wedding-card{max-width:660px;margin:auto;text-align:center;outline:1px solid #c0a28d;outline-offset:-13px;border:1px solid #c0a28d;padding:60px 35px;background:var(--paper)}.wedding .handwritten{color:var(--wine);font-size:44px;margin:25px 0 18px}.wedding h2{font-size:29px}.invite-prose{line-height:2.2;font-size:16px;margin:26px 0}.wedding-date{display:flex;flex-direction:column;align-items:center;margin:30px auto 35px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);max-width:315px;padding:22px 0}.wedding-date strong{font:100px/1.1 Georgia;color:var(--wine);margin:8px}.wedding-date span{font-size:14px;letter-spacing:.16em}.venue-details{display:grid;grid-template-columns:1fr 1fr;gap:25px}.detail-label{font-size:12px;color:var(--muted);letter-spacing:.12em}.venue-details p{margin:5px 0 0;font-size:16px}.closing{font-size:14px;margin-top:35px}.closing-names{font-family:var(--serif);font-size:25px;letter-spacing:.08em;margin-bottom:5px}.wedding-card>.small-label{font-size:12px;margin:8px 0 0}footer{text-align:center;padding:70px 20px 115px;color:var(--wine)}footer .handwritten{font-size:30px}footer p{font-family:var(--serif);letter-spacing:.25em;font-size:16px;margin:20px 0 10px}footer>span:last-child{font-size:12px;letter-spacing:.15em;color:var(--muted)}.bottom-nav{position:fixed;bottom:max(16px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);z-index:10;display:flex;width:340px;max-width:calc(100% - 32px);background:#fffaf3ed;backdrop-filter:blur(15px);padding:7px;border:1px solid #ccb6a666;border-radius:40px;box-shadow:0 4px 24px #301d1815}.bottom-nav a{flex:1;text-align:center;font-size:14px;text-decoration:none;border-radius:30px;padding:8px;color:#877069;transition:background .3s,color .3s}.bottom-nav a.active{background:var(--wine);color:#fff7ed}.reveal{opacity:1;transform:none}.js-motion .reveal{opacity:0;transform:translateY(20px);transition:opacity .85s ease,transform .85s ease}.js-motion .reveal.visible{opacity:1;transform:none}#lightbox{position:fixed;inset:0;margin:auto;width:100vw;height:100dvh;max-width:none;max-height:none;padding:55px 65px;background:#1e1718f7;color:white;border:0;overflow:hidden}#lightbox[open]{display:flex;justify-content:center;align-items:center}#lightbox::backdrop{background:#1e1718}#lightbox-image{max-height:calc(100dvh - 125px);height:auto;width:auto;max-width:100%;object-fit:contain}#lightbox button{position:absolute;background:#ffffff12;border:1px solid #ffffff44;color:white;width:44px;height:44px;border-radius:50%;font:32px/1 Georgia;display:grid;place-items:center}#lightbox .lightbox-close{top:18px;right:18px}#lightbox .lightbox-prev{left:12px;top:calc(50% - 22px)}#lightbox .lightbox-next{right:12px;top:calc(50% - 22px)}#lightbox-count{position:absolute;bottom:15px;left:0;right:0;text-align:center;font-size:14px;letter-spacing:.15em}body.modal-open{overflow:hidden}@keyframes float{50%{transform:translateY(5px)}}@media(min-width:1600px){.hero{margin-top:30px}.hero,.vow{max-width:1400px}}@media(max-width:760px){.hero{min-height:700px;height:100svh;max-height:1020px}.hero-photo{width:100%;object-position:50% 43%}.hero-shade{background:linear-gradient(180deg,#eee3d382 0%,#eee3d328 34%,transparent 47%,#31251e0a 57%,#302118b5 100%)}.hero-top{top:max(24px,env(safe-area-inset-top));left:25px;right:25px;font-size:12px;letter-spacing:.16em}.hero-title{top:10.5%;left:0;right:0;text-align:center}.hero-title .eyebrow{font-size:12px;letter-spacing:.23em}.hero h1{font-size:42px;line-height:1.32;letter-spacing:.13em;margin:15px 0 9px}.hero h1 span{display:inline;margin-left:12px}.hero .handwritten{font-size:26px;margin:9px 0}.hero-bottom{left:28px;right:28px;width:auto;bottom:105px;text-align:center;color:#fff6eb}.couple{font-size:27px;margin-bottom:12px;letter-spacing:.08em}.couple span{color:#f3dcc3}.hero-date{justify-content:center;border-color:#ebd7c880;gap:25px;padding-top:10px;max-width:300px;margin:auto}.hero-date strong{font-size:35px}.hero-date>span{font-size:13px}.scroll-cue{margin-top:13px;font-size:12px;gap:16px}.hero-edition{display:none}.section-pad{padding:65px 25px}.section-heading{margin-bottom:34px}.section-heading .handwritten{font-size:29px;margin:17px 0 10px}h2{font-size:25px;letter-spacing:.07em}.chapter{font-size:12px;letter-spacing:.15em}.story-layout{grid-template-columns:1fr;gap:38px}.story-photo{width:85%;max-width:370px;margin:0 auto}.story-photo img{max-height:465px}.story-copy{text-align:center}.first-date{font-size:40px;margin-bottom:22px}.fine-rule{margin:0 auto 25px}.prose{font-size:16px;line-height:2.1}.duration{justify-content:center;gap:22px;margin-top:26px}.duration strong{font-size:41px}.asof{font-size:12px}.sunset-pair{margin-top:48px;display:flex;flex-direction:column;gap:17px}.sunset-pair>div{padding-top:6px}.sunset-pair p{font-size:25px;line-height:1.7;margin:12px 0 17px}.vow{grid-template-columns:1fr}.vow-image img{height:auto;max-height:none;aspect-ratio:4/5;object-position:center 33%}.vow-copy{padding:40px 20px 55px}.double-happiness{font-size:44px;margin:20px 0 15px}.vow h2{font-size:35px;line-height:1.7}.vow-copy p{font-size:16px;margin:22px 0 0}.vow-sign{margin-top:24px}.photo-grid{grid-template-columns:repeat(2,1fr);gap:10px}.album .section-note{font-size:14px}.album-more{gap:12px;font-size:14px;margin-top:24px}.wedding{padding:55px 20px}.wedding-card{padding:43px 25px;outline-offset:-9px}.wedding .handwritten{font-size:38px;margin-top:20px}.wedding h2{font-size:25px}.invite-prose{font-size:15px}.wedding-date{margin:26px auto}.wedding-date strong{font-size:88px}.venue-details{grid-template-columns:1fr;gap:20px}.closing{font-size:14px;line-height:1.9}.closing-names{font-size:24px}footer{padding:50px 20px 110px}footer .handwritten{font-size:26px}#lightbox{padding:65px 8px}#lightbox-image{max-height:calc(100dvh - 140px)}#lightbox .lightbox-prev,#lightbox .lightbox-next{top:auto;bottom:15px}#lightbox .lightbox-prev{left:calc(50% - 110px)}#lightbox .lightbox-next{right:calc(50% - 110px)}#lightbox-count{bottom:10px;width:110px;left:calc(50% - 55px)}}@media(max-width:380px){.hero h1{font-size:35px}.hero h1 span{margin-left:8px}.couple{font-size:24px}.section-pad{padding-left:20px;padding-right:20px}.duration{gap:14px}.duration strong{font-size:37px}.wedding-card{padding-left:19px;padding-right:19px}.closing-names{font-size:22px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.js-motion .reveal{opacity:1;transform:none}}@media print{.hero{height:800px}.bottom-nav,.scroll-cue,.album-more,dialog{display:none!important}.reveal,.js-motion .reveal{opacity:1;transform:none}.vow,.wedding-card{break-inside:avoid}}
img{height:auto}
