@font-face{font-family:Wedding Serif;src:url(/fonts/wedding-serif.woff2)format("woff2");font-display:swap;font-weight:400 700;font-style:normal}@font-face{font-family:Wedding Script;src:url(/fonts/great-vibes.ttf)format("truetype");font-display:swap;font-weight:400;font-style:normal}@font-face{font-family:Wedding Brush;src:url(/fonts/ma-shan-zheng-poster.ttf)format("truetype");font-display:swap;font-weight:400;font-style:normal}:root{color:#28342f;font-synthesis:none;--cream:#e9ece8;--paper:#f7f7f3;--rose:#807188;--rose-dark:#344c42;--sage:#5e7769;--gold:#8a8892;--accent-yellow:#dfbd50;--frame-moss:#52685d;--frame-plum:#766b79;--ink:#28342f;--muted:#68746f;--error:#a12622;--radius:24px;background:#e9ece8;font-family:Wedding Serif,Songti SC,STSong,Noto Serif SC,serif;font-size:16px;line-height:1.55}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--cream);min-width:320px;margin:0}p{margin-bottom:.72rem}button,input,select,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer;min-height:48px}img{width:100%;display:block}h1,h2,h3,p,figure{margin-top:0}h1,h2,h3{font-weight:500;line-height:1.25}.stage-transition{opacity:1;min-height:100vh;transition:opacity .26s,transform .26s;animation:.58s both stage-enter;transform:translateZ(0)}.stage-transition.is-exiting{opacity:0;transform:scale(.995)}.screen{min-height:100dvh;padding:max(28px, env(safe-area-inset-top)) max(20px, env(safe-area-inset-right)) max(30px, env(safe-area-inset-bottom)) max(20px, env(safe-area-inset-left));text-align:center;flex-direction:column;justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.cover-screen{color:#f5f4ee;background-color:#718078}.cover-screen:before,.cover-screen:after{content:"";pointer-events:none;position:absolute}.cover-screen:before{z-index:0;background:var(--title-background) center / cover no-repeat;filter:blur(11px);opacity:.78;inset:-18px;transform:scale(1.035)}.cover-screen:after{z-index:0;background-image:linear-gradient(90deg, #1e342c57, #1e342c08 34%, #1e342c08 66%, #1e342c57), radial-gradient(circle at center, transparent 22%, #0d1c1729 100%), var(--title-background);background-position:50%;background-repeat:no-repeat;background-size:100% 100%,100% 100%,auto 100%;inset:0}.game-screen:after,.success-screen:after{content:"";pointer-events:none;background:radial-gradient(circle,#0000 20%,#0d1c173d 100%);position:absolute;inset:0}.light-rays{z-index:0;filter:blur(13px);opacity:.68;pointer-events:none;background:repeating-linear-gradient(90deg,#e7ebef29 0 8%,#0000 14% 24%);width:130%;height:70%;animation:9s ease-in-out infinite alternate light-breathe;position:absolute;top:-12%;left:-35%;transform:rotate(-18deg)}.cover-content,.invitation-hero-content,.success-card{z-index:1;position:relative}.cover-content{width:min(100%,430px);padding:8vh 20px 5vh;transform:translateY(-17vh)}.cover-content:before{content:"";z-index:-1;filter:blur(7px);pointer-events:none;background:radial-gradient(#11231d80,#0000 72%);position:absolute;inset:-36px -24px}.cover-content>:not(button),.invitation-hero-content{text-shadow:0 2px 12px #07120ed1}.eyebrow{color:#d5d1da;letter-spacing:.25em;margin-bottom:.75rem;font-size:.76rem}.cover-script{letter-spacing:.025em;text-transform:none;margin-bottom:.4rem;font-family:Wedding Script,Snell Roundhand,cursive;font-size:clamp(2.15rem,10vw,3rem);line-height:1.1}.cover-divider{background:#e8e5ebb8;width:52px;height:1px;margin:0 auto 1.35rem;display:block}.cover-screen h1{letter-spacing:.12em;margin:0 0 1.25rem;font-size:clamp(2rem,9vw,3rem)}.cover-copy{letter-spacing:.2em;margin:0 0 1.65rem;font-size:1.08rem}.cover-screen small{color:#f1f1ebc2;margin-top:.8rem;display:block}.primary,.outline-button{letter-spacing:.12em;text-align:center;border-radius:999px;width:100%;max-width:340px;min-height:50px;padding:.75rem 1.5rem;text-decoration:none}.primary{color:#f7f7f3;background:linear-gradient(135deg,#63796e,#30483e);border:0;box-shadow:0 12px 28px #18302742}.outline-button{color:var(--rose-dark);background:#f8f9f68f;border:1px solid #5e77698c;justify-content:center;align-items:center;display:inline-flex}.text-button{color:var(--rose-dark);text-underline-offset:.3em;background:0 0;border:0;padding:.65rem 1rem;text-decoration:underline}.music-button{z-index:20;top:max(16px, env(safe-area-inset-top));right:max(16px, env(safe-area-inset-right));width:48px;height:48px;color:var(--rose-dark);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#f7f8f5e6;border:1px solid #8071888c;border-radius:50%;padding:0;position:fixed;box-shadow:0 8px 24px #1f332b29}.music-button span{font-size:1.35rem;display:block}.music-button.is-playing span{animation:4s linear infinite music-spin}.game-screen{color:var(--ink);background:radial-gradient(circle at 50% 24%,#f7f8f5,#d8dfdb)}.game-screen h1{z-index:1;letter-spacing:.18em;margin-bottom:.5rem;font-size:clamp(2.1rem,9vw,3rem)}.game-screen>p,.game-progress,.game-screen button{z-index:1;position:relative}.game-instruction{color:var(--muted);margin-bottom:.6rem}.game-progress{gap:.55rem;min-height:32px;margin-bottom:.5rem;display:flex}.game-progress span{color:#b6beb9;font-size:1.25rem;transition:color .25s,transform .25s}.game-progress span.is-collected{color:var(--gold);transform:scale(1.25)}.game-screen canvas{z-index:1;border-radius:var(--radius);touch-action:none;background:linear-gradient(#ffffff7a,#dee5e133);border:1px solid #5e776947;width:min(92vw,440px);height:min(52vh,470px)}.game-timer{color:var(--muted);margin:.65rem 0 0;font-size:.88rem}.invitation-page{background-blend-mode:multiply, multiply, normal;background-color:#e7dfca;background-image:radial-gradient(at 14% 18%,#7e5e3617,#0000 32%),radial-gradient(at 82% 66%,#45584b13,#0000 38%),linear-gradient(104deg,#fffcee24,#0000 42% 67%,#5b462b0e);background-size:100% 920px,100% 1080px,100% 100%;position:relative;overflow:hidden}.invitation-page:before{content:"";z-index:0;mix-blend-mode:multiply;opacity:.68;pointer-events:none;background:url(/textures/rough-paper.svg) 0 0/256px 256px;position:absolute;inset:0}.invitation-hero{z-index:2;text-align:center;color:#f5f4ee;flex-direction:column;justify-content:center;align-items:center;padding:0;display:flex;position:relative}.invitation-photo-frame{width:100%;height:var(--initial-hero-height,100vh);min-height:min(680px, var(--initial-hero-height,680px));background:#33483f;position:relative;overflow:hidden}.invitation-photo-frame:before,.invitation-photo-frame:after{content:"";pointer-events:none;position:absolute;inset:0}.invitation-photo-frame:before{z-index:0;background:var(--title-background) center / cover no-repeat;filter:blur(12px);opacity:.7;inset:-18px;transform:scale(1.04)}.invitation-photo-frame:after{z-index:2;background:linear-gradient(#12221d3d 0%,#0000 38% 72%,#12221d1f 100%)}.invitation-photo-frame>img{z-index:1;object-fit:cover;object-position:center;width:100%;height:100%;position:relative}.invitation-hero-content{z-index:3;text-shadow:0 3px 18px #07120edb;padding:0;position:absolute;inset:0}.poster-kicker{top:max(34px, calc(env(safe-area-inset-top) + 24px));text-align:left;max-width:min(88%,400px);margin:0;position:absolute;left:max(6.5%,50% - 200px)}.poster-kicker span{color:#f8f6ede6;letter-spacing:.32em;margin:-.2rem 0 0 .3rem;font-family:Wedding Serif,Songti SC,serif;font-size:.76rem;display:block}.poster-name-translation,.poster-welcome-translation{color:#efedf0cc;letter-spacing:.28em;font-family:Arial Narrow,Roboto Condensed,sans-serif;font-size:.6rem;display:block}.poster-kicker small{color:var(--accent-yellow);letter-spacing:.025em;text-shadow:0 2px 16px #141d19ad;white-space:nowrap;font-family:Wedding Script,Snell Roundhand,cursive;font-size:clamp(2.1rem,10vw,2.8rem);line-height:.9;display:block;transform:rotate(-4deg)}.poster-main-block{text-align:center;width:min(90%,540px);position:absolute;top:22%;left:50%;transform:translate(-50%)}.poster-title{letter-spacing:.1em;justify-content:center;align-items:baseline;gap:.3em;margin:0;font-family:Wedding Serif,Songti SC,serif;font-size:clamp(2rem,9.8vw,3.55rem);font-weight:500;line-height:1.15;display:flex}.poster-title span{white-space:nowrap}.poster-title em{color:var(--accent-yellow);font-family:Wedding Script,Snell Roundhand,cursive;font-size:.72em;font-style:normal;line-height:1}.poster-name-translation{margin:.75rem 0 0}.invitation-date{letter-spacing:.18em;margin:1rem 0 0;font-size:.82rem}.poster-welcome-block{text-align:left;width:min(76%,280px);position:absolute;top:47%;left:max(7%,50% - 200px)}.invitation-welcome{color:#f5f3ebf0;letter-spacing:.14em;margin:0;font-family:Wedding Serif,Songti SC,serif;font-size:.86rem;line-height:1.75}.poster-welcome-translation{letter-spacing:.25em;margin:.22rem 0 0;font-size:.52rem}.poster-divider{color:#6d7772;letter-spacing:.42em;justify-content:center;align-items:center;width:100%;min-height:82px;margin:0;padding:0 20px;font-family:Arial Narrow,Roboto Condensed,sans-serif;font-size:clamp(.58rem,2.5vw,.72rem);line-height:1.2;display:flex;transform:scaleY(.74)}.invitation-content{z-index:2;width:min(100%,680px);padding:42px max(20px, env(safe-area-inset-right)) max(48px, env(safe-area-inset-bottom)) max(20px, env(safe-area-inset-left));margin:auto;position:relative}.invitation-content section{text-align:center;margin:44px 0}.section-kicker{color:var(--gold);letter-spacing:.25em;margin-bottom:.65rem;font-size:.72rem;line-height:1.4}.invitation-content h2{letter-spacing:.12em;margin-bottom:1rem;font-size:clamp(1.75rem,7vw,2.25rem)}.prose-section{padding:0 4%}.prose-section p{letter-spacing:.055em;max-width:32rem;margin-bottom:1rem;margin-left:auto;margin-right:auto;font-size:.875rem;line-height:2.05}[data-reveal]{--reveal-x:0px;--reveal-rotate:0deg;opacity:0;transform:translate3d(var(--reveal-x), 30px, 0) rotate(var(--reveal-rotate));transition:opacity .8s,transform .9s cubic-bezier(.2,.7,.2,1)}[data-reveal].is-visible{opacity:1;transform:translate3d(0, 0, 0) rotate(var(--reveal-rotate))}.flourish{color:var(--rose);margin:1rem 0 1.4rem;font-size:1.5rem;display:block}.photo-frame{box-shadow:none;background:0 0;margin:34px 0;padding:0;position:relative}.photo-frame:before{display:none}.photo-frame img{aspect-ratio:3/2;object-fit:cover}.photo-outline{background:var(--frame-plum);padding:7px}.opening-collage{--reveal-x:-18px;min-height:clamp(320px,101vw,610px);margin:42px -3% 82px;position:relative}.opening-collage:before{content:"";aspect-ratio:1;border:1px solid #dfbd50b8;border-radius:50%;width:28%;position:absolute;top:4%;right:5%;transform:translate(36%,-30%)}.opening-collage:after{content:"";z-index:3;background:var(--accent-yellow);width:27%;height:1px;position:absolute;bottom:15%;right:2%;transform:rotate(-8deg)}.opening-collage .photo-frame{margin:0}.collage-photo-tall{z-index:1;width:68%;position:relative;transform:rotate(-2.4deg)}.collage-photo-tall img{aspect-ratio:3/4}.collage-photo-wide{z-index:2;background:var(--frame-moss);width:61%;position:absolute;bottom:0;right:-1%;transform:rotate(3.2deg)}.collage-photo-wide img{aspect-ratio:3/2}.collage-poem{z-index:2;width:32%;position:absolute;top:7%;right:-1%;transform:rotate(4deg)}.edge-photo-row{grid-template-columns:repeat(12,minmax(0,1fr));align-items:center;min-height:clamp(330px,94vw,520px);margin-top:48px;margin-bottom:66px;display:grid;position:relative}.edge-photo-row:after{content:"";z-index:2;pointer-events:none;border-top:1px solid #52685da6;border-right:1px solid #52685da6;width:58px;height:58px;position:absolute}.edge-left:after{top:2%;right:4%;transform:rotate(8deg)}.edge-right:after{bottom:4%;left:3%;transform:rotate(188deg)}.edge-photo{z-index:1;width:100%;margin:0}.edge-photo img{aspect-ratio:3/4}.edge-left{--reveal-x:-26px;margin-left:-5%}.edge-right{--reveal-x:26px;margin-right:-5%}.edge-left .edge-photo{grid-area:1/1/auto/span 9;transform:rotate(-2.8deg)}.edge-right .edge-photo{grid-column:4/span 9;transform:rotate(2.2deg)}.edge-left .edge-poem{z-index:2;grid-area:1/9/auto/span 4;transform:translateY(-34%)rotate(4deg)}.edge-right .edge-poem{z-index:2;grid-area:1/1/auto/span 4;transform:translateY(38%)rotate(-4deg)}.edge-poem{color:#74677d;letter-spacing:.095em;text-align:center;text-shadow:0 1px #ffffffb8;margin:0;font-family:Wedding Script,Snell Roundhand,cursive;font-size:clamp(1.08rem,4.4vw,1.55rem);line-height:1.36}.edge-poem span{margin:.16em 0;display:block}.portrait-grid{--reveal-x:20px;min-height:clamp(400px,118vw,610px);margin:72px -1% 86px;position:relative}.portrait-grid:before{content:"";aspect-ratio:1;border:1px solid #dfbd509e;border-radius:50%;width:44%;position:absolute;top:9%;right:-3%;transform:translate(18%)}.portrait-grid:after{content:"";background:var(--frame-plum);width:33%;height:1px;position:absolute;bottom:8%;left:3%;transform:rotate(13deg)}.portrait-grid .photo-frame{margin:0;position:absolute}.portrait-grid img{aspect-ratio:3/4}.portrait-primary{z-index:1;width:66%;top:0;left:0;transform:rotate(-2deg)}.portrait-secondary{z-index:2;background:var(--frame-moss);width:53%;bottom:0;right:0;transform:rotate(3.4deg)}.closing-photo{--reveal-x:18px;--reveal-rotate:1.5deg;width:91%;margin:70px 0 0 auto}.closing-photo img{aspect-ratio:3/2;object-position:center}.closing-section{background:#eae2cfeb;width:88%;position:relative;margin-top:-24px!important;padding:30px 24px 0!important}.details-card,.rsvp-callout,.form-section form,.closed-card,.success-card{border-radius:var(--radius);background:#f2efe3e6;border:1px solid #5e776947;padding:34px 24px;box-shadow:0 18px 50px #1f332b1c}.wedding-calendar{background:#fffffc94;border:1px solid #5e77693d;width:min(100%,330px);margin:1.6rem auto 2rem;padding:18px 15px 16px}.calendar-month{color:var(--rose-dark);letter-spacing:.2em;margin-bottom:.8rem;font-size:1.05rem}.calendar-month span{color:var(--gold)}.calendar-grid{grid-template-columns:repeat(7,1fr);display:grid}.calendar-grid>span{place-items:center;min-height:31px;font-size:.76rem;display:grid}.calendar-weekdays{color:var(--gold);margin-bottom:.25rem}.calendar-days{color:var(--muted)}.calendar-days .wedding-day{z-index:0;color:var(--rose-dark);font-weight:700;position:relative}.calendar-days .wedding-day:before{content:"♡";z-index:-1;color:#807188;font-size:2.55rem;line-height:1;position:absolute}.details-card h3{letter-spacing:.08em;margin-bottom:.45rem;font-size:1.35rem}.address{color:var(--muted)}.amap-card{color:var(--ink);text-align:left;background:#f5f6f2;border:1px solid #5e776959;border-radius:16px;grid-template-rows:142px auto;margin-top:1.5rem;text-decoration:none;display:grid;overflow:hidden;box-shadow:0 10px 28px #344c421a}.map-preview{background:#e8ece8;display:block;position:relative;overflow:hidden}.map-preview img{object-fit:cover;width:100%;height:100%;display:block}.map-unavailable{width:100%;height:100%;color:var(--muted);letter-spacing:.08em;background:radial-gradient(circle at 68% 30%,#80718821,#0000 28%),linear-gradient(135deg,#edf0ec,#e2e8e3);align-content:center;place-items:center;gap:.25rem;font-size:.72rem;display:grid}.map-unavailable span{color:var(--rose-dark);font-family:var(--font-latin);letter-spacing:.32em;font-size:1.2rem}.map-copy{flex-direction:column;justify-content:center;padding:14px 16px 16px;display:flex}.map-copy strong{font-size:.92rem;font-weight:600}.map-provider{color:var(--rose);letter-spacing:.14em;margin-bottom:.16rem;font-size:.68rem}.map-copy small{color:var(--muted);margin:.38rem 0 .55rem;font-size:.72rem;line-height:1.45}.map-copy>span{color:var(--rose-dark);font-size:.76rem}.timeline{max-width:420px;margin:2rem auto 0}.timeline-item{text-align:left;grid-template-columns:112px 20px 1fr;align-items:center;min-height:72px;display:grid}.timeline-item time{color:var(--rose-dark);font-size:.92rem;line-height:1.35}.timeline-item>span{border:2px solid var(--gold);border-radius:50%;width:8px;height:8px;position:relative}.timeline-item>span:after{content:"";background:#80718866;width:1px;height:61px;position:absolute;top:9px;left:1px}.timeline-item:last-child>span:after{display:none}.timeline-item p{margin:0}.rsvp-callout .primary{margin-top:1.1rem}.signature{color:var(--rose-dark);letter-spacing:.12em;font-size:1.2rem;margin-top:2rem!important}.closing-section .text-button,.music-credit{margin:.7rem auto 0;display:block}.music-credit{width:fit-content;color:var(--muted);font-size:.75rem;text-decoration:none}.form-section{padding:8px 0 0;scroll-margin-top:24px}.form-header{text-align:center;padding:0 8px 16px}.form-header h2{letter-spacing:.12em;margin-bottom:.7rem;font-size:clamp(2rem,9vw,2.8rem)}.form-header p:last-child{color:var(--muted)}.form-section form{margin-bottom:20px}.form-section label{margin:1.2rem 0;font-weight:600;display:block}.form-section input:not([type=radio]):not([type=checkbox]),.form-section textarea{width:100%;min-height:50px;color:var(--ink);background:#fffffcd6;border:1px solid #adb8b2;border-radius:12px;margin-top:.45rem;padding:.75rem .9rem;display:block}.form-section textarea{resize:vertical;min-height:96px}.form-section fieldset{border:0;margin:1.4rem 0;padding:0}.form-section legend{margin-bottom:.55rem;font-weight:600}.choice{align-items:center;gap:.7rem;min-height:48px;margin:.3rem 0!important;font-weight:400!important;display:flex!important}.choice input{width:21px;height:21px;accent-color:var(--rose-dark);flex:none}.accommodation-choice{padding:.4rem .2rem}.row{grid-template-columns:1fr 1fr;gap:1rem;display:grid}.required,.error{color:var(--error)}.error{background:#a1262214;border-radius:10px;padding:.7rem .9rem;font-weight:600}.privacy-note{color:var(--muted);text-align:center;margin:.8rem 0 0;font-size:.8rem}.closed-card{text-align:center}.falling-petals{z-index:1;pointer-events:none;position:fixed;inset:0;overflow:hidden}.falling-petal{opacity:0;background:linear-gradient(145deg,#f0efecc7,#8071887a);border-radius:70% 25% 65% 30%;width:13px;height:20px;animation:13s linear infinite petal-fall;position:absolute;top:-38px;box-shadow:0 3px 8px #1f332b1f}.falling-petals.is-paused .falling-petal{animation-play-state:paused}.petal-1{animation-duration:14s;animation-delay:-2s;left:7%}.petal-2{animation-duration:17s;animation-delay:-9s;left:18%;transform:scale(.7)}.petal-3{animation-duration:13s;animation-delay:-5s;left:31%}.petal-4{animation-duration:18s;animation-delay:-12s;left:44%;transform:scale(.6)}.petal-5{animation-duration:15s;animation-delay:-3s;left:57%}.petal-6{animation-duration:19s;animation-delay:-10s;left:68%;transform:scale(.75)}.petal-7{animation-duration:14s;animation-delay:-6s;left:79%}.petal-8{animation-duration:20s;animation-delay:-14s;left:89%;transform:scale(.65)}.petal-9{animation-duration:16s;animation-delay:-7s;left:96%}.success-screen{background:radial-gradient(circle at 50% 22%,#f7f8f5,#d5ded9)}.success-card{width:min(100%,500px)}.success-mark{border:1px solid var(--gold);width:64px;height:64px;color:var(--sage);border-radius:50%;place-items:center;margin:0 auto 1rem;font-size:1.6rem;display:grid}.success-card h1{font-size:clamp(2rem,9vw,2.7rem)}.success-name{color:var(--rose-dark)}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}:focus-visible{outline-offset:3px;outline:3px solid #536f83}button:disabled{cursor:wait;opacity:.6}@keyframes light-breathe{to{opacity:.42;transform:rotate(-16deg)translate(3%)}}@keyframes music-spin{to{transform:rotate(360deg)}}@keyframes stage-enter{0%{opacity:0;transform:scale(1.005)}}@keyframes petal-fall{0%{opacity:0;transform:translateY(-5vh)rotate(0)}8%{opacity:.55}52%{transform:translate(26px,52vh)rotate(210deg)}92%{opacity:.4}to{opacity:0;transform:translate(-20px,108vh)rotate(430deg)}}@media (width>=700px){.cover-content{transform:translateY(-18vh)}.invitation-photo-frame>img{object-fit:contain}.invitation-content{padding-top:70px}.edge-photo-row{margin-left:0;margin-right:0}.edge-left{margin-left:-12%}.edge-right{margin-right:-12%}.details-card,.rsvp-callout{padding:48px}}@media (width<=350px){.row{grid-template-columns:1fr;gap:0}.cover-content{padding-left:10px;padding-right:10px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.light-rays{animation:none}[data-reveal]{opacity:1;transform:none}.falling-petals{display:none}}
