@font-face{font-family:InvitationSerif;src:url('assets/invitation-serif.woff2?v=9') format('woff2');font-weight:400 700;font-display:swap}
@font-face{font-family:InvitationSans;src:url('assets/invitation-sans.woff2?v=9') format('woff2');font-weight:400 600;font-display:swap}
:root{--paper:#f5f2ea;--ink:#202b28;--secondary:#5d625c;--gold:#956b2d;--light-gold:#b88d47;--rule:#c6b48c;--serif:InvitationSerif,'Songti SC',SimSun,serif;--sans:InvitationSans,'PingFang SC','Microsoft YaHei',sans-serif}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:24px}body{margin:0;color:var(--ink);background:var(--paper);font:400 1rem/1.85 var(--sans);-webkit-font-smoothing:antialiased}button,a,input{-webkit-tap-highlight-color:transparent}h1,h2,h3,p{margin:0}button,input{font:inherit}button{cursor:pointer;touch-action:manipulation}a{color:inherit}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--gold);outline-offset:5px}.invitation-page{position:relative;overflow:hidden}.cover{position:relative;isolation:isolate;text-align:center;min-height:638px;padding:32px 24px 34px}.cover-art{position:absolute;z-index:-1;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 36%;mix-blend-mode:multiply;pointer-events:none}.masthead{display:flex;align-items:center;flex-direction:column}.logo-crop{width:88px;height:90px;overflow:hidden;position:relative;mix-blend-mode:multiply}.logo-crop img{position:absolute;max-width:none;width:307.317%;height:auto;left:-104.878%;top:-46.341%}.brand-name{font:600 1.125rem/1.3 var(--sans);letter-spacing:.16em;padding-left:.16em;margin-top:9px}.brand-committee{font:400 1rem/1.4 var(--sans);letter-spacing:.18em;padding-left:.18em;margin-top:2px}.brand-rule{position:relative;display:flex;align-items:center;justify-content:center;width:105px;height:10px;margin-top:12px}.brand-rule:before,.brand-rule:after,.section-rule:before,.section-rule:after{content:'';height:1px;background:var(--rule);flex:1}.brand-rule img,.section-rule img{margin-inline:5px;flex:none}.invitation-label{display:flex;align-items:center;justify-content:center;gap:18px;color:var(--gold);font:500 1.25rem/1.5 var(--serif);letter-spacing:.22em;padding-left:.22em;margin-top:12px}.invitation-label:before,.invitation-label:after{content:'';display:block;width:35px;height:1px;background:var(--light-gold)}.title-art{width:268px;max-width:100%;margin:13px auto 0;font-size:0;line-height:0}.title-art img{display:block;width:100%;height:auto}.cover-poem{font:400 1rem/1.65 var(--sans);letter-spacing:.055em;margin-top:12px}.cover-facts{margin-top:46px}.event-date{font:600 2.75rem/1.1 var(--serif);letter-spacing:-.04em;font-variant-numeric:lining-nums}.event-date:before{content:'';display:block;height:1px;background:var(--light-gold);width:32px;margin:0 auto 13px}.event-date small{font-size:.6em;margin-inline:3px;letter-spacing:0}.event-time{font:400 1.0625rem/1.3 var(--serif);letter-spacing:.025em;margin-top:6px}.event-time span{font-family:var(--sans);font-size:.9375rem;margin-left:5px}.event-place{font:400 1rem/1.8 var(--sans);letter-spacing:.04em;margin-top:13px}.event-place:before{content:'';display:block;height:1px;width:26px;background:var(--light-gold);margin:0 auto 16px}.content-wrap{width:calc(100% - 48px);max-width:850px;margin:0 auto}.section-rule{display:flex;align-items:center;width:100%;height:10px}.letter h2,.rendezvous h2{font:600 1.4375rem/1.6 var(--serif);color:#78541f;letter-spacing:.035em;margin-top:13px}.letter-intro{font:400 1rem/1.8 var(--sans);margin-top:3px}.programme{padding-top:24px}.timeline{list-style:none;margin:0;padding:0}.timeline li{position:relative;padding:0 0 28px 22px;border-left:1px solid var(--rule);margin-left:5px}.timeline li:last-child{padding-bottom:0}.timeline-heading{display:flex;align-items:baseline;gap:21px}.timeline-heading:before{content:'';position:absolute;left:-4px;top:12px;width:7px;height:7px;background:var(--light-gold);border-radius:50%}.timeline-time{font:500 1.375rem/1.4 var(--serif);font-variant-numeric:tabular-nums;min-width:63px}.timeline-heading h3{font:500 1.25rem/1.5 var(--serif);letter-spacing:.055em}.timeline-detail{font:400 1rem/1.85 var(--sans);color:var(--secondary);margin-top:10px}.timeline-detail>span{display:block;font-size:.8125rem;line-height:1.8;color:var(--gold);letter-spacing:.02em;margin-bottom:3px}.time-word{font-size:1.125rem}.experience-note{margin-top:32px;padding:21px 0;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule)}.experience-note .eyebrow{font:500 .8125rem/1.8 var(--sans);color:var(--gold);letter-spacing:.2em;margin-bottom:7px}.experience-note>p:last-child{font-size:1rem;line-height:1.85;color:var(--secondary)}.programme-note{font-size:.8125rem;color:var(--secondary);margin-top:12px}.rendezvous{margin-top:48px}.rendezvous h2{font-size:1.375rem}.meeting-details{margin:24px 0 0}.meeting-details>div{display:grid;grid-template-columns:38px 1fr;gap:20px;margin-bottom:20px}.meeting-details dt{font-size:.8125rem;letter-spacing:.1em;color:var(--gold);padding-top:3px}.meeting-details dd{margin:0;font-size:1rem;line-height:1.9}.meeting-details dd>span{color:var(--secondary);font-size:.875rem}.text-button{display:inline-flex;align-items:center;gap:9px;padding:8px 0;min-height:44px;border:0;border-bottom:1px solid var(--rule);background:transparent;color:var(--ink);font-size:.875rem}.text-button img{opacity:.8}.text-button:hover{color:var(--gold)}.signoff{text-align:center;padding:52px 0 135px}.signoff>p:first-child{font:500 1rem/1.8 var(--serif);letter-spacing:.015em}.signoff-event{font-size:.8125rem;color:var(--secondary);letter-spacing:.1em;margin-top:7px}.signoff>span{display:block;color:var(--gold);font:500 .9375rem/1.8 var(--serif);letter-spacing:.4em;padding-left:.4em;margin-top:16px}.invitation-bar{position:fixed;bottom:0;left:0;right:0;z-index:10;background:rgba(245,242,234,.94);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);padding:10px 24px calc(10px + env(safe-area-inset-bottom))}.share-button{display:flex;align-items:center;justify-content:center;gap:12px;min-height:51px;width:100%;max-width:480px;margin:auto;background:#24302d;color:#efcf92;border:1px solid #b48b4a;border-radius:9px;padding:9px 20px;font:500 1.125rem/1.6 var(--serif);letter-spacing:.16em;transition:background .2s}.share-button img{flex:none}.share-button:hover{background:#36423c}.toast{position:fixed;z-index:30;left:50%;bottom:calc(88px + env(safe-area-inset-bottom));transform:translate(-50%,8px);background:var(--ink);color:var(--paper);padding:12px 18px;font-size:.875rem;line-height:1.7;max-width:calc(100% - 36px);width:max-content;opacity:0;visibility:hidden;transition:opacity .2s,transform .2s;border-radius:4px;pointer-events:none}.toast.visible{opacity:1;visibility:visible;transform:translate(-50%,0)}dialog{background:var(--paper);color:var(--ink);border:1px solid var(--rule);border-radius:4px;padding:28px;max-width:430px;width:calc(100% - 40px)}dialog::backdrop{background:rgba(27,39,31,.5)}.dialog-inner h2{font:500 1.5rem/1.5 var(--serif)}.dialog-inner>p{font-size:1rem;margin-top:12px}.dialog-inner input{width:100%;padding:12px;margin:18px 0;border:1px solid var(--rule);background:transparent;color:var(--ink);font-size:1rem}.skip-link{position:fixed;z-index:40;top:8px;left:8px;transform:translateY(-200%);padding:10px 20px;background:var(--ink);color:white}.skip-link:focus{transform:none}
@media(max-width:360px){.cover{padding:26px 20px 28px;min-height:613px}.logo-crop{width:76px;height:78px}.brand-name{font-size:1rem;letter-spacing:.12em}.brand-committee{font-size:.9375rem}.brand-rule{margin-top:10px}.title-art{width:247px;margin-top:14px}.invitation-label{margin-top:11px}.cover-poem{font-size:.9375rem}.cover-facts{margin-top:36px}.event-date{font-size:2.5rem}.event-place{font-size:.9375rem}.content-wrap{width:calc(100% - 40px)}.letter h2{font-size:1.25rem;letter-spacing:.015em}.letter-intro{font-size:.9375rem}.timeline-heading{gap:17px}.timeline-time{font-size:1.25rem;min-width:60px}.timeline-heading h3{font-size:1.125rem}.rendezvous h2{font-size:1.1875rem}.invitation-bar{padding-inline:20px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}}
@media print{.invitation-bar,.toast,.text-button{display:none}.cover{break-inside:avoid}.signoff{padding-bottom:30px}}
@media all{
.cover{padding-top:35px;padding-bottom:20px;min-height:638px}
.brand-name{margin-top:6px}.brand-rule{margin-top:9px}
.invitation-label{margin-top:9px;line-height:1.3}
.title-art{margin-top:7px;height:150px}.title-art img{transform:translateY(-8px)}
.cover-poem{margin-top:8px}.cover-facts{margin-top:40px}
.event-date{line-height:1}.event-time{margin-top:1px}
.event-place{margin-top:6px;line-height:1.5}.event-place:before{margin-bottom:12px}
.cover-art{height:844px;object-fit:cover;object-position:center top}
}
@media(max-width:360px){.cover{padding-top:26px;min-height:608px}.title-art{height:140px}.cover-facts{margin-top:32px}}
.content-wrap{position:relative;z-index:1}.event-date{font-weight:700}

/* Keep the invitation at its intended phone width on every screen. */
html{background:#e5e4de}
body{width:100%;max-width:390px;min-height:100svh;margin:0 auto;background:var(--paper)}
.invitation-bar{left:50%;right:auto;transform:translateX(-50%);width:100%;max-width:390px}
.toast{max-width:min(354px,calc(100% - 36px))}
dialog{max-width:350px}
.programme-title{font:500 1.125rem/1.7 var(--serif);letter-spacing:.06em;color:var(--gold);margin-bottom:24px}
.timeline-detail>.timeline-lead{font-size:1rem;line-height:1.85;letter-spacing:0;color:var(--ink);margin-bottom:6px}
.timeline-time small{font:400 .8125rem/1.4 var(--sans)}
.timeline-time{min-width:75px}
.programme-note{margin-top:24px}
.music-control{position:fixed;z-index:12;top:max(16px,env(safe-area-inset-top));right:max(14px,calc((100vw - 390px)/2 + 14px));display:flex;align-items:center;justify-content:center;width:44px;height:44px;padding:0;border:1px solid var(--rule);border-radius:50%;background:rgba(245,242,234,.94);color:var(--gold);box-shadow:0 2px 10px rgba(32,43,40,.05)}
.music-disc{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:1px solid rgba(149,107,45,.22);border-radius:50%;animation:music-orbit 8s linear infinite;animation-play-state:paused;opacity:.65;transition:opacity .2s}
.music-control[aria-pressed="true"] .music-disc{animation-play-state:running;opacity:1}.music-control[aria-busy="true"]{opacity:.7}.music-control[hidden]{display:none}
@keyframes music-orbit{to{transform:rotate(360deg)}}
@media print{.music-control{display:none}}
.map-preview{margin:0;border:1px solid var(--rule);background:rgba(255,255,255,.2)}
.map-preview figcaption{padding:13px 14px;font-size:.875rem;line-height:1.6}
.map-preview-frame{display:block;width:100%;height:250px;border:0;background:#f5f5f1}
.map-preview>p{margin:0;padding:10px 14px 12px;color:var(--secondary);font-size:.8125rem;line-height:1.8;text-align:left}
.location-actions{display:grid;grid-template-columns:1fr 1fr;margin-top:-1px;border:1px solid var(--rule);background:rgba(255,255,255,.2)}
.location-actions>a,.location-actions>button{display:flex;align-items:center;justify-content:center;gap:8px;min-height:50px;padding:10px 6px;border:0;background:transparent;text-decoration:none;font:400 .875rem/1.6 var(--sans);color:var(--gold)}
.location-actions>button{border-left:1px solid var(--rule);color:var(--ink)}
.location-actions>a:hover,.location-actions>button:hover{background:rgba(149,107,45,.06)}
.location-actions img{flex:none}
@media print{.location-actions{display:none}}
