:root{--paper:#f7f5ef;--ink:#354131;--soft:#777b6f;--line:#dcded2;--serif:"Songti SC","Noto Serif CJK SC","STSong","SimSun",serif}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:30px}body{margin:0;background:var(--paper);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;font-size:15px;-webkit-text-size-adjust:100%}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible{outline:2px solid #8c966d;outline-offset:6px}[hidden]{display:none!important}.preview{padding:9px 16px;background:#e9ebdf;text-align:center;font-size:12px;letter-spacing:2px}.topbar{max-width:1320px;margin:auto;padding:28px 5%;display:flex;align-items:center;justify-content:space-between;gap:14px}.brand{font-family:var(--serif);font-size:19px;letter-spacing:3px}.topbar>span{font-size:9px;letter-spacing:3px;color:var(--soft)}.text-button{border:0;background:transparent;color:var(--ink);font-size:12px;min-height:44px}.hero{max-width:1320px;margin:20px auto 0;padding:0 5%;display:grid;grid-template-columns:1fr 1.05fr;gap:8%;align-items:center}.hero-copy{padding:28px 0}.eyebrow{font-size:10px;font-weight:500;letter-spacing:3px;line-height:1.8}.small-caption{font-family:var(--serif);font-size:14px;letter-spacing:3px;margin-top:32px}h1,h2,h3,p{margin-top:0}h1,h2,h3,.closing p{white-space:nowrap;word-break:keep-all;overflow-wrap:normal}h1{font-family:var(--serif);font-weight:400;font-size:clamp(26px,4.5vw,62px);line-height:1.4;letter-spacing:.06em;white-space:nowrap;margin:25px 0}.intro{white-space:pre-line;line-height:2.1;letter-spacing:2px;color:var(--soft);font-size:14px}.names{display:flex;align-items:center;flex-wrap:wrap;gap:20px;margin:36px 0;font-family:var(--serif);font-size:21px;letter-spacing:3px}.names i{font-family:Georgia,serif;font-size:20px;color:#93987f}.round-link{display:grid;place-items:center;border:1px solid #b9bda9;border-radius:50%;width:46px;height:46px;font-size:22px}.hero-photo{position:relative;align-self:stretch;min-height:640px}.hero-photo>img{width:100%;height:100%;position:absolute;inset:0;object-fit:cover;object-position:50% 45%;border-radius:48% 48% 0 0}.photo-note{position:absolute;bottom:18px;left:22px;right:12px;color:white;font:italic 14px Georgia,serif;text-shadow:0 1px 6px #000}.photo-stamp{position:absolute;right:-18px;top:48%;padding:19px 12px;background:#ecebdc;border:1px solid #d2d5c2;line-height:1.8;font-family:var(--serif);font-size:17px}.section{max-width:1120px;margin:0 auto;padding:100px 5%}.invitation{text-align:center;padding-top:120px;padding-bottom:90px}.invitation h2{margin:28px 0;font:400 35px/1.6 var(--serif);letter-spacing:4px}.message{white-space:pre-line;line-height:2.4;color:var(--soft);letter-spacing:1px;font-size:14px}.branch{font:54px Georgia;color:#87916b;margin:18px 0}.invitation-note{font-family:var(--serif);letter-spacing:5px;font-size:15px}.section-heading h2{font:400 32px/1.6 var(--serif);letter-spacing:3px;margin:14px 0 35px}.details{border-top:1px solid var(--line);padding-top:70px}.details>.section-heading{text-align:center}.event-grid{border-top:1px solid var(--line);border-bottom:1px solid var(--line);display:grid;grid-template-columns:1fr 1.2fr}.date-panel,.venue-panel{padding:42px 0}.date-panel{border-right:1px solid var(--line);padding-right:35px}.venue-panel{padding-left:50px}.mini-label{font-size:10px;letter-spacing:2px;color:var(--soft)}.date-display{font:400 36px/1.5 Georgia,var(--serif);margin:23px 0 8px;letter-spacing:2px}.muted{color:var(--soft);font-size:13px;line-height:1.9;overflow-wrap:anywhere}.date-line{width:32px;border-top:1px solid #a8af94;margin:24px 0}.event-time{font:24px Georgia,var(--serif);margin-bottom:12px}.venue-panel h3{font:400 25px/1.6 var(--serif);margin:26px 0 10px;overflow-wrap:anywhere}.hall{font-size:14px}.venue-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:24px}.solid-button,.outline-button{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:10px 20px;border:1px solid #a5ad91;background:transparent;color:var(--ink);border-radius:2px;font-size:13px}.solid-button{background:var(--ink);border-color:var(--ink);color:var(--paper)}.contact{display:inline-block;margin-top:24px;font-size:13px;text-decoration:underline;text-underline-offset:5px}.album{padding-top:10px}.album-heading{display:block;text-align:center}.album-heading>span{font-size:9px;letter-spacing:2px}.gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;align-items:start;max-width:820px;margin:0 auto}.gallery .story-photo:first-child{grid-column:1/-1}.story-photo{border:0;background:transparent;padding:0;overflow:hidden;display:block;width:100%}.story-photo img{display:block;width:100%;height:auto;object-fit:contain;}.gallery-hint{text-align:center;font-size:11px;letter-spacing:2px;color:var(--soft);margin-top:22px}.closing{text-align:center;background:#e9ecdf;padding:75px 20px 65px}.closing-mark{font:40px var(--serif);color:#6e7b57}.closing p{font:400 27px/1.8 var(--serif);letter-spacing:3px;margin:24px 0 16px}.closing .eyebrow{font-size:9px}.closing-link{display:block;font-size:12px;letter-spacing:2px;margin-top:30px}footer{padding:28px 5% calc(28px + env(safe-area-inset-bottom));font-size:11px;letter-spacing:2px;text-align:center;color:var(--soft)}#toast{position:fixed;left:50%;bottom:calc(25px + env(safe-area-inset-bottom));transform:translateX(-50%);background:#354131f2;color:white;padding:13px 23px;border-radius:4px;font-size:13px;max-width:90%;width:max-content;z-index:10;opacity:0;pointer-events:none;transition:opacity .2s}#toast.visible{opacity:1}.noscript{text-align:center;padding:20px} @media(min-width:1400px){.hero-photo{min-height:730px}}@media(max-width:700px){.topbar{padding:14px 6%}.topbar>span{display:none}.brand{font-size:16px}.hero{display:flex;flex-direction:column;padding:0 7%;gap:0;margin-top:0;position:relative}.hero-copy{width:100%;text-align:center;padding:23px 0 24px}.hero-copy .eyebrow{font-size:8px;letter-spacing:2.5px}.small-caption{font-size:12px;margin-top:17px;margin-bottom:15px}h1{font-size:clamp(28px,8.8vw,40px);line-height:1.5;letter-spacing:.06em;margin:20px 0}.intro{font-size:12px;margin:17px 0;line-height:1.9}.names{justify-content:center;font-size:18px;margin:22px 0 0;gap:17px}.round-link{display:none}.hero-photo{width:100%;min-height:0;aspect-ratio:3/4;max-height:660px}.hero-photo>img{border-radius:47% 47% 0 0;object-position:50% 45%}.photo-stamp{right:-12px;padding:15px 9px;font-size:14px}.photo-note{font-size:11px;left:16px}.section{padding:65px 7%}.invitation{padding-top:70px;padding-bottom:50px}.invitation h2{font-size:clamp(22px,6.2vw,29px);letter-spacing:.04em;margin:20px 0}.message{font-size:12px;line-height:2.5;letter-spacing:.5px}.section-heading h2{font-size:clamp(22px,6.2vw,27px);letter-spacing:.04em;margin-bottom:25px}.event-grid{grid-template-columns:1fr}.date-panel{border-right:0;border-bottom:1px solid var(--line);padding:29px 0}.venue-panel{padding:29px 0}.date-display{font-size:35px;margin-top:18px}.date-line{margin:20px 0}.venue-panel h3{font-size:clamp(20px,6vw,25px);margin-top:19px}.album{padding-top:0}.album-heading>span{display:none}.gallery{grid-template-columns:1fr;gap:16px}.story-photo:first-child{grid-column:1/-1}.closing{padding:55px 15px}.closing p{font-size:22px;letter-spacing:2px}footer{font-size:10px;letter-spacing:1px}}@media(max-width:359px){h1{font-size:28px}.message{font-size:11px}.names{font-size:16px}.closing p{font-size:19px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}


.music-toggle{position:fixed;right:24px;bottom:calc(22px + env(safe-area-inset-bottom));z-index:8;display:inline-flex;align-items:center;gap:9px;min-height:46px;padding:10px 17px;background:#f7f5eff5;color:var(--ink);border:1px solid #b9bda9;border-radius:30px;box-shadow:0 3px 18px #35413115;font-size:12px;letter-spacing:1px}.music-symbol{display:grid;place-items:center;width:22px;height:22px;font:22px Georgia,serif}.music-toggle.is-playing .music-symbol{animation:music-sway 2s ease-in-out infinite}.music-toggle.is-playing{background:#e9ecdf}#toast{bottom:calc(85px + env(safe-area-inset-bottom))}@keyframes music-sway{0%,100%{transform:rotate(-10deg)}50%{transform:rotate(10deg)}}@media(max-width:700px){.music-toggle{right:16px;bottom:calc(16px + env(safe-area-inset-bottom));padding:9px 14px}}@media(prefers-reduced-motion:reduce){.music-symbol{animation:none!important}}

.embedded-map{margin-top:24px;border:1px solid var(--line);border-radius:6px;overflow:hidden}.map-card-address{display:block;margin:0;padding:13px 15px;background:#ececdf;color:var(--ink);font-size:12px;line-height:1.8}.map-frame{position:relative;min-height:220px;background:#eceee5}.map-canvas{height:260px;width:100%}.map-status{position:absolute;inset:0;display:grid;place-items:center;padding:24px;margin:0;text-align:center;font-size:12px;line-height:1.8;color:var(--soft);background:#eceee5}@media(max-width:700px){.map-canvas{height:230px}}

.transport{margin:24px 0 0;padding:20px 0 0;border-top:1px solid var(--line);font-size:12px;line-height:1.9}.transport>div+div{margin-top:14px}.transport dt{color:var(--ink);font-weight:500;letter-spacing:1px;margin-bottom:4px}.transport dd{margin:0;color:var(--soft);overflow-wrap:break-word}

.gift-message{margin-top:30px}

.rsvp{padding-top:0;text-align:center}.rsvp .section-heading h2{margin-bottom:18px}.rsvp-intro{font-size:13px;line-height:2;color:var(--soft);margin-bottom:26px}.rsvp-panel{max-width:780px;margin:auto;border:1px solid var(--line);border-radius:5px;overflow:hidden}.rsvp-panel iframe{display:block;width:100%;height:900px;border:0;background:#fff}.rsvp-open{display:inline-block;padding:14px 10px;min-height:44px;margin-top:12px;font-size:12px;text-decoration:underline;text-underline-offset:4px}.rsvp-help{color:var(--soft);font-size:11px;line-height:1.8;margin-top:0}@media(max-width:700px){.rsvp .section-heading h2{font-size:26px}.rsvp-panel iframe{height:1000px}}

.music-caption{display:block;overflow:hidden;white-space:nowrap;max-width:130px;text-align:left}.music-title-track{display:flex;width:max-content}.music-title-track>span{flex:0 0 auto}.music-toggle.is-playing .music-caption{width:130px}.music-toggle.is-playing .music-title-track>span{padding-right:28px}.music-toggle.is-playing .music-title-track{animation:music-title-scroll 9s linear infinite}.music-toggle.is-playing .music-symbol{animation:none}@keyframes music-title-scroll{from{transform:translateX(0)}to{transform:translateX(-50%)}}@media(max-width:700px){.music-toggle.is-playing .music-caption{width:112px}}@media(prefers-reduced-motion:reduce){.music-toggle.is-playing .music-title-track{animation:none;display:block;width:100%}.music-title-track>span:first-child{display:block;overflow:hidden;text-overflow:ellipsis;padding-right:0!important}#music-repeat{display:none}}

.hero-photo>picture{display:block;position:absolute;inset:0}.hero-photo>picture>img{display:block;width:100%;height:100%;object-fit:cover;object-position:50% 45%;border-radius:48% 48% 0 0}.story-photo picture{display:block}@media(max-width:700px){.hero-photo>picture>img{border-radius:47% 47% 0 0}}

/* Two landscape photographs beside one portrait, with the complete frames visible. */
.gallery{max-width:980px;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);grid-template-rows:repeat(2,1fr);gap:20px;align-items:center}
.story-photo{margin:0;cursor:default;min-width:0}
.gallery .story-photo:first-child{grid-column:1;grid-row:1}
.gallery .story-photo:nth-child(2){grid-column:1;grid-row:2}
.gallery .story-photo:nth-child(3){grid-column:2;grid-row:1 / span 2}
.story-photo picture,.story-photo img{display:block;width:100%}
.story-photo img{height:auto;object-fit:contain}
@media(max-width:700px){.gallery{grid-template-columns:1fr;grid-template-rows:none;gap:16px}.gallery .story-photo:nth-child(n){grid-column:1;grid-row:auto}}

.music-symbol{flex:0 0 22px;line-height:1;letter-spacing:0;font-size:0}
.music-symbol svg{display:block;grid-area:1 / 1;width:20px;height:20px}
.music-symbol .music-pause-icon,.music-toggle.is-playing .music-note-icon{display:none}
.music-toggle.is-playing .music-pause-icon{display:block}
