@font-face{font-family:"Wedding Invitation";src:url("assets/fonts/wedding-wenkai-v1.woff2") format("woff2");font-style:normal;font-weight:400;font-display:swap}
:root{--paper:#f5f0e6;--wine:#702b3b;--ink:#492e30;--muted:#826b62;--gold:#ad8756;--line:#cdb9a5;--serif:"Songti SC","Noto Serif CJK SC","Source Han Serif SC","STSong","SimSun",serif;--sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:20px}body{margin:0;background:#ded5c7;color:var(--ink);font-family:var(--serif);font-size:16px;line-height:1.8;-webkit-font-smoothing:antialiased}body:before{content:"";position:fixed;inset:0;pointer-events:none;z-index:10;opacity:.11;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.82' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%2399866c' filter='url(%23n)' opacity='.4' d='M0 0h180v180H0z'/%3E%3C/svg%3E")}a{color:inherit}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button,a{touch-action:manipulation}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--wine);outline-offset:5px}h1,h2,h3,p,figure{margin:0}img{display:block;width:100%;height:auto}.invitation{max-width:540px;margin:auto;background:var(--paper);box-shadow:0 0 70px #3b201520;overflow:hidden}.cover{min-height:100svh;padding:20px 24px 24px;text-align:center;display:flex;flex-direction:column}.edition{display:flex;justify-content:space-between;padding-bottom:10px;border-bottom:1px solid var(--line);font:12px/1.5 Georgia,serif;letter-spacing:1.3px;color:var(--wine)}.cover-title{padding:22px 0 20px;color:var(--wine)}.eyebrow{font-size:12px;letter-spacing:3px;margin-bottom:5px}.cover h1{font:clamp(38px,10vw,56px)/1.15 Georgia,serif;letter-spacing:-1.8px;white-space:nowrap}.cover h1 em{font-weight:normal;font-size:.73em}.cover-photo{position:relative;flex:1;min-height:280px;max-height:510px;overflow:hidden}.cover-photo img{height:100%;position:absolute;inset:0;object-fit:cover;object-position:50% 43%;animation:cover-zoom 18s ease-out both}.cover-photo figcaption{position:absolute;bottom:15px;left:0;right:0;font:12px Georgia,serif;letter-spacing:3px;color:#fff6e6;text-shadow:0 1px 5px #000}.cover-details{padding:20px 0 0}.cover-details h2{font-size:28px;font-weight:400;letter-spacing:4px;color:var(--wine)}.cover-details h2 span{font:italic 23px Georgia,serif;color:var(--gold);margin:0 7px}.cover-date{font:14px/1.8 var(--sans);letter-spacing:1px;margin:7px 0 3px}.cover-details p:last-child{font-size:14px;color:var(--muted)}.scroll-cue{font-size:12px;text-decoration:none;letter-spacing:1.4px;margin-top:18px;min-height:30px}.scroll-cue span{display:block;font-size:18px;line-height:1.3;color:var(--wine)}@keyframes cover-zoom{from{transform:scale(1.035)}to{transform:scale(1)}}@media(min-width:541px){.cover{min-height:900px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}}
.section{padding:64px 28px;position:relative}.section-heading{text-align:center;color:var(--wine);margin-bottom:32px}.section-heading .eyebrow{font:12px/1.8 Georgia,serif;letter-spacing:2px;margin-bottom:13px}.section-heading h2{font-size:28px;font-weight:400;letter-spacing:3px;line-height:1.5}.english{font:italic 17px/1.7 Georgia,serif;color:var(--muted);margin-top:6px}.story{padding-left:0;padding-right:0;padding-bottom:70px}.story-intro{text-align:center;padding:0 20px;margin-bottom:34px;color:var(--muted);font-size:16px;line-height:2.1}.wide-photo img{aspect-ratio:1.5;object-fit:cover}.wide-photo figcaption{margin:13px 24px 0;display:flex;justify-content:space-between;color:var(--muted);font-size:12px}.wide-photo figcaption span:first-child{font-family:Georgia,serif;letter-spacing:1px}.editorial-pair{display:grid;grid-template-columns:1.5fr 1fr;gap:22px;align-items:center;margin:36px 24px 0}.portrait-photo{padding:6px;border:1px solid var(--line)}.portrait-photo img{aspect-ratio:2/3;object-fit:cover}.side-note{text-align:center;color:var(--wine)}.large-amp{display:block;font:italic 78px/1.1 Georgia,serif;color:var(--gold);opacity:.7}.side-note p{font-size:20px;line-height:2;letter-spacing:4px;margin:15px 0}.mini-english{font:12px/1.7 Georgia,serif;letter-spacing:1px;color:var(--muted)}.detail-photo{width:62%;margin:32px 24px 0 auto}.detail-photo img{aspect-ratio:4/5;object-fit:cover;object-position:50% 36%}.detail-photo figcaption{font-size:12px;color:var(--muted);text-align:right;margin-top:12px;letter-spacing:1px}.date-section{border-top:1px solid var(--line);background:#efe7d9}.date-card{text-align:center;border:1px solid var(--gold);padding:27px 20px 25px;position:relative}.date-card:before{content:"";position:absolute;inset:5px;border:1px solid #ad875650;pointer-events:none}.month-label{font:14px/1.5 Georgia,serif;letter-spacing:3px;color:var(--wine)}.large-date{font:106px/1.1 Georgia,serif;color:var(--wine);margin:8px 0}.full-date{font-size:18px}.lunar{font-size:14px;color:var(--muted);margin:3px 0 22px}.calendar{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:5px 2px;max-width:300px;margin:auto;font:14px/32px Georgia,var(--serif)}.calendar .weekday{font:12px/32px var(--sans);color:var(--muted)}.calendar .wedding-day{background:var(--wine);color:var(--paper);border-radius:50%;width:32px;margin:auto;position:relative}.time-note{font-size:14px;margin-top:22px}.time-note strong{font:20px Georgia,serif;color:var(--wine)}.countdown-wrap{text-align:center;margin-top:35px}.countdown-caption{font-size:14px;letter-spacing:2px}.countdown{display:flex;align-items:flex-start;justify-content:center;gap:9px;margin-top:14px;color:var(--wine)}.countdown div{min-width:51px}.countdown strong{display:block;font:38px/1.4 Georgia,serif;font-variant-numeric:tabular-nums}.countdown span{display:block;font-size:12px;color:var(--muted)}.countdown i{font:24px/2 Georgia,serif;color:var(--gold)}.date-footnote{font-size:14px;color:var(--muted);margin-top:23px}.schedule-section{background:var(--wine);color:var(--paper)}.schedule-section .section-heading,.schedule-section .english{color:var(--paper)}.schedule-section .eyebrow{color:#dcbca3}.timeline{list-style:none;padding:0;margin:42px 0 28px}.timeline li{display:grid;grid-template-columns:76px 1fr;gap:28px;position:relative;padding:0 0 38px}.timeline li:last-child{padding-bottom:0}.timeline li:before{content:"";position:absolute;left:87px;top:12px;bottom:-12px;width:1px;background:#c2a38680}.timeline li:last-child:before{display:none}.timeline li:after{content:"";position:absolute;left:83px;top:10px;width:9px;height:9px;border:1px solid #ddba91;background:var(--wine);transform:rotate(45deg)}.timeline time{font:26px/1.4 Georgia,serif;color:#efcfab;font-variant-numeric:tabular-nums}.timeline h3{font-size:20px;font-weight:400;letter-spacing:2px;line-height:1.8}.timeline p{font-size:14px;line-height:1.9;color:#e1c9c7;margin-top:5px}.schedule-note{text-align:center;font-size:12px;color:#e1c9c7;letter-spacing:1px}.venue-section{padding-bottom:32px}.venue-card{padding:20px 23px 10px;border:1px solid var(--line);text-align:center}.venue-top{display:flex;justify-content:space-between;padding-bottom:17px;border-bottom:1px solid var(--line);font:12px/1.5 Georgia,serif;letter-spacing:1px;color:var(--muted)}.venue-city{font-size:14px;letter-spacing:5px;color:var(--muted);margin:28px 0 9px}.venue-card h3{font-size:25px;font-weight:400;line-height:1.6;color:var(--wine)}.venue-address{font-size:16px;line-height:1.9;margin:15px 0 20px;overflow-wrap:anywhere}.venue-rule{height:1px;width:36px;background:var(--gold);margin:auto}.venue-invitation{font-size:14px;color:var(--muted);margin:23px 0}.button{border:1px solid var(--wine);background:var(--wine);color:var(--paper);display:flex;align-items:center;justify-content:center;gap:24px;width:100%;min-height:48px;padding:10px 18px;font-size:16px;text-decoration:none;cursor:pointer;letter-spacing:2px;border-radius:2px}.button:hover{background:#592030}.button:active{transform:translateY(1px)}.text-button{border:0;background:none;text-decoration:underline;text-underline-offset:5px;font-size:14px;color:var(--wine);cursor:pointer;min-height:44px;margin-top:6px}.feedback{font:13px/1.7 var(--sans);color:var(--wine);overflow-wrap:anywhere}.feedback:not(:empty){padding:10px 0}.rsvp-section{padding-top:35px}.rsvp-intro{font-size:16px;margin-top:15px;color:var(--muted)}.rsvp-form label{display:block;font-size:14px;margin-bottom:8px}.rsvp-form label span{float:right;font-size:12px;color:var(--muted)}input,select,textarea{border:1px solid #bdab99;background:#fffcf540;border-radius:0;color:var(--ink);width:100%;padding:11px 12px;font:16px/1.6 var(--sans);min-height:48px}input::placeholder,textarea::placeholder{color:#87766c;font-size:14px}textarea{resize:vertical}input{margin-bottom:23px}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:23px}.form-row label{font-size:13px}.rsvp-form .button{margin-top:24px}.form-note{font-size:12px;text-align:center;line-height:1.9;color:var(--muted);margin-top:14px}select:disabled{opacity:.45}.receipt{margin-top:25px;border-top:1px solid var(--line);padding-top:25px}.receipt h3{font-size:23px;font-weight:400;color:var(--wine)}.receipt p{font-size:14px;margin:5px 0 12px}.receipt textarea{font-size:14px;margin-bottom:14px}.closing-image{position:relative}.closing-image img{aspect-ratio:2/3;object-fit:cover}.closing-image:after{content:"";position:absolute;inset:40% 0 0;background:linear-gradient(transparent,#241714c9);pointer-events:none}.closing-copy{position:absolute;bottom:38px;left:15px;right:15px;text-align:center;color:#fff5e5;z-index:1}.closing-copy h2{font-size:29px;font-weight:400;letter-spacing:3px;line-height:1.6;margin:8px 0 13px}.closing-copy h2 span{padding:0 4px}.closing-copy>p:last-child{font-size:14px;letter-spacing:2px}.colophon{text-align:center;padding:28px 20px 92px;color:var(--wine)}.colophon p:first-child{font-size:20px;letter-spacing:3px}.colophon p:nth-child(2){font:11px/2 Georgia,serif;letter-spacing:2px;margin-top:5px}.colophon a{display:inline-block;font-size:12px;margin-top:15px;min-height:32px;text-underline-offset:4px}.quick-nav{position:fixed;z-index:20;bottom:0;left:50%;transform:translateX(-50%);width:min(100%,540px);display:flex;background:#f5f0e6f5;border-top:1px solid var(--line);padding:0 18px env(safe-area-inset-bottom);opacity:0;visibility:hidden;transition:opacity .3s,visibility .3s;backdrop-filter:blur(8px)}.quick-nav.visible{opacity:1;visibility:visible}.quick-nav a{flex:1;text-align:center;padding:12px 6px;font-size:14px;color:var(--wine);text-decoration:none}.quick-nav a[aria-current="location"]{box-shadow:inset 0 2px var(--wine)}.reveal{transition:opacity .75s ease,transform .75s ease}.reveal.pending{opacity:0;transform:translateY(16px)}@media(max-width:360px){.cover{padding-left:19px;padding-right:19px}.cover-title{padding:18px 0}.cover-details h2{font-size:25px;letter-spacing:2px}.section{padding-left:22px;padding-right:22px}.story{padding-left:0;padding-right:0}.section-heading h2{font-size:25px;letter-spacing:2px}.date-card{padding-left:14px;padding-right:14px}.countdown{gap:5px}.countdown strong{font-size:34px}.venue-card{padding-left:17px;padding-right:17px}.venue-card h3{font-size:23px}.closing-copy h2{font-size:25px;letter-spacing:2px}.timeline li{gap:22px}.form-row{gap:10px}}@media(max-height:740px) and (max-width:540px){.cover{min-height:740px}}@media(prefers-reduced-motion:reduce){.reveal.pending{opacity:1;transform:none}}@media print{.quick-nav,.scroll-cue,.rsvp-form,.receipt,.button,.text-button{display:none}.reveal.pending{opacity:1;transform:none}.invitation{box-shadow:none}.section{break-inside:avoid}.cover{height:900px}.closing-copy{position:static;color:var(--wine)}.closing-image:after{display:none}}

[hidden]{display:none!important}.honey{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}.button:disabled{opacity:.65;cursor:wait}#submit-status{text-align:center;margin-top:16px}

/* Softer invitation typography: WenKai for Chinese prose; Georgia keeps the editorial accents. */
.invitation{--invite:"Wedding Invitation","Kaiti SC","STKaiti","KaiTi","PingFang SC",serif;font-family:var(--invite);font-weight:400}
.invitation .cover-details h2{font-size:31px;letter-spacing:2px;line-height:1.6}
.invitation .section-heading h2{font-size:29px;letter-spacing:1.8px;line-height:1.6}
.invitation .story-intro{font-size:17px;line-height:2.05;letter-spacing:.3px}
.invitation .side-note p{font-size:22px;letter-spacing:2px}
.invitation .timeline h3{font-size:22px;letter-spacing:1.5px}
.invitation .timeline p{font-size:16px;line-height:1.85}
.invitation .venue-card h3{font-size:27px;letter-spacing:.5px}
.invitation .venue-address{font-size:17px;line-height:1.9}
.invitation .venue-invitation,.invitation .date-footnote{font-size:16px}
.invitation .rsvp-intro{font-size:17px}
.invitation .button{font-family:var(--invite);font-size:18px;letter-spacing:1px}
.invitation .full-date{font-size:19px}
.invitation .closing-copy h2{font-size:31px;letter-spacing:1.5px}
.invitation .closing-copy>p:last-child{font-size:16px;letter-spacing:1px}
.invitation .colophon p:first-child{font-size:22px;letter-spacing:2px}
@media(max-width:360px){.invitation .cover-details h2{font-size:28px}.invitation .section-heading h2{font-size:26px}.invitation .venue-card h3{font-size:25px}.invitation .closing-copy h2{font-size:27px}}

/* A quiet music control within the invitation's left edge, clear of the edition line. */
.music-toggle{position:fixed;z-index:30;top:calc(env(safe-area-inset-top,0px) + 46px);left:max(10px,calc((100vw - 540px)/2 + 10px));width:44px;height:44px;padding:0;border:0;background:transparent;color:var(--wine);display:grid;place-items:center;cursor:pointer;border-radius:50%;touch-action:manipulation}
.music-toggle:before{content:"";position:absolute;inset:4px;border-radius:50%;border:1px solid #ad875680;background:#f5f0e6f2;box-shadow:0 2px 8px #492e3012;z-index:-1}
.music-toggle svg{opacity:.65;transition:opacity .2s}.music-toggle.is-playing svg{opacity:1}.music-toggle.is-playing .music-slash{display:none}.music-toggle:active{transform:scale(.96)}
@media(prefers-reduced-motion:reduce){.music-toggle svg{transition:none}.music-toggle:active{transform:none}}
@media print{.music-toggle{display:none}}
