@font-face{font-family:'Be Vietnam Pro';font-style:normal;font-weight:300;font-display:swap;src:url(fonts/BeVietnamPro-300-vietnamese.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Be Vietnam Pro';font-style:normal;font-weight:300;font-display:swap;src:url(fonts/BeVietnamPro-300-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Be Vietnam Pro';font-style:normal;font-weight:500;font-display:swap;src:url(fonts/BeVietnamPro-500-vietnamese.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Be Vietnam Pro';font-style:normal;font-weight:500;font-display:swap;src:url(fonts/BeVietnamPro-500-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Be Vietnam Pro';font-style:normal;font-weight:600;font-display:swap;src:url(fonts/BeVietnamPro-600-vietnamese.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Be Vietnam Pro';font-style:normal;font-weight:600;font-display:swap;src:url(fonts/BeVietnamPro-600-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Playfair Display';font-style:normal;font-weight:400;font-display:swap;src:url(fonts/PlayfairDisplay-400-vietnamese.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Playfair Display';font-style:normal;font-weight:400;font-display:swap;src:url(fonts/PlayfairDisplay-400-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}html[data-locked="1"]{overflow:hidden;height:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font-body);font-size:15px;line-height:1.75;font-weight:300;-webkit-font-smoothing:antialiased;overflow-x:hidden}body::before{content:"";position:fixed;inset:0;z-index:0;background-image:url(assets/img/paper.webp);background-size:128px 128px;opacity:var(--paper-opacity);pointer-events:none;mix-blend-mode:multiply}img{display:block;max-width:100%;height:auto}.ph{width:100%;aspect-ratio:3/4;background:var(--bg-alt)}.inv{position:relative;z-index:1}.inv[aria-hidden="true"]{visibility:hidden}.inv[aria-hidden="false"]{visibility:visible}.sc{padding:50px 26px;text-align:center;position:relative}.sc.full{padding:0}.sc + .sc{padding-top:0}.sc-hero + .sc{padding-top:62px}.label{margin:0 0 16px;font-size:11px;font-weight:600;letter-spacing:var(--track-label);text-transform:uppercase;color:var(--ink-faint)}.label.sm{font-size:10px;margin-bottom:10px}.sub{margin:-6px 0 22px;font-size:13.5px;color:var(--ink-soft);font-weight:300}.rule{display:flex;align-items:center;justify-content:center;gap:12px;margin:0 auto 26px;max-width:190px}.rule span{flex:1;height:1px;background:var(--rule)}.rule i{font-style:normal;font-size:7px;color:var(--accent)}.btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:0 22px;border:1px solid var(--rule);border-radius:999px;background:transparent;color:var(--ink);font-family:inherit;font-size:12.5px;font-weight:500;letter-spacing:.06em;text-decoration:none;cursor:pointer;transition:background .25s ease,border-color .25s ease,color .25s ease}.btn:active{background:var(--bg-alt)}.btn.ghost{color:var(--ink-soft)}.btn.solid{background:var(--ink);color:var(--bg);border-color:var(--ink);width:100%}.music{position:fixed;top:14px;right:14px;z-index:40;width:40px;height:40px;border-radius:50%;border:1px solid var(--rule);background:color-mix(in srgb,var(--bg) 82%,transparent);backdrop-filter:blur(8px);cursor:pointer;opacity:0;pointer-events:none;transition:opacity .5s ease;display:grid;place-items:center}html:not([data-locked="1"]) .music{opacity:1;pointer-events:auto}.music-ico{width:13px;height:13px;border-radius:50%;border:1px solid var(--ink-soft);position:relative}.music-ico::after{content:"";position:absolute;inset:4px;border-radius:50%;background:var(--ink-soft)}.music[aria-pressed="true"] .music-ico{animation:spin 4s linear infinite}.lb{position:fixed;inset:0;z-index:90;background:color-mix(in srgb,var(--ink) 92%,transparent);display:grid;place-items:center;padding:18px}.lb[hidden]{display:none}.lb-img img{max-height:84vh;width:auto;border-radius:4px}.lb-x{position:absolute;top:12px;right:12px;width:44px;height:44px;border:0;border-radius:50%;background:rgba(255,255,255,.14);color:#fff;font-size:26px;line-height:1;cursor:pointer}@media (min-width:620px){body{max-width:470px;margin:0 auto;box-shadow:0 0 60px rgba(0,0,0,.10);min-height:100vh}.music{right:max(14px,calc(50vw - 235px + 14px))}}:root{--ease-out-soft:cubic-bezier(.22,1,.36,1);--ease-in-out:cubic-bezier(.65,0,.35,1);--dur-fast:420ms;--dur-base:720ms;--dur-slow:940ms}[data-anim] > .anim{opacity:0;will-change:opacity,transform}[data-anim="fadeUp"] > .anim{transform:translateY(26px)}[data-anim="fadeScale"] > .anim{transform:scale(.94)}[data-anim="maskReveal"] > .anim{opacity:1;clip-path:inset(100% 0 0 0)}[data-anim].is-in > .anim{opacity:1;transform:none;clip-path:inset(0);transition:opacity   var(--dur-base) var(--ease-out-soft),transform var(--dur-base) var(--ease-out-soft),clip-path var(--dur-slow) var(--ease-out-soft)}[data-anim].is-in > .anim{will-change:auto}.stagger > *{opacity:0;transform:translateY(18px)}.is-in .stagger > *,.stagger.is-in > *{opacity:1;transform:none;transition:opacity 560ms var(--ease-out-soft),transform 560ms var(--ease-out-soft);transition-delay:calc(var(--i,0) * 110ms)}.env{position:fixed;inset:0;z-index:60;display:grid;place-content:center;gap:30px;background:var(--bg);cursor:pointer;border:0;padding:0;animation:envIn var(--dur-fast) var(--ease-out-soft) both}@keyframes envIn{from{opacity:0}to{opacity:1}}.env-stage{position:relative;width:292px;height:202px;margin:0 auto}.env-box{position:absolute;inset:0;transform:translateY(40px) scale(.96);opacity:0;animation:envRise 800ms var(--ease-out-soft) 200ms both,envFloat 4.2s var(--ease-in-out) 1.2s infinite}@keyframes envRise{to{transform:translateY(0) scale(1);opacity:1}}@keyframes envFloat{0%,100%{translate:0 0}50%{translate:0 -7px}}.env-shadow{position:absolute;left:50%;bottom:-22px;width:210px;height:16px;translate:-50% 0;background:radial-gradient(ellipse at center,color-mix(in srgb,var(--ink) 22%,transparent),transparent 70%);filter:blur(5px);opacity:0;animation:shadowIn 800ms ease 200ms both,shadowBeat 4.2s var(--ease-in-out) 1.2s infinite}@keyframes shadowIn{to{opacity:1}}@keyframes shadowBeat{0%,100%{transform:scaleX(1);opacity:.9}50%{transform:scaleX(.88);opacity:.6}}.env-back,.env-front,.env-flap,.env-liner{position:absolute;inset:0}.env-back{background:var(--env-body);border-radius:3px}.env-liner{background:var(--env-liner);clip-path:polygon(0 0,100% 0,50% 62%);transform-origin:top center;backface-visibility:hidden}.env-front{background:var(--env-body);border-radius:3px;clip-path:polygon(0 100%,0 8%,50% 66%,100% 8%,100% 100%);box-shadow:0 1px 0 color-mix(in srgb,var(--ink) 7%,transparent) inset;z-index:3}.env-flap{background:var(--env-flap);clip-path:polygon(0 0,100% 0,50% 64%);transform-origin:top center;transform:rotateX(0deg);z-index:4;backface-visibility:hidden;box-shadow:0 1px 2px color-mix(in srgb,var(--ink) 6%,transparent)}.env-stage{perspective:900px}.env-card{position:absolute;left:50%;top:50%;width:168px;aspect-ratio:3/4;translate:-50% -46%;transform:translateY(6%) scale(.97);border-radius:2px;overflow:hidden;z-index:2;box-shadow:0 6px 20px color-mix(in srgb,var(--ink) 16%,transparent);opacity:0}.env-card img{width:100%;height:100%;object-fit:cover}.env-seal{position:absolute;left:50%;top:58%;z-index:6;width:46px;height:46px;translate:-50% -50%;display:grid;place-items:center;animation:sealBeat 2.4s var(--ease-in-out) 1.4s infinite}.env-seal-body{width:46px;height:46px;border-radius:50%;background:var(--env-seal);display:grid;place-items:center;color:var(--bg);font-family:var(--font-display);font-size:15px;font-weight:400;letter-spacing:.04em;box-shadow:0 2px 6px color-mix(in srgb,var(--ink) 22%,transparent),inset 0 -1px 3px color-mix(in srgb,var(--ink) 18%,transparent)}@keyframes sealBeat{0%,100%{transform:scale(1)}50%{transform:scale(1.055)}}.env-seal-ring{position:absolute;inset:0;border-radius:50%;border:1px solid var(--env-seal);animation:ringOut 2.4s var(--ease-out-soft) 1.4s infinite}@keyframes ringOut{0%{transform:scale(1);opacity:.65}70%{transform:scale(2.1);opacity:0}100%{transform:scale(2.1);opacity:0}}.env-hint{margin:0;text-align:center;font-size:12px;font-weight:500;letter-spacing:var(--track-label);text-transform:uppercase;color:var(--ink-faint);opacity:0;animation:hintIn 420ms ease 900ms both,hintPulse 2.6s var(--ease-in-out) 1.4s infinite}@keyframes hintIn{to{opacity:1}}@keyframes hintPulse{0%,100%{opacity:.5}50%{opacity:1}}.env.go{cursor:default}.env.go .env-box{animation:envRise 0s both}.env.go .env-shadow{animation:shadowIn 0s both;opacity:.5;transition:opacity 900ms ease 1.3s}.env.go .env-hint{animation:none;opacity:0;transition:opacity 240ms ease}.env.go .env-seal{animation:sealPop 150ms var(--ease-out-soft) both,sealBreak 520ms var(--ease-out-soft) 150ms both}@keyframes sealPop{to{transform:scale(1.15)}}@keyframes sealBreak{0%{transform:scale(1.15);opacity:1}100%{transform:scale(.6) translateY(26px) rotate(-14deg);opacity:0}}.env.go .env-seal-ring{animation:ringBurst 700ms var(--ease-out-soft) 150ms both}@keyframes ringBurst{from{transform:scale(1);opacity:.8;border-width:2px}to{transform:scale(3.4);opacity:0;border-width:1px}}.env.go .env-flap{animation:flapOpen 800ms var(--ease-in-out) 450ms both}@keyframes flapOpen{from{transform:rotateX(0deg)}to{transform:rotateX(-168deg)}}.env.go .env-liner{animation:linerShow 600ms var(--ease-in-out) 950ms both}@keyframes linerShow{from{transform:rotateX(0deg);opacity:1}to{transform:rotateX(-150deg);opacity:.35}}.env.go .env-card{animation:cardRise 900ms var(--ease-out-soft) 1300ms both,cardZoom 700ms var(--ease-in-out) 2000ms both}@keyframes cardRise{from{transform:translateY(6%) scale(.97);opacity:0}60%{opacity:1}to{transform:translateY(-58%) scale(1);opacity:1}}@keyframes cardZoom{0%{transform:translateY(-58%) scale(1)}55%{transform:translateY(-58%) scale(1.05)}100%{transform:translateY(-58%) scale(1)}}.env.gone{animation:envOut 420ms ease both;pointer-events:none}@keyframes envOut{to{opacity:0;visibility:hidden}}@keyframes kenBurns{from{transform:scale(1)}to{transform:scale(1.06)}}[data-anim-img="kenBurns"]{animation:kenBurns 15s var(--ease-in-out) forwards}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){[data-anim] > .anim,.stagger > *{opacity:1 !important;transform:none !important;clip-path:none !important}[data-anim].is-in > .anim,.is-in .stagger > *{transition:opacity 200ms linear !important;transition-delay:0s !important}[data-anim-img]{animation:none !important}.env-box,.env-shadow,.env-seal,.env-seal-ring,.env-hint{animation:none !important;opacity:1 !important}.env-box{transform:none !important}.env.go .env-flap,.env.go .env-liner,.env.go .env-card,.env.go .env-seal{animation:none !important}.env.go{transition:opacity 500ms linear;opacity:0}.env.gone{animation:none !important;opacity:0;visibility:hidden}.music[aria-pressed="true"] .music-ico{animation:none !important}}.sc-hero{padding:66px 22px 0}.hero-photo{width:72%;margin:0 auto;border-radius:var(--radius);overflow:hidden;aspect-ratio:3/4;box-shadow:0 14px 40px color-mix(in srgb,var(--ink) 10%,transparent)}.hero-photo img{width:100%;height:100%;object-fit:cover}.hero-text{margin-top:26px}.names{margin:0 0 14px;font-family:var(--font-display);font-weight:400;font-size:var(--scale-hero);line-height:1.16;letter-spacing:-.005em;color:var(--ink)}.names span{display:block}.names .amp{font-size:.58em;color:var(--accent);margin:2px 0;font-style:italic;font-weight:400}.letter{margin:0 auto;max-width:310px;font-size:15px;line-height:1.85;font-weight:300;color:var(--ink-soft)}.fams{display:grid;grid-template-columns:1fr auto 1fr;align-items:start;gap:0 13px}.fam-div{width:1px;align-self:stretch;background:var(--rule)}.fam p{margin:0}.fam-n{font-size:13.5px;font-weight:500;line-height:1.7}.fam-a{margin-top:7px !important;font-size:11px;font-weight:300;color:var(--ink-faint);line-height:1.6}.fam-r{margin-top:12px !important;font-size:12px;color:var(--accent);font-weight:500;letter-spacing:.02em}.big-date{margin:4px 0 0;font-family:var(--font-display);font-weight:400;font-size:var(--scale-date);line-height:1;letter-spacing:-.02em;color:var(--ink)}.big-date .dot{color:var(--accent)}.year{margin:10px 0 0;font-size:13px;font-weight:500;letter-spacing:var(--track-label);color:var(--ink-soft)}.lunar{margin:14px 0 0;font-size:12px;font-weight:300;color:var(--ink-faint)}.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px 2px;max-width:300px;margin:0 auto}.cal-h{font-style:normal;font-size:10px;font-weight:600;letter-spacing:.1em;color:var(--ink-faint);padding-bottom:6px}.cal b,.cal i{font-style:normal;font-weight:300}.cal-d{display:grid;place-items:center;height:34px;font-size:13px;color:var(--ink-soft)}.cal-d.off{color:transparent}.cal-d.mark{color:var(--bg);font-weight:600;position:relative}.cal-d.mark::before{content:"";position:absolute;inset:2px;border-radius:50%;background:var(--accent);z-index:-1}.cal-d.mark{isolation:isolate}.venue{margin-bottom:28px}.venue:last-child{margin-bottom:0}.venue-photo{border-radius:var(--radius);overflow:hidden;aspect-ratio:16/10;margin-bottom:22px}.venue-photo img{width:100%;height:100%;object-fit:cover}.venue-time{margin:0 0 6px;font-size:12.5px;color:var(--ink-soft);font-weight:300}.venue-name{margin:0 0 6px;font-family:var(--font-display);font-size:21px;font-weight:400;line-height:1.35}.venue-addr{margin:0 0 20px;font-size:13px;font-weight:300;color:var(--ink-soft)}.venue-btns{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}.cd{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;max-width:320px;margin:0 auto}.cd-u{display:grid;gap:6px;padding-bottom:10px;border-bottom:1px solid var(--rule)}.cd-u b{font-family:var(--font-display);font-weight:400;font-size:30px;line-height:1;font-variant-numeric:tabular-nums}.cd-u i{font-style:normal;font-size:10px;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-faint)}.grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.grid figure{margin:0;border-radius:var(--radius);overflow:hidden;cursor:zoom-in}.grid .g2{grid-column:span 2;aspect-ratio:4/3}.grid .g1{aspect-ratio:4/5}.grid img{width:100%;height:100%;object-fit:cover}.tl{list-style:none;margin:0 auto;padding:0 0 0 22px;max-width:260px;text-align:left;position:relative}.tl::before{content:"";position:absolute;left:4px;top:8px;bottom:8px;width:1px;background:var(--rule)}.tl li{position:relative;padding:0 0 20px;display:flex;gap:14px;align-items:baseline}.tl li:last-child{padding-bottom:0}.tl li::before{content:"";position:absolute;left:-22px;top:9px;width:9px;height:9px;border-radius:50%;background:var(--bg);border:1px solid var(--accent)}.tl b{font-family:var(--font-display);font-size:16px;font-weight:400;min-width:46px}.tl span{font-size:13.5px;font-weight:300;color:var(--ink-soft)}.form{max-width:320px;margin:0 auto;text-align:left;display:grid;gap:20px}.fld{display:grid;gap:5px}.fld > span{font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint)}.fld input,.fld textarea{border:0;border-bottom:1px solid var(--rule);background:transparent;padding:8px 2px;font-family:inherit;font-size:15px;color:var(--ink);border-radius:0;resize:none;width:100%}.fld input:focus,.fld textarea:focus{outline:none;border-bottom-color:var(--accent)}.choice{border:0;margin:0;padding:0;display:grid;gap:9px}.choice legend{padding:0 0 4px;font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint)}.choice label{display:flex;align-items:center;gap:10px;min-height:34px;cursor:pointer;font-size:14px;font-weight:300}.choice.row{grid-auto-flow:column;grid-template-columns:1fr 1fr}.choice input{accent-color:var(--accent);width:17px;height:17px}.form-msg{margin:0;font-size:13px;color:var(--accent);min-height:19px;text-align:center}.gifts{display:grid;grid-template-columns:1fr 1fr;gap:16px}.gift{display:grid;gap:4px;justify-items:center}.gift .qr{width:100%;max-width:130px;border-radius:6px;overflow:hidden;background:#fff;padding:6px}.gift p{margin:0}.gift-b{margin-top:10px !important;font-size:12px;font-weight:500}.gift-n{font-family:var(--font-display);font-size:16px;letter-spacing:.04em;cursor:copy}.gift-o{font-size:10.5px;font-weight:300;color:var(--ink-faint);letter-spacing:.04em}.gb{list-style:none;margin:0 0 24px;padding:0;display:grid;gap:18px;text-align:left;max-width:320px;margin-inline:auto}.gb li{padding-bottom:16px;border-bottom:1px solid var(--rule)}.gb li:last-child{border-bottom:0}.gb b{font-size:13.5px;font-weight:500}.gb em{font-style:normal;font-size:11px;color:var(--ink-faint);margin-left:8px}.gb p{margin:4px 0 0;font-size:14px;font-weight:300;color:var(--ink-soft);line-height:1.7}.sc-closing{position:relative}.sc-closing > .anim{position:relative}.close-photo{aspect-ratio:4/5;overflow:hidden}.close-photo img{width:100%;height:100%;object-fit:cover}.close-text{position:absolute;inset:auto 0 0 0;padding:0 26px 54px;background:linear-gradient(to top,color-mix(in srgb,var(--bg) 96%,transparent) 24%,color-mix(in srgb,var(--bg) 70%,transparent) 62%,transparent);padding-top:96px}.close-t{margin:0 0 8px;font-family:var(--font-display);font-size:30px;font-weight:400;font-style:italic;color:var(--ink)}.close-n{margin:0;font-size:11px;font-weight:600;letter-spacing:var(--track-label);text-transform:uppercase;color:var(--ink-faint)}.more{max-width:320px;margin:0 auto}.more > summary{list-style:none;display:inline-flex}.more > summary::-webkit-details-marker{display:none}.more[open] > summary{display:none}.more > .form{margin-top:4px}