@font-face{font-family:"Wedding Invitation";src:url("assets/fonts/wedding-wenkai-v2.woff2") format("woff2");font-style:normal;font-weight:400;font-display:swap}
:root{--motion-control:160ms;--motion-state:220ms;--motion-enter:560ms;--motion-title:600ms;--motion-body:680ms;--motion-photo:800ms;--motion-structure:820ms;--motion-stagger:90ms;--motion-border-delay:100ms;--motion-opening:1400ms;--ease-content:cubic-bezier(.22,.61,.36,1);--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;top:0;right:0;bottom:0;left:0;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 rgba(59,32,21,.13);box-shadow:0 0 70px #3b201520;overflow:hidden}.cover{min-height:100vh;min-height:100svh;min-height:var(--stable-cover-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:48px/1.15 Georgia,serif;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;top:0;right:0;bottom:0;left:0;inset:0;object-fit:cover;object-position:50% 43%;}.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.012)}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;top:5px;right:5px;bottom:5px;left:5px;inset:5px;border:1px solid rgba(173,135,86,.31);border-color:#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:100%;width:min(100%,540px);display:flex;background:rgba(245,240,230,.96);background:#f5f0e6f5;border-top:1px solid var(--line);padding:0 18px;padding-bottom:constant(safe-area-inset-bottom);padding-bottom:env(safe-area-inset-bottom);opacity:0;visibility:hidden;transition:opacity var(--motion-state),visibility var(--motion-state);-webkit-backdrop-filter:blur(8px);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}@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 print{.quick-nav,.scroll-cue,.rsvp-form,.receipt,.button,.text-button{display: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}
.colophon .filing{margin-top:12px;font:12px/1.8 var(--sans);letter-spacing:0}.colophon .filing a{margin-top:0;min-height:0;color:var(--muted)}
@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:46px;top:calc(env(safe-area-inset-top,0px) + 46px);left:10px;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;top:4px;right:4px;bottom:4px;left:4px;inset:4px;border-radius:50%;border:1px solid rgba(173,135,86,.5);border-color:#ad875680;background:rgba(245,240,230,.95);background:#f5f0e6f2;box-shadow:0 2px 8px rgba(73,46,48,.07);box-shadow:0 2px 8px #492e3012;z-index:-1}
.music-toggle svg{opacity:.65;transition:opacity var(--motion-control)}.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}}

/* Opening is decorative and never blocks scrolling, focus, or page loading. */
.opening{display:none;position:fixed;top:0;right:0;bottom:0;left:0;inset:0;z-index:25;pointer-events:none;background:var(--paper);color:var(--wine);place-items:center;text-align:center;padding:24px}
.opening::before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;inset:0;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")}
.opening-copy{position:relative;transform:translateY(-12px)}
.opening-label{font:11px/1.8 Georgia,serif;letter-spacing:3.5px;color:var(--muted);margin-bottom:22px}
.opening-names{font:400 30px/1.7 "Wedding Invitation","Kaiti SC","STKaiti","KaiTi",serif;font:400 clamp(27px,7.8vw,34px)/1.7 "Wedding Invitation","Kaiti SC","STKaiti","KaiTi",serif;letter-spacing:2px;white-space:nowrap}
.opening-names span{font:italic .8em Georgia,serif;color:var(--gold);margin:0 8px}
.opening-date{font:14px/1.8 Georgia,serif;letter-spacing:3px;margin-top:19px}
.has-opening .opening{display:grid;animation:opening-exit var(--motion-opening) var(--ease-content) both}
.has-opening .opening-copy{animation:opening-copy-in var(--motion-enter) var(--ease-content) both}
.opening-photo .cover-photo img{animation:cover-zoom var(--motion-photo) var(--motion-enter) var(--ease-content) both}
@keyframes opening-copy-in{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(-12px)}}
@keyframes opening-exit{0%,57%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}
@media(prefers-reduced-motion:reduce){.has-opening .opening{display:none}.opening-photo .cover-photo img{transform:none}}
@media print{.has-opening .opening{display:none}}

/* Longer personal verses keep the staggered portrait layout readable on phones. */
.invitation .story-intro{padding:0 22px;line-height:2.1}
.story-intro p+p{margin-top:15px}
.editorial-pair{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:18px;margin:36px 20px 0}
.side-note .large-amp{font-size:48px;line-height:1;margin-bottom:16px}
.invitation .side-note p{font-size:clamp(12px,3.2vw,17px);letter-spacing:0;line-height:2.1;margin:0}
.invitation .season-poem p+p,.life-poem p+p{margin-top:15px}
.poem-phrase{display:inline-block}
.side-note .mini-english{display:block;font-size:10px;letter-spacing:.5px;margin-top:20px}
.detail-pair{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.45fr);gap:18px;align-items:center;margin:36px 20px 0}
.season-poem,.life-poem{color:var(--wine);font-size:clamp(12px,3.2vw,17px);font-weight:400;line-height:2.1;text-align:center;letter-spacing:0}
.detail-photo{width:auto;min-width:0;margin:0}
.detail-photo img{aspect-ratio:2/3;object-position:center}
.detail-photo figcaption{font-size:11px;letter-spacing:0;line-height:1.8}
.invitation .rsvp-intro{line-height:2.1;margin-top:20px}
@media(max-width:360px){.editorial-pair,.detail-pair{margin-left:16px;margin-right:16px;gap:12px}.side-note .large-amp{font-size:36px}.side-note .mini-english{font-size:9px}.invitation .story-intro{font-size:15px}.invitation .rsvp-intro{font-size:16px}}

/* The official map stays inside the card; address copy remains available below it. */
.venue-map{margin:24px -23px 8px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:#e9e5dc}
.venue-map iframe{display:block;width:100%;height:380px;border:0}
@media(max-width:360px){.venue-map{margin-left:-17px;margin-right:-17px}}
@media print{.venue-map{display:none}}

/* Paper reveals: only opacity/transform animate on content; every reveal runs once. */
.motion-ready .reveal{
  transition:opacity var(--motion-body) var(--ease-content),transform var(--motion-body) var(--ease-content);
}
.motion-ready .reveal:not(.is-revealed){opacity:0;transform:translateY(10px)}
.motion-ready .section-heading.reveal,
.motion-ready .timeline.reveal,
.motion-ready .date-card.reveal,
.motion-ready .venue-card.reveal{opacity:1;transform:none;transition:none}
.motion-ready .section-heading.reveal>*{
  transition:opacity var(--motion-title) var(--ease-content),transform var(--motion-title) var(--ease-content);
  transition-delay:var(--heading-delay,0ms);
}
.section-heading>*:nth-child(2){--heading-delay:var(--motion-stagger)}
.section-heading>*:nth-child(3){--heading-delay:calc(var(--motion-stagger) * 2)}
.motion-ready .section-heading.reveal:not(.is-revealed)>*{opacity:0;transform:translateY(8px)}
.motion-ready .wide-photo.reveal,
.motion-ready .portrait-photo.reveal,
.motion-ready .detail-photo.reveal{transform:none;transition-duration:var(--motion-photo)}
.motion-ready .wide-photo.reveal img,
.motion-ready .portrait-photo.reveal img,
.motion-ready .detail-photo.reveal img{transition:transform var(--motion-photo) var(--ease-content)}
.motion-ready .wide-photo.reveal:not(.is-revealed) img,
.motion-ready .portrait-photo.reveal:not(.is-revealed) img,
.motion-ready .detail-photo.reveal:not(.is-revealed) img{transform:scale(1.012)}

/* Keep the card's geometry still while its two fine borders emerge. */
.date-card,.venue-card{position:relative;border-color:transparent}
.date-card::after,.venue-card::after{content:"";position:absolute;inset:-1px;border:1px solid var(--gold);pointer-events:none}
.venue-card::after{border-color:var(--line)}
.venue-card::before{content:"";position:absolute;inset:5px;border:1px solid #ad875650;pointer-events:none}
.motion-ready .date-card::after,.motion-ready .venue-card::after{
  transform-origin:center;transition:transform var(--motion-structure) var(--ease-content),opacity var(--motion-structure) var(--ease-content);
}
.motion-ready .date-card::before,.motion-ready .venue-card::before{
  transition:opacity calc(var(--motion-structure) - var(--motion-border-delay)) var(--ease-content) var(--motion-border-delay);
}
.motion-ready .date-card:not(.is-revealed)::after,
.motion-ready .venue-card:not(.is-revealed)::after{transform:scaleX(0);opacity:0}
.motion-ready .date-card:not(.is-revealed)::before,
.motion-ready .venue-card:not(.is-revealed)::before{opacity:0}
.motion-ready .card-content{transition:opacity var(--motion-body) var(--ease-content),transform var(--motion-body) var(--ease-content)}
.motion-ready .reveal:not(.is-revealed)>.card-content{opacity:0;transform:translateY(10px)}

/* Connected line segments unfold from the first diamond to the last. */
.timeline{--line-segments:2;--line-step:calc(var(--motion-structure) / var(--line-segments))}
.timeline li{--node-delay:calc(var(--node-index,0) * var(--line-step))}
.motion-ready .timeline li::before{
  transform-origin:top;transition:transform var(--line-step) linear var(--node-delay);
}
.motion-ready .timeline li::after{
  transition:opacity var(--motion-state) var(--ease-content) var(--node-delay);
}
.motion-ready .timeline li>time,.motion-ready .timeline li>div{
  transition:opacity var(--motion-body) var(--ease-content),transform var(--motion-body) var(--ease-content);
  transition-delay:calc(var(--node-delay) + var(--motion-stagger));
}
.motion-ready .timeline:not(.is-revealed) li::before{transform:scaleY(0)}
.motion-ready .timeline:not(.is-revealed) li::after{opacity:0}
.motion-ready .timeline:not(.is-revealed) li>time,
.motion-ready .timeline:not(.is-revealed) li>div{opacity:0;transform:translateY(6px)}

.quick-nav.visible.is-editing{opacity:0;visibility:hidden;pointer-events:none}
.quick-nav a{position:relative;min-height:48px;color:var(--muted);transition:color var(--motion-state),background-color var(--motion-control)}
.quick-nav a::before{content:"";position:absolute;top:0;left:24%;right:24%;height:2px;background:var(--wine);opacity:0;transform:scaleX(.5);transition:opacity var(--motion-state),transform var(--motion-state) var(--ease-content)}
.quick-nav a[aria-current="location"]{color:var(--wine);font-weight:600}
.quick-nav a[aria-current="location"]::before{opacity:1;transform:scaleX(1)}
.quick-nav a:active{background:#702b3b0a}
.button,.text-button,.music-toggle{transition:background-color var(--motion-control),color var(--motion-control),transform var(--motion-control),opacity var(--motion-state)}
.text-button:disabled{cursor:wait;opacity:.65}
.receipt:not([hidden]){animation:receipt-in var(--motion-enter) var(--ease-content) both}
@keyframes receipt-in{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:540px){.quick-nav{-webkit-backdrop-filter:none;backdrop-filter:none}}
/* Override the legacy short-screen rule with the height captured before
   WeChat's browser chrome opens or closes. */
@media(max-height:740px) and (max-width:540px){.cover{min-height:var(--stable-cover-height,740px)}}
/* Both fallbacks expose headings, borders, nodes and contents, including before app.js runs. */
@media(prefers-reduced-motion:reduce){
  .motion-ready .reveal,.motion-ready .reveal>*,.motion-ready .reveal img,
  .motion-ready .reveal li::before,.motion-ready .reveal li::after,
  .motion-ready .reveal li>*,.motion-ready .reveal::before,.motion-ready .reveal::after{opacity:1!important;transform:none!important}
  .motion-ready .timeline li::after{transform:rotate(45deg)!important}
  .button:active{transform:none}
}
@media print{
  .motion-ready .reveal,.motion-ready .reveal>*,.motion-ready .reveal img,
  .motion-ready .reveal li::before,.motion-ready .reveal li::after,
  .motion-ready .reveal li>*,.motion-ready .reveal::before,.motion-ready .reveal::after{opacity:1!important;transform:none!important;transition:none!important;animation:none!important}
  .motion-ready .timeline li::after{transform:rotate(45deg)!important}
}
