@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/roboto-latin-500-normal-7RbcRiD8.woff2)format("woff2"),url(/assets/roboto-latin-500-normal-DQZyH_nt.woff)format("woff")}:root{color:#151515;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;background:#fff;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}html,body,#root{width:100%;height:100%;margin:0}.mobile-carousel{overscroll-behavior:contain;scrollbar-width:none;-webkit-user-select:none;user-select:none;width:100%;min-width:0;max-width:100%;display:block;position:relative;overflow:auto}.mobile-carousel::-webkit-scrollbar{display:none}.mobile-carousel{touch-action:pan-y;overflow:auto hidden}.mobile-carousel[data-dragging=true]{cursor:none}.mobile-carousel-content{width:max-content;min-width:100%;transform:translateX(var(--mobile-carousel-overdrag));will-change:transform;display:flex}.mobile-carousel-scrollbar{z-index:4;opacity:0;pointer-events:none;transition:opacity .15s;position:absolute;inset:0}.mobile-carousel-scrollbar[data-visible=true]{opacity:1}.mobile-carousel-scrollbar-thumb{background:#00000059;border-radius:999px;height:3px;position:absolute;bottom:4px;right:4px}body{min-width:320px;overflow:hidden}button,input,textarea{font:inherit}button{cursor:pointer}.phone-stage{place-items:center;width:100%;height:100%;padding:24px;display:grid;position:relative}.device-menu-bar{z-index:100;border-radius:12px;padding:3px;position:absolute;top:18px;right:18px}.device-picker-trigger{color:#151515;background:0 0;border:0;border-radius:9px;align-items:center;gap:10px;height:34px;padding:0 10px 0 12px;font:600 14px/1 ui-sans-serif,system-ui,sans-serif;display:flex}.device-picker-trigger:hover,.device-picker-trigger[data-state=open]{background:#0000000e}.device-picker-trigger:focus-visible{outline-offset:2px;outline:2px solid #000000b8}.device-picker-menu{z-index:200;min-width:168px;transform-origin:var(--radix-dropdown-menu-content-transform-origin);background:#fffffffa;border-radius:12px;padding:3px;animation:.12s ease-out device-menu-in;box-shadow:0 0 1px #0000000f,0 0 0 1px #00000014,0 4px 4px #0000000d}.device-picker-item{color:#181818;-webkit-user-select:none;user-select:none;border-radius:8px;outline:none;justify-content:space-between;align-items:center;height:34px;padding:0 9px 0 10px;font:500 14px/1 ui-sans-serif,system-ui,sans-serif;display:flex}.device-picker-item[data-highlighted]{background:#f0f0f0}.device-picker-item[data-state=checked]{font-weight:600}.device-picker-check{color:#181818;place-items:center;display:grid}@keyframes device-menu-in{0%{opacity:0;transform:scale(.98)translateY(-2px)}to{opacity:1;transform:scale(1)translateY(0)}}.phone-scale-box{position:relative}.phone-device{transform-origin:0 0;-webkit-user-select:none;user-select:none;position:absolute;top:0;left:0}.phone-bezel{object-fit:contain;z-index:2;-webkit-user-drag:none;pointer-events:none;width:100%;height:100%;display:block;position:absolute;inset:0}.device-screen{cursor:none;z-index:1;-webkit-user-select:none;user-select:none;background:#fff;border-radius:42px;position:absolute;overflow:hidden;box-shadow:inset 0 0 0 1px #00000014}.device-camera{z-index:75;pointer-events:none;background:#050505;border-radius:50%;display:block;position:absolute;box-shadow:inset 0 0 0 1px #ffffff14}.device-screen,.device-screen *{cursor:none!important}.device-screen img,.keyboard-asset{-webkit-user-drag:none;-webkit-user-select:none;user-select:none}.device-screen input,.device-screen textarea,.device-screen select,.device-screen option,.device-screen [contenteditable=true]{-webkit-user-select:auto;user-select:auto}.device-screen:active,.device-screen:active *,.device-screen input,.device-screen textarea,.device-screen button,.device-screen a,.device-screen [role=button]{cursor:none!important}.device-screen[data-cursor-debug=true],.device-screen[data-cursor-debug=true] *{cursor:default!important}.device-screen :focus,.device-screen :focus-visible{box-shadow:none!important;outline:0!important}.flow-stack,.flow-scenes,.flow-screen,.mobile-app-viewport{position:absolute;inset:0}.mobile-app-viewport[data-platform=android][data-keyboard-visible=false]{bottom:var(--device-safe-area-bottom,48px)}.flow-stack{--flow-header-height:0px;--flow-header-content-height:0px;--flow-header-safe-area:0px;--flow-footer-height:0px;--keyboard-height:0px;touch-action:pan-y;background:0 0;overflow:hidden}.flow-fixed-header{z-index:12;height:var(--flow-header-height);padding-top:var(--flow-header-safe-area);box-sizing:border-box;-webkit-backdrop-filter:none;backdrop-filter:none;background:0 0;border-bottom:0;position:absolute;top:0;left:0;right:0}.flow-fixed-footer{z-index:12;right:0;bottom:var(--keyboard-height);height:var(--flow-footer-height);background:0 0;transition:bottom .26s cubic-bezier(.2,.8,.2,1);position:absolute;left:0}.flow-scenes{top:var(--flow-header-height);bottom:0;overflow:hidden}.flow-screen{will-change:transform;background:0 0;overflow:hidden}.mobile-page{--mobile-safe-area-height:var(--device-safe-area-bottom,34px);--keyboard-height:0px;position:absolute;inset:0}.mobile-page[data-keyboard-visible=true],.mobile-app-viewport[data-platform=android] .mobile-page{--mobile-safe-area-height:0px}.mobile-scroll{top:0;right:0;bottom:var(--keyboard-height);-webkit-overflow-scrolling:touch;overscroll-behavior:contain;scrollbar-width:none;touch-action:none;-webkit-user-select:none;user-select:none;transition:bottom .26s cubic-bezier(.2,.8,.2,1);position:absolute;left:0;overflow:hidden auto}.mobile-scroll::-webkit-scrollbar{display:none}.mobile-scroll[data-dragging=true]{cursor:none}.mobile-cursor{z-index:80;opacity:0;pointer-events:none;will-change:transform;background:radial-gradient(circle at 50% 44%,#ffffffb3 0 34%,#ffffff8a 58%,#eeeeee7a 100%);border:.5px solid #0000001f;border-radius:999px;width:48px;height:48px;transition:opacity 90ms,background 80ms,box-shadow 80ms;position:absolute;top:0;left:0;box-shadow:inset 0 1px 2px #fff9,inset 0 -5px 10px #0000000d,inset 0 0 0 1px #00000006}.mobile-cursor:before{content:"";pointer-events:none;background:linear-gradient(#ffffff61,#fff0);border-radius:999px;width:32px;height:17px;position:absolute;top:3px;left:50%;transform:translate(-50%)}.mobile-cursor:after{border-radius:inherit;content:"";pointer-events:none;position:absolute;inset:0;box-shadow:inset 1px 0 3px #ffffff47,inset -1px 0 3px #00000005}.mobile-cursor-hotspot{pointer-events:none;background:#ffffffd1;border:1px solid #007afff2;border-radius:999px;width:9px;height:9px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 0 0 1px #ffffffbf,0 0 0 3px #007aff29}.mobile-cursor-hotspot:before,.mobile-cursor-hotspot:after{content:"";background:#007afff2;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.mobile-cursor-hotspot:before{width:17px;height:1px}.mobile-cursor-hotspot:after{width:1px;height:17px}.mobile-cursor[data-visible=true]{opacity:1}.mobile-cursor[data-active=true]{background:radial-gradient(circle at 50% 55%,#e8e8e894 0 30%,#f8f8f880 62%,#ffffffad 100%);box-shadow:inset 0 3px 7px #00000014,inset 0 -4px 8px #ffffff57,inset 0 0 0 1px #00000008}.mobile-cursor[data-active=true]:before{background:linear-gradient(#0000000e,#0000)}.mobile-cursor[data-active=true]:after{box-shadow:inset 0 5px 9px #0000000b,inset 0 -3px 7px #ffffff47}.mobile-scroll-content{will-change:transform;grid-template-columns:minmax(0,1fr);gap:0;min-width:0;padding:0;display:grid}.app-screen{background:#fff}.mobile-scrollbar{z-index:9;top:4px;right:5px;bottom:calc(var(--mobile-safe-area-height) + var(--keyboard-height) + 4px);opacity:0;pointer-events:none;width:4px;transition:bottom .26s cubic-bezier(.2,.8,.2,1),opacity .18s;position:absolute}.mobile-page[data-keyboard-dragging=true] .mobile-scroll,.mobile-page[data-keyboard-dragging=true] .mobile-scrollbar,.flow-stack[data-keyboard-dragging=true] .flow-fixed-footer{transition:none}.mobile-scrollbar[data-visible=true]{opacity:1}.mobile-scrollbar-thumb{background:#00000047;border-radius:999px;width:4px;min-height:36px;transition:background .12s;box-shadow:0 0 0 1px #ffffff2e}.status-bar{z-index:72;color:#050505;pointer-events:none;background:0 0;grid-template-columns:1fr auto;align-items:center;height:54px;padding:10px 34px 0 36px;font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Helvetica Neue,Arial,sans-serif;display:grid;position:absolute;top:0;left:0;right:0}.device-screen[data-device=pixel-10] .status-bar{align-items:start;height:auto;padding:32px 32px 0;font-family:Roboto,Arial,sans-serif}.status-time{text-align:center;letter-spacing:0;justify-self:start;min-width:58px;font-size:15px;font-weight:600;line-height:1}.status-indicators{justify-self:end;align-items:center;display:flex}.status-indicator-svg{display:block}.status-indicator-svg[data-platform=ios]{width:79px;height:13px}.status-indicator-svg[data-platform=android]{width:50px;height:14px}.device-screen[data-device=pixel-10] .status-time{font-weight:500;transform:translateY(2px)}.home-indicator-svg{z-index:70;width:100%;height:var(--device-safe-area-bottom,34px);pointer-events:none;display:block;position:absolute;bottom:0;left:0;right:0}.android-navigation-bar{z-index:70;width:428px;height:var(--device-safe-area-bottom,48px);pointer-events:none;-webkit-user-drag:none;display:block;position:absolute;bottom:-1px;left:-1px}h1,h2,p{margin:0}h1{letter-spacing:0;font-size:26px;line-height:1.08}h2{font-size:15px}p{color:#555;font-size:14px;line-height:1.45}.field-label{color:#555;font-size:13px;font-weight:800}.mobile-field{gap:8px;display:grid}.mobile-field input{color:#151515;background:#fff;border:1px solid #0000001a;border-radius:8px;outline:0;width:100%;min-height:44px;padding:0 12px}.mobile-field input:focus{box-shadow:none;border-color:#00000029}.device-screen .mobile-field input:focus,.device-screen .mobile-field input:focus-visible{border-color:#0000001f;box-shadow:none!important;outline:0!important}.sheet-overlay{z-index:20;background:#00000057;position:absolute;inset:0}.bottom-sheet{z-index:21;touch-action:none;background:#fff;border-radius:22px 22px 0 0;flex-direction:column;min-height:260px;display:flex;position:absolute;left:0;right:0;overflow:hidden;box-shadow:0 -16px 48px #0003}.sheet-handle-zone{touch-action:none;place-items:center;height:30px;display:grid}.sheet-handle{background:#c9c9c4;border-radius:999px;width:42px;height:5px}.sheet-header{gap:4px;padding:0 18px 14px;display:grid}.sheet-title{margin:0;font-size:18px;font-weight:900}.sheet-description{color:#737373;margin:0;font-size:13px;line-height:1.35}.sheet-content{padding:0 18px 24px;overflow:auto}.keyboard-dock{z-index:30;height:339px;box-shadow:none;pointer-events:none;will-change:transform;background:#d8d9de;border-radius:32px 32px 0 0;padding:0;position:absolute;bottom:-1px;left:0;right:0;overflow:hidden}.keyboard-dock[data-platform=android]{background:#f3f2f6;border-radius:0;box-shadow:0 -1px 2px #00000014}.keyboard-dock[data-visible=true]{pointer-events:auto}.keyboard-asset{z-index:1;border-radius:inherit;object-fit:cover;object-position:center bottom;-webkit-user-drag:none;pointer-events:none;width:100%;height:100%;display:block;position:relative}.keyboard-dock[data-platform=android] .keyboard-asset{object-fit:fill;border-radius:0}@font-face{font-family:Caveat;font-style:normal;font-display:swap;font-weight:600;src:url(/fonts/caveat-wedding.woff2)format("woff2")}@font-face{font-family:Ma Shan Zheng;font-style:normal;font-display:swap;font-weight:400;src:url(/fonts/ma-shan-zheng-wedding.woff2)format("woff2")}@font-face{font-family:Noto Serif SC;font-style:normal;font-display:swap;font-weight:400;src:url(/fonts/noto-serif-sc-wedding.woff2)format("woff2")}:root{--paper:#f8f3e5;--ink:#314737;--ink-soft:#5d6d5d;--sage:#6f8a6f;--gold:#c8842b;--blush:#d78e91;--line:#546b5247}html,body,#root{background-color:var(--paper);height:auto;min-height:100%;overflow:hidden auto}.wedding-app{background-color:var(--paper);width:100%;min-height:100dvh;color:var(--ink);position:relative}.invitation-cover{z-index:100;background:#e8ded3;min-height:100dvh;position:fixed;inset:0;overflow:hidden}.cover-card{box-sizing:border-box;text-align:center;background:#e8ded3;width:100%;max-width:480px;height:100dvh;margin:0 auto;position:relative;overflow:hidden;box-shadow:0 0 44px #58302624}.cover-art,.cover-art img{width:100%;height:100%;display:block;position:absolute;inset:0}.cover-art img{object-fit:contain;object-position:center top;-webkit-user-select:none;user-select:none}.cover-details{z-index:1;color:#941e18;text-align:center;position:absolute;top:65.5%;left:24px;right:24px}.cover-names{letter-spacing:.08em;justify-content:center;align-items:baseline;gap:10px;margin:0;font-family:STKaiti,Kaiti SC,Songti SC,serif;font-size:clamp(21px,6vw,25px);font-weight:600;line-height:1.2;display:flex}.cover-names i{color:#b8884d;letter-spacing:0;font-family:Georgia,Times New Roman,serif;font-size:18px;font-style:normal;font-weight:400}.cover-details time{color:#8c624b;letter-spacing:.22em;margin-top:7px;font-family:Avenir Next,Helvetica Neue,sans-serif;font-size:13px;font-weight:600;line-height:1;display:block}.cover-action{z-index:1;right:28px;bottom:max(22px, calc(env(safe-area-inset-bottom) + 16px));position:absolute;left:28px}.open-invitation-button{color:#fff7e9;letter-spacing:.16em;touch-action:manipulation;background:#941e18;border:1px solid #f6daa6c7;border-radius:999px;justify-content:center;align-items:center;width:min(100%,272px);min-height:52px;padding:0 24px;font-family:PingFang SC,Microsoft YaHei,sans-serif;font-size:15px;font-weight:600;display:inline-flex;box-shadow:0 10px 24px #6818113d}.open-invitation-button:focus-visible{outline-offset:4px;outline:3px solid #941e1852}.open-invitation-button:active{transform:translateY(1px)}.open-invitation-button:disabled{cursor:wait;opacity:.72;box-shadow:0 6px 16px #68181129}.music-toggle{z-index:60;top:max(14px, calc(env(safe-area-inset-top) + 14px));min-width:70px;height:38px;color:var(--ink);letter-spacing:.08em;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffbede0;border:1px solid #4b664b3d;border-radius:999px;justify-content:center;align-items:center;gap:6px;padding:0 12px;font-family:Noto Serif SC,Songti SC,serif;font-size:11px;display:inline-flex;position:fixed;right:max(14px,50vw - 226px);box-shadow:0 6px 18px #414b3721}.music-toggle svg{width:16px;height:16px;color:var(--gold)}.music-toggle.is-playing{background:#fff8e2eb;border-color:#c8842b61}.music-toggle:focus-visible{box-shadow:0 0 0 3px #c8842b47,0 6px 18px #414b3721!important}.invitation-page{--section-gap:clamp(52px, 14vw, 64px);gap:var(--section-gap);width:100%;max-width:480px;min-height:100%;padding-bottom:calc(env(safe-area-inset-bottom) + 24px);background-color:var(--paper);letter-spacing:.035em;background-image:url(/assets/wedding/watercolor-paper-border.webp);background-position:top;background-repeat:repeat-y;background-size:100%;flex-direction:column;margin:0 auto;font-family:Noto Serif SC,Songti SC,serif;display:flex;overflow:hidden}.invitation-page:focus{outline:none}.hero-section,.invitation-section,.thank-section,.closing-section{box-sizing:border-box;padding-left:30px;padding-right:30px;position:relative}.hero-section{text-align:center;padding-top:clamp(56px,16vw,72px)}.hero-heading{z-index:2;position:relative}.section-kicker{color:var(--gold);letter-spacing:.28em;margin:0;font-family:Caveat,cursive;font-size:14px;font-weight:700}.hero-heading h1{color:#46624e;letter-spacing:-.045em;margin:-4px 0 0;font-family:Caveat,cursive;font-size:76px;font-weight:700;line-height:.95}.hero-subtitle{color:var(--ink-soft);letter-spacing:.12em;margin:10px 0 0;font-family:Ma Shan Zheng,cursive;font-size:20px}.hero-name-card{min-height:248px;color:var(--ink);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#fffbedb3;border:1px solid #5b765442;border-radius:28px;flex-direction:column;justify-content:center;align-items:center;gap:18px;margin:36px auto 0;padding:34px 24px;display:flex;box-shadow:0 14px 32px #414a371a}.hero-english-names,.hero-chinese-names,.hero-name-card time,.hero-date-group{margin:0}.hero-english-names{letter-spacing:.08em;justify-content:center;align-items:center;gap:4px;font-family:Ma Shan Zheng,cursive;font-size:27px;font-weight:400;display:flex}.hero-heart{color:var(--blush);letter-spacing:0;font-family:Georgia,Times New Roman,serif;font-size:.88em;line-height:1}.hero-chinese-names i{color:var(--blush);letter-spacing:0;font-family:Georgia,Times New Roman,serif;font-style:normal}.hero-chinese-names{letter-spacing:.1em;justify-content:center;align-items:baseline;gap:12px;font-family:Ma Shan Zheng,cursive;font-size:31px;display:flex}.hero-chinese-names i{font-size:22px}.hero-name-card time{color:var(--gold);letter-spacing:.16em;font-family:Caveat,cursive;font-size:24px;font-weight:700}.hero-date-group{flex-direction:column;align-items:center;gap:5px;display:flex}.hero-date-group>span{color:var(--ink-soft);letter-spacing:.18em;font-size:12px}.invitation-section{text-align:center}.section-heading h2{color:var(--ink);letter-spacing:.12em;margin:4px 0 0;font-family:Ma Shan Zheng,cursive;font-size:44px;font-weight:400;line-height:1.1}.couple-name-row{grid-template-columns:1fr 30px 1fr;align-items:center;margin-top:32px;display:grid}.couple-name-card{background:#fffbedb8;border:1px solid #6b80653d;border-radius:22px;flex-direction:column;justify-content:center;align-items:center;gap:9px;min-height:112px;padding:18px 12px;display:flex;box-shadow:0 8px 22px #4c583e12}.couple-name-card small{color:var(--ink-soft);letter-spacing:.18em;font-size:11px}.couple-name-card strong{letter-spacing:.1em;font-family:Ma Shan Zheng,cursive;font-size:25px;font-weight:400}.couple-name-and{color:var(--blush);font-family:Caveat,cursive;font-size:30px;font-weight:700}.invitation-copy{color:#455446;margin:36px 0 0;font-size:14px;line-height:2}.invitation-copy em{color:var(--gold);letter-spacing:.12em;font-family:Ma Shan Zheng,cursive;font-size:19px;font-style:normal}.wedding-details{text-align:left;gap:14px;margin-top:34px;display:grid}.detail-card{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#fffbedc7;border:1px solid #6b80653d;border-radius:18px;grid-template-columns:42px 1fr;align-items:center;gap:13px;padding:19px 18px;display:grid;box-shadow:0 8px 22px #4c583e14}.detail-card>svg:first-child{width:29px;height:29px;color:var(--gold)}.location-card{color:inherit;touch-action:manipulation;grid-template-columns:42px minmax(0,1fr) auto;text-decoration:none;transition:border-color .18s,box-shadow .18s,transform .18s}.location-card .navigation-icon{width:18px;height:18px;color:var(--gold);align-self:start;margin-top:5px}.location-card .navigation-hint{color:var(--gold);letter-spacing:.12em;margin-top:8px;font-size:11px;font-weight:600}.location-card:focus-visible{outline-offset:3px;outline:3px solid #c8842b57}@media (hover:hover){.location-card:hover{border-color:#c8842b7a;transform:translateY(-2px);box-shadow:0 12px 28px #4c583e21}}.detail-card p,.detail-card strong,.detail-card span{margin:0;display:block}.detail-card p{color:var(--gold);letter-spacing:.12em;margin-bottom:4px;font-family:Ma Shan Zheng,cursive;font-size:21px}.detail-card strong{color:var(--ink);font-size:15px;font-weight:600}.detail-card span{color:var(--ink-soft);margin-top:4px;font-size:11px;line-height:1.55}.thank-section{text-align:center}.thank-heading h2{color:#58755b;letter-spacing:-.025em;font-family:Caveat,cursive;font-size:62px;font-weight:700}.letter-copy{color:#3f4b40;margin-top:48px;font-size:14px;line-height:2}.letter-copy p{margin:0 0 26px}.thank-section blockquote{border-top:1px solid var(--line);border-bottom:1px solid var(--line);color:var(--gold);letter-spacing:.08em;margin:46px 0 0;padding:20px 12px;font-family:Ma Shan Zheng,cursive;font-size:18px;line-height:1.7}.closing-section{text-align:center}.closing-copy{color:#3f4b40;margin-top:0;font-size:14px;line-height:2}.closing-copy p{margin:0 0 28px}.closing-copy p:first-child{color:var(--gold);letter-spacing:.16em;font-family:Ma Shan Zheng,cursive;font-size:27px}.closing-section footer{margin-top:var(--section-gap);border-top:1px solid var(--line);padding:28px 10px 48px}.closing-section footer p,.closing-section footer strong,.closing-section footer span{margin:0;display:block}.closing-section footer p{color:var(--sage);letter-spacing:.16em;font-family:Caveat,cursive;font-size:17px;font-weight:700}.closing-section footer strong{color:var(--gold);letter-spacing:.08em;margin-top:10px;font-family:Caveat,cursive;font-size:28px}.closing-section footer span{color:var(--ink);letter-spacing:.12em;margin-top:8px;font-family:Ma Shan Zheng,cursive;font-size:20px}@media (height<=700px){.cover-art{height:calc(100% - 76px)}.cover-action{right:24px;bottom:max(16px, calc(env(safe-area-inset-bottom) + 10px));left:24px}.open-invitation-button{min-height:50px}}@media (width>=481px){.cover-details{top:74%}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}}
