@font-face{font-family:Be Vietnam Pro;font-style:italic;font-weight:300;font-display:swap;src:url(/static/font/bevietnampro-italic-300-vietnamese.4aec3ad850.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Be Vietnam Pro;font-style:italic;font-weight:300;font-display:swap;src:url(/static/font/bevietnampro-italic-300-latin.63c7e813b2.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,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:italic;font-weight:400;font-display:swap;src:url(/static/font/bevietnampro-italic-400-vietnamese.e7b9cd2764.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Be Vietnam Pro;font-style:italic;font-weight:400;font-display:swap;src:url(/static/font/bevietnampro-italic-400-latin.799d4e76dc.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,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:300;font-display:swap;src:url(/static/font/bevietnampro-normal-300-vietnamese.cfa40302c1.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-weight:300;font-display:swap;src:url(/static/font/bevietnampro-normal-300-latin.7a52bb1aa0.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,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:400;font-display:swap;src:url(/static/font/bevietnampro-normal-400-vietnamese.061fc9860f.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-weight:400;font-display:swap;src:url(/static/font/bevietnampro-normal-400-latin.33beca82c3.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,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(/static/font/bevietnampro-normal-500-vietnamese.e4f06173e3.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-weight:500;font-display:swap;src:url(/static/font/bevietnampro-normal-500-latin.40a8add689.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,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(/static/font/bevietnampro-normal-600-vietnamese.4b6c894cd8.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Be Vietnam Pro;font-style:normal;font-weight:600;font-display:swap;src:url(/static/font/bevietnampro-normal-600-latin.0d1580dd42.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Cormorant Garamond;font-style:normal;font-weight:600;font-display:swap;src:url(/static/font/cormorantgaramond-normal-600-vietnamese.e0daab9839.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Cormorant Garamond;font-style:normal;font-weight:600;font-display:swap;src:url(/static/font/cormorantgaramond-normal-600-latin.e149ed1307.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Cormorant Garamond;font-style:normal;font-weight:700;font-display:swap;src:url(/static/font/cormorantgaramond-normal-700-vietnamese.e0daab9839.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Cormorant Garamond;font-style:normal;font-weight:700;font-display:swap;src:url(/static/font/cormorantgaramond-normal-700-latin.e149ed1307.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Dancing Script;font-style:normal;font-weight:600;font-display:swap;src:url(/static/font/dancingscript-normal-600-vietnamese.85aa641fd0.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Dancing Script;font-style:normal;font-weight:600;font-display:swap;src:url(/static/font/dancingscript-normal-600-latin.c416abe41e.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--rose:#e0557d;--rose-soft:#f8c8d8;--violet:#9b59b6;--deep:#2a1636;--ink:#4a2b45;--cream:#fff9f4;--gold:#e8b464;--display:"Cormorant Garamond", Georgia, serif;--script:"Dancing Script", cursive;--body:"Be Vietnam Pro", sans-serif}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{font-family:var(--body);color:var(--ink);background:linear-gradient(#fdf0f6 0%,#f3e6f7 30%,#fff9f4 60%,#f8ecf6 100%);overflow-x:hidden}section{position:relative}.ornament{color:var(--gold);letter-spacing:.5em;text-align:center;font-size:.85rem}.section-title{font-family:var(--display);text-align:center;background:linear-gradient(120deg, var(--rose), var(--violet));color:#0000;-webkit-background-clip:text;background-clip:text;margin:.4rem 0 .6rem;font-size:clamp(2.1rem,4.5vw,3.1rem);font-weight:700}.section-sub{text-align:center;color:#96718c;max-width:520px;margin:0 auto;font-weight:300;line-height:1.7}.wrap{max-width:1000px;margin:0 auto;padding:5.5rem 1.25rem}.hero{height:100svh;min-height:560px}.hero-canvas{position:absolute;inset:0}.hero-canvas,.hero-canvas *{touch-action:pan-y!important}.hero-overlay{text-align:center;pointer-events:none;flex-direction:column;justify-content:flex-start;align-items:center;padding-top:7svh;display:flex;position:absolute;inset:0}.hero-names{font-family:var(--script);color:#0000;filter:drop-shadow(0 2px 18px #ffffffe6);background:linear-gradient(120deg,#b8336b,#8a4d9e,#b8336b);-webkit-background-clip:text;background-clip:text;font-size:clamp(2.4rem,7.5vw,4.8rem);font-weight:600;line-height:1.15}.hero-names .amp{-webkit-text-fill-color:#e0557d;vertical-align:middle;font-size:.7em}.hero-date{font-family:var(--display);letter-spacing:.45em;text-transform:uppercase;color:#96579e;white-space:nowrap;margin-top:.9rem;font-size:clamp(.95rem,2.2vw,1.15rem);font-weight:600}@media (max-width:560px){.hero-date{letter-spacing:.18em}}.scroll-cue{pointer-events:auto;cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;width:40px;height:40px;margin-top:auto;margin-bottom:3.5svh;padding:0;transition:transform .2s;display:flex}.scroll-cue:hover{transform:scale(1.15)}.scroll-cue:active{transform:scale(.95)}.scroll-cue:after{content:"";border-right:3px solid var(--rose);border-bottom:3px solid var(--rose);border-radius:1px;width:14px;height:14px;animation:1.6s ease-in-out infinite cue;transform:rotate(45deg)}@keyframes cue{0%,to{opacity:1;transform:rotate(45deg)translate(0)}60%{opacity:0;transform:rotate(45deg)translate(6px,6px)}}.invite-scene{perspective:1400px;margin-top:2.5rem}.invite-card{text-align:center;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);max-width:560px;transform-style:preserve-3d;background:linear-gradient(160deg,#ffffffeb,#fff5faeb);border:1px solid #e0557d40;border-radius:22px;margin:0 auto;padding:3rem 2.2rem;box-shadow:0 24px 60px -20px #9b59b659}.invite-card .couple-names{font-family:var(--script);background:linear-gradient(120deg, var(--rose), var(--violet));color:#0000;-webkit-background-clip:text;background-clip:text;margin:.8rem 0;font-size:clamp(1.9rem,4.5vw,2.5rem);font-weight:600;line-height:1.3}.invite-card .couple-names .name{white-space:nowrap;display:block}.invite-card .couple-names .amp{-webkit-text-fill-color:var(--gold);margin:.2rem 0;font-size:.8em;display:block}.invite-card .lunar{color:#a97b9b;font-size:.9rem;font-style:italic}.invite-card p.msg{margin-top:1.4rem;font-weight:300;line-height:1.9}.gold-line{background:linear-gradient(90deg, transparent, var(--gold), transparent);width:120px;height:2px;margin:1.4rem auto 0}.timeline{margin-top:3rem;flex-direction:column;gap:1.1rem;max-width:620px;margin-inline:auto;display:flex;position:relative}.timeline:before{content:"";background:linear-gradient(180deg, var(--rose-soft), var(--violet));width:2px;position:absolute;top:12px;bottom:12px;left:29px}.t-item{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#ffffffbf;border:1px solid #e0557d2e;border-radius:16px;align-items:flex-start;gap:1.2rem;padding:1.2rem 1.4rem;display:flex;position:relative}.t-icon{background:linear-gradient(135deg, var(--rose), var(--violet));z-index:1;border-radius:50%;flex-shrink:0;place-items:center;width:58px;height:58px;font-size:1.5rem;display:grid;box-shadow:0 8px 20px -6px #e0557d80}.t-item h3{font-family:var(--display);color:var(--deep);font-size:1.15rem}.t-item .t-time{color:var(--rose);margin:.15rem 0;font-size:.9rem;font-weight:600}.t-item p{color:#7d5a72;font-size:.92rem;font-weight:300}.t-note{text-align:center;color:#a97b9b;margin-top:1.6rem;font-size:.85rem;font-style:italic}.cd-grid{flex-wrap:wrap;justify-content:center;gap:clamp(.7rem,3vw,1.6rem);margin-top:2.8rem;display:flex}.cd-cell{text-align:center;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#fff9;border:1px solid #9b59b640;border-radius:18px;min-width:92px;padding:1.3rem 1rem;box-shadow:0 16px 40px -18px #9b59b666}.cd-cell b{font-family:var(--display);background:linear-gradient(120deg, var(--rose), var(--violet));color:#0000;font-variant-numeric:tabular-nums;-webkit-background-clip:text;background-clip:text;font-size:clamp(2rem,5vw,3rem);display:block}.cd-cell span{letter-spacing:.2em;text-transform:uppercase;color:#96718c;font-size:.78rem}.loc-grid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1.6rem;margin-top:2.8rem;display:grid}.loc-card{text-align:center;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#fffc;border:1px solid #e0557d33;border-radius:20px;padding:2.2rem 1.8rem;box-shadow:0 18px 44px -18px #9b59b659}.loc-card .role{letter-spacing:.3em;text-transform:uppercase;color:var(--gold);font-size:.78rem;font-weight:600}.loc-card h3{font-family:var(--display);color:var(--deep);margin:.5rem 0;font-size:1.35rem}.loc-card .addr{color:#7d5a72;min-height:3.2em;font-weight:300;line-height:1.7}.btn{background:linear-gradient(120deg, var(--rose), var(--violet));color:#fff;border-radius:999px;margin-top:1.3rem;padding:.7rem 1.7rem;font-size:.9rem;font-weight:500;text-decoration:none;transition:transform .2s;display:inline-block;box-shadow:0 10px 24px -8px #e0557d8c}.btn:hover{transform:translateY(-2px)scale(1.03)}.masonry{columns:3 260px;column-gap:1rem;margin-top:2.8rem}.m-item{break-inside:avoid;cursor:zoom-in;background:#fff9;border:1px solid #e0557d26;border-radius:16px;margin-bottom:1rem;position:relative;overflow:hidden;box-shadow:0 14px 34px -16px #9b59b673}.m-item:after{content:"";opacity:0;background:linear-gradient(#0000 60%,#2a163659);transition:opacity .3s;position:absolute;inset:0}.m-item:hover:after{opacity:1}.m-item img{width:100%;height:auto;transition:transform .45s;display:block}.m-item:hover img{transform:scale(1.045)}.lightbox{z-index:100;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);cursor:zoom-out;background:#1e0c28eb;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.lightbox img{cursor:default;border-radius:14px;max-width:min(92vw,980px);max-height:86vh;box-shadow:0 30px 80px -20px #000000b3}.lb-close{color:#fff;cursor:pointer;background:#ffffff1f;border:1px solid #ffffff59;border-radius:50%;width:44px;height:44px;font-size:1.1rem;transition:background .2s;position:absolute;top:1.1rem;right:1.4rem}.lb-close:hover{background:#ffffff40}.lb-nav{color:#fff;cursor:pointer;background:#ffffff1a;border:1px solid #ffffff4d;border-radius:50%;width:52px;height:52px;font-size:1.9rem;line-height:1;transition:background .2s;position:absolute;top:50%;transform:translateY(-50%)}.lb-nav:hover{background:#ffffff40}.lb-prev{left:1rem}.lb-next{right:1rem}.lb-count{color:#fffc;letter-spacing:.15em;font-size:.9rem;position:absolute;bottom:1.2rem}@media (max-width:600px){.lb-nav{width:42px;height:42px;font-size:1.5rem}}.qr-grid{margin-top:2.8rem;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1.6rem;max-width:720px;margin-inline:auto;display:grid}.qr-card{text-align:center;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#ffffffd9;border:1px solid #9b59b638;border-radius:20px;padding:2rem 1.6rem;box-shadow:0 18px 44px -18px #9b59b659}.qr-frame{border:2px dashed var(--rose-soft);background:#fff;border-radius:14px;padding:.8rem;display:inline-block}.qr-card h3{font-family:var(--display);color:var(--deep);margin-top:1.1rem;font-size:1.15rem}.qr-card .hint{color:#a97b9b;margin-top:.4rem;font-size:.8rem;font-weight:300}footer{text-align:center;background:linear-gradient(#0000,#2a16360f);padding:4rem 1.25rem 5rem}footer .names{font-family:var(--script);color:var(--deep);font-size:clamp(1.8rem,4.5vw,2.6rem);font-weight:600}footer p{color:#96718c;margin-top:.9rem;font-weight:300;line-height:1.8}footer .heart{color:var(--rose);animation:1.4s ease-in-out infinite beat;display:inline-block}@keyframes beat{0%,to{transform:scale(1)}30%{transform:scale(1.25)}}.falling{z-index:40;pointer-events:none;position:fixed;inset:0;overflow:hidden}.f-piece{animation:fall var(--dur) linear var(--delay) infinite;will-change:transform;position:absolute;top:0}.f-petal{opacity:.85;background:radial-gradient(at 30% 30%,#ffd6e4,#ff9dc0 60%,#f0789f);border-radius:80% 80% 95% 95%;width:1em;height:.72em}.f-heart{color:var(--rose);text-shadow:0 0 10px #e0557d59;opacity:.8}@keyframes fall{0%{transform:translateY(-12vh)rotateY(0)rotate(0)}50%{transform:translate3d(var(--drift), 50vh, 0) rotateY(360deg) rotate(12deg)}to{transform:translate3d(calc(var(--drift) * -.5), 112vh, 0) rotateY(720deg) rotate(-8deg)}}@media (prefers-reduced-motion:reduce){.falling{display:none}}.back-to-top{background:linear-gradient(120deg, var(--rose), var(--violet));color:#fff;cursor:pointer;opacity:0;pointer-events:none;z-index:50;border:none;border-radius:50%;width:48px;height:48px;font-size:1.3rem;transition:opacity .3s,transform .3s,box-shadow .2s;position:fixed;bottom:1.5rem;right:1.25rem;transform:translateY(16px);box-shadow:0 10px 26px -8px #9b59b68c}.back-to-top.show{opacity:1;pointer-events:auto;transform:none}.back-to-top:hover{box-shadow:0 14px 32px -8px #e0557d99}