@font-face{font-family:WeddingCinzel;font-style:normal;font-weight:600;font-display:swap;src:url(/assets/fonts/cinzel-600.ttf)format("truetype")}@font-face{font-family:WeddingCormorant;font-style:normal;font-weight:500;font-display:swap;src:url(/assets/fonts/cormorant-garamond-500.ttf)format("truetype")}:root{--cinnabar:#8d2b23;--cinnabar-deep:#5b1f1a;--ink:#2b211e;--paper:#f4ead1;--paper-deep:#e6d9b9;--gold:#b7965b;--gold-muted:#8f7447;--toast-bg:#291e16e6;--danger:#c24535;--font-zh-ceremonial:SimSun, "宋体", "Songti SC", STSong, "Noto Serif CJK SC", "Source Han Serif SC", serif;--font-en-royal-title:"WeddingCinzel", Cinzel, "Trajan Pro", Optima, Georgia, serif;--font-en-royal:"WeddingCormorant", Cormorant Garamond, Baskerville, "Palatino Linotype", Palatino, Garamond, Georgia, "Times New Roman", serif}*{box-sizing:border-box}html,body,#root{width:100%;min-height:100%;margin:0}body{font-family:var(--font-zh-ceremonial);color:var(--ink);background-color:#0000;background-image:radial-gradient(circle at 20% -10%,#c9a05f3d,#0000 45%),radial-gradient(circle at 90% 0,#7b2a2657,#0000 42%),linear-gradient(#3d1d1b 0%,#5b2621 32%,#efe2c2 100%);background-position:0 0,0 0,0 0;background-repeat:repeat,repeat,repeat;background-size:auto,auto,auto;background-attachment:fixed;background-origin:padding-box,padding-box,padding-box;background-clip:border-box,border-box,border-box;overflow-x:hidden}a{color:inherit}button,input{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed}.site-footer{z-index:3;min-height:58px;padding:18px 16px calc(18px + env(safe-area-inset-bottom));color:#f8eacdc7;font-family:var(--font-zh-ceremonial);text-align:center;background:#321715;border-top:1px solid #be955447;flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;font-size:12px;line-height:1.5;display:flex;position:relative}.site-footer a{color:inherit;text-decoration:none}.site-footer a:hover{color:#f8ead0;text-underline-offset:3px;text-decoration:underline}.page-loading{text-align:center;color:#f5e9ca;letter-spacing:.08em;background:radial-gradient(circle at 50% 10%,#c5955333,#0000 40%),linear-gradient(#3d1d1b,#5a241f);place-items:center;min-height:100vh;padding:24px;font-size:16px;display:grid}.toast{z-index:70;background:var(--toast-bg);color:#f9f2e2;letter-spacing:.03em;border:1px solid #ba975b66;border-radius:999px;max-width:min(88vw,520px);padding:10px 18px;font-size:13px;position:fixed;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 10px 24px #00000047}.admin-page{background:linear-gradient(#250d0dd6,#3c1614d1),radial-gradient(circle at 85% 5%,#b2894929,#0000 40%);min-height:100vh;padding:22px 16px 34px;position:relative}.admin-noise{pointer-events:none;mix-blend-mode:soft-light;opacity:.26;background-image:radial-gradient(#ffffff0e 1px,#0000 1px),radial-gradient(#ffffff09 1px,#0000 1px);background-position:0 0,2px 2px;background-size:3px 3px,5px 5px;position:fixed;inset:0}.admin-login-shell{place-items:center;min-height:calc(100vh - 56px);display:grid}.admin-login-card{text-align:center;color:#3b2925;background:linear-gradient(145deg,#f4e8ccf5,#e6d7b3eb);border:1px solid #b7965b80;border-radius:20px;width:min(100%,420px);padding:30px 24px;box-shadow:0 24px 46px #11080780,inset 0 0 0 1px #fff8ea73}.admin-login-tag{color:#7f5c2c;letter-spacing:.18em;margin:0;font-size:12px}.admin-login-card h1{font-family:var(--font-zh-ceremonial);letter-spacing:.06em;margin:12px 0 8px;font-size:28px}.admin-login-subtitle{color:#6d4d2e;margin:0 0 18px;font-size:13px}.admin-login-card form{gap:10px;display:grid}.admin-login-card input{background:#fffcf4f0;border:1px solid #8b463b61;border-radius:12px;width:100%;padding:12px 14px}.admin-login-card button{color:#f9efe3;background:linear-gradient(120deg,#7a2b24,#9c372a);border:0;border-radius:12px;padding:12px 16px;font-weight:600}.admin-panel{z-index:1;background:linear-gradient(155deg,#f3e8d0f7,#e3d2b2f2);border:1px solid #b28e4f70;border-radius:20px;width:min(100%,900px);margin:0 auto;padding:18px;position:relative;box-shadow:0 22px 42px #1208085c,inset 0 0 0 1px #fff6e485}.admin-panel-head{justify-content:space-between;align-items:flex-start;gap:14px;display:flex}.admin-panel-head p{letter-spacing:.14em;color:#6f522d;margin:0;font-size:12px}.admin-panel-head h2{font-family:var(--font-zh-ceremonial);color:#402924;margin:5px 0 0;font-size:30px}.admin-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.admin-actions button{color:#603c2f;background:#f8efe0;border:1px solid #78423559;border-radius:10px;padding:8px 12px;font-size:13px}.admin-create-box{gap:8px;margin-top:16px;display:grid}.admin-create-box label{color:#654228;font-size:13px}.admin-create-row{grid-template-columns:1fr auto;gap:10px;display:grid}.admin-create-row input{background:#fffaf0;border:1px solid #83493b57;border-radius:11px;padding:11px 12px}.admin-create-row button{color:#faefe1;background:linear-gradient(130deg,#7a2c24,#9e3a2b);border:none;border-radius:11px;min-width:105px;padding:0 16px;font-weight:600}.admin-list-box{background:#fffbf2bd;border:1px solid #95614040;border-radius:14px;margin-top:18px}.admin-list-box>header{border-bottom:1px solid #9561402e;justify-content:space-between;align-items:center;gap:8px;padding:12px 14px;display:flex}.admin-list-box h3{color:#4a2e25;margin:0;font-size:17px}.admin-list-box header span{color:#7a5d3a;font-size:12px}.admin-list-scroll{max-height:420px;padding:8px 0;overflow-y:auto}.invite-item{border-bottom:1px dashed #794e3b33;grid-template-columns:1fr auto;align-items:start;gap:8px;padding:12px 14px;display:grid}.invite-item:last-child{border-bottom:none}.invite-item>div{min-width:0}.invite-item .guest{color:#4a2f24;margin:0;font-size:16px}.invite-item .url{color:#6b4a33;text-overflow:ellipsis;white-space:nowrap;max-width:100%;margin:4px 0;font-size:13px;overflow:hidden}.invite-item .time{color:#8b6b4b;margin:0;font-size:12px}.invite-item button{color:#673f31;background:#f8efe0;border:1px solid #7f493d4d;border-radius:10px;padding:6px 12px}.empty-tip{text-align:center;color:#6f573a;margin:0;padding:24px 14px}.password-modal-backdrop{z-index:80;background:#140d0b94;place-items:center;padding:18px;display:grid;position:fixed;inset:0}.password-modal{background:#f8efdc;border:1px solid #9b734159;border-radius:14px;width:min(100%,420px);padding:18px}.password-modal h3{color:#503328;margin:0 0 12px}.password-modal form{gap:12px;display:grid}.password-modal label{color:#6a472d;gap:6px;font-size:13px;display:grid}.password-modal input{background:#fffaf0;border:1px solid #7f493d4d;border-radius:10px;padding:10px 12px}.password-modal-actions{justify-content:flex-end;gap:8px;display:flex}.password-modal-actions button{border:none;border-radius:10px;padding:8px 12px}.password-modal-actions button:first-child{color:#664730;background:#eadcc7}.password-modal-actions button:last-child{color:#fff3e3;background:linear-gradient(120deg,#7b2c25,#9c3a2b)}.copy-dialog-backdrop{z-index:90;background:#1f0e0c57;place-items:center;padding:18px;display:grid;position:fixed;inset:0}.copy-dialog{text-align:center;color:#432a22;background:linear-gradient(#fcf3dcfa,#e8d8b5f5),repeating-linear-gradient(90deg,#895b2d0f 0 1px,#0000 1px 10px);border:1px solid #99673770;border-radius:10px;width:min(100%,430px);padding:22px 20px 18px;box-shadow:0 22px 46px #1608076b,inset 0 0 0 1px #fffbeb80,inset 0 0 0 6px #b8914e21}.copy-dialog-seal{color:#f7e5c1;background:#8b2d24;border-radius:50%;place-items:center;width:46px;height:46px;margin:0 auto 10px;display:grid;box-shadow:inset 0 0 0 1px #fbd89a61}.copy-dialog h3{color:#532d25;margin:0;font-size:22px}.copy-dialog-guest{color:#6a3f2f;margin:10px 0 4px;font-size:18px}.copy-dialog-url{color:#6d4b34;overflow-wrap:anywhere;background:#fffaedb8;border-radius:8px;margin:0;padding:10px 12px;font-size:13px;line-height:1.55}.copy-dialog-note{color:#7c5b37;margin:10px 0 12px;font-size:13px}.copy-dialog button{color:#f8ead1;background:linear-gradient(120deg,#7b2c25,#9d3a2b);border:none;border-radius:999px;padding:9px 22px}@media (width<=520px){.admin-page{padding-inline:12px}.admin-panel{padding:14px}.admin-panel-head h2{font-size:24px}.admin-create-row{grid-template-columns:1fr}.admin-create-row button{min-height:44px}.invite-item{grid-template-columns:1fr}.invite-item button{justify-self:end}}.invite-root{color:#33221f;background:linear-gradient(90deg,#391815bd,#6b2a222e 18%,#0000 30% 70%,#6b2a222e 82%,#391815bd),repeating-linear-gradient(90deg,#b184460d 0 1px,#0000 1px 9px);min-height:100vh;position:relative;overflow-x:hidden}.invite-root:before{content:"";pointer-events:none;mix-blend-mode:multiply;opacity:.72;z-index:0;background:repeating-linear-gradient(45deg,#b58f520e 0 1px,#0000 1px 13px),repeating-linear-gradient(-45deg,#401f1b0d 0 1px,#0000 1px 17px);position:fixed;inset:0}.invite-main{z-index:2;opacity:0;pointer-events:none;min-height:100vh;transition:opacity 1s,transform 1s;position:relative;transform:translateY(42px)}.invite-main.opened{opacity:1;pointer-events:auto;transform:translateY(0)}.music-control{top:max(12px, env(safe-area-inset-top));z-index:50;color:#f8eed9;letter-spacing:.04em;background:#301b18d1;border:1px solid #b7965b8f;border-radius:999px;padding:8px 14px;font-size:12px;position:fixed;right:16px}.guest-watermark{z-index:1;pointer-events:none;transform-origin:50%;opacity:0;grid-template-columns:repeat(4,minmax(0,1fr));gap:34px 26px;padding:20px 14px;animation:1.2s forwards watermarkAppear;display:grid;position:fixed;inset:0;transform:rotate(-35deg)scale(1.18)}.guest-watermark span{color:#f5ddb738;font-family:var(--font-zh-ceremonial);white-space:nowrap;text-shadow:0 1px #46181229,0 0 10px #ffefca1a;font-size:clamp(20px,5.2vw,34px);font-weight:600}.invite-root.stage-opened .guest-watermark{z-index:1}.invite-root.stage-opened .guest-watermark span{color:#f5ddb733;text-shadow:0 1px #4618122e,0 0 10px #ffefca14}.wedding-scroll{z-index:2;width:min(100% - 24px,760px);margin:0 auto;padding:108px 18px 84px;position:relative}.wedding-scroll:before{content:"";z-index:-1;background:linear-gradient(90deg,#6f261f24,#0000 7% 93%,#6f261f24),linear-gradient(160deg,#faf2de,#e8dab5),repeating-linear-gradient(0deg,#85683c13,#85683c13 1px,#0000 1px 5px);border-radius:8px;position:absolute;inset:56px 0 24px;box-shadow:0 32px 58px #1b0c0959,inset 0 0 0 1px #753b2d3d,inset 0 0 0 7px #c6a05c38,inset 0 0 0 9px #5f2b231f}.wedding-scroll:after{content:"";pointer-events:none;z-index:-1;border:1px solid #8f693757;border-radius:4px;position:absolute;inset:74px 24px 44px}.scroll-header{text-align:center;padding:8px 14px 18px;position:relative}.scroll-header:before{content:"奉";color:#f8e7c4e6;background:radial-gradient(circle at 32% 28%,#d86046e0,#80241df2 70%),#8d2b23;border-radius:50%;place-items:center;width:42px;height:42px;margin:0 auto 10px;display:grid;box-shadow:0 8px 18px #4e161147,inset 0 0 0 1px #ffdba559}.scroll-subtitle{font-size:15px;font-family:var(--font-en-royal-title);letter-spacing:.24em;color:#7d5f38;margin:0;font-weight:600}.scroll-header h2{font-family:var(--font-zh-ceremonial);letter-spacing:.18em;color:#5c2f2a;margin:10px 0;font-size:52px}.scroll-guest,.scroll-guest-en,.scroll-family-note,.scroll-family-note-en{margin:2px 0}.scroll-guest{font-family:var(--font-zh-ceremonial);color:#5b3027;font-size:22px}.scroll-guest-en{font-size:16px;font-family:var(--font-en-royal);color:#6a4a35}.scroll-family-note{font-family:var(--font-zh-ceremonial);color:#6a3d2b;margin-top:8px;font-size:18px}.scroll-family-note-en{max-width:520px;font-size:14px;font-family:var(--font-en-royal);color:#78543c;margin-inline:auto;line-height:1.45}.wedding-photo-wrap{justify-items:center;padding:12px 8px 26px;display:grid}.wedding-photo-wrap.is-ending{padding-top:28px;padding-bottom:6px}.wedding-photo-frame{--photo-frame-pad:12px;aspect-ratio:10/16;width:min(82%,430px);padding:var(--photo-frame-pad);background:linear-gradient(145deg,#f6e8c7,#d7bd7b),repeating-linear-gradient(90deg,#5b2d1f1a 0 1px,#0000 1px 8px);border:1px solid #8c5b307a;border-radius:8px;min-height:0;display:block;position:relative;overflow:hidden;box-shadow:0 18px 32px #4b25182e,inset 0 0 0 1px #fffae680,inset 0 0 0 7px #64312214}.photo-frame-ending{aspect-ratio:2/3;width:min(76%,390px)}.photo-skeleton{inset:var(--photo-frame-pad);color:#73512f;letter-spacing:.05em;place-items:center;font-size:13px;display:grid;position:absolute}.wedding-photo-picture{inset:var(--photo-frame-pad);width:auto;height:auto;display:block;position:absolute}.wedding-photo{object-fit:cover;opacity:0;border-radius:5px;width:100%;height:100%;transition:opacity .8s;display:block;box-shadow:inset 0 0 0 1px #ffeec759}.wedding-photo.is-loaded{opacity:1}.photo-fallback{inset:var(--photo-frame-pad);color:#7d5a34;text-align:center;background:#eedfbb80;border:1px dashed #976d3b94;border-radius:14px;place-content:center;display:grid;position:absolute}.photo-fallback p{margin:0;font-size:52px;line-height:1}.photo-fallback span{letter-spacing:.08em;font-size:12px}.copy-block{background:linear-gradient(#fff9e7c7,#f3e8c8b8),repeating-linear-gradient(90deg,#805b2c0d 0 1px,#0000 1px 10px);border:1px solid #97643540;border-radius:6px;margin:20px 14px;padding:24px 20px;box-shadow:inset 0 0 0 1px #fffcef6b}.copy-block h3{font-family:var(--font-en-royal-title);letter-spacing:.08em;color:#6a4728;margin:0 0 12px;font-size:27px;font-weight:600}.copy-block p{margin:8px 0;line-height:1.8}.imperial-copy,.imperial-copy-en{background:linear-gradient(#fff8e1d1,#efe0bbc7),repeating-linear-gradient(135deg,#893a2b0b 0 1px,#0000 1px 13px);border-color:#893a2b42}.ritual-copy h3,.courtesy-copy h3{color:#6d3329;letter-spacing:.14em;margin:0 0 10px;font-size:27px}.zh-copy{font-family:var(--font-zh-ceremonial);color:#4b2f25;font-size:20px}.en-copy{color:#5a4334;font-size:18px;font-family:var(--font-en-royal);font-weight:500}.name-sign{border-block:1px solid #894f2c2b;margin:16px 0;padding:12px 0 12px 4px}.name-sign p{letter-spacing:.15em;margin:4px 0;font-size:27px}.detail-card{background:linear-gradient(#f8eed6f5,#e8d8b5eb);border:1px solid #89583061;border-radius:6px;margin:18px 14px;padding:18px;box-shadow:inset 0 0 0 1px #fffae873}.detail-card h3{color:#5f3b27;margin:0 0 10px;font-size:24px}.detail-card p{margin:8px 0;line-height:1.65}.detail-card-en{font-family:var(--font-en-royal)}.address-link,.phone-link{text-align:left;color:#513326;background:#f7eccfc2;border:1px dashed #82583159;border-radius:10px;width:100%;margin-top:8px;padding:10px 12px;line-height:1.55;text-decoration:none;display:block}.address-link{cursor:pointer}.map-picker-backdrop{z-index:60;background:#1c0f0d9e;place-items:end center;display:grid;position:fixed;inset:0}.map-picker{background:linear-gradient(155deg,#f5ead0,#ead8af);border:1px solid #b7915775;border-radius:22px 22px 0 0;width:min(100%,560px);padding:18px}.map-picker h3{color:#5d3b27;margin:0}.map-picker p{color:#7a5b35;margin:4px 0 0;font-size:13px}.map-options{gap:8px;margin-top:12px;display:grid}.map-options button,.map-close{color:#553527;text-align:left;background:#fffaf0cc;border:1px solid #86573652;border-radius:11px;padding:12px}.map-close{text-align:center;width:100%;margin-top:12px}.royal-divider{color:#702f24c2;grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;margin:8px 10px 4px;display:grid}.royal-divider:before,.royal-divider:after{content:"";background:linear-gradient(90deg,#0000,#9e6f379e,#0000);height:1px}.royal-divider span{color:#f4dfb9;background:#832c24e6;border-radius:50%;place-items:center;width:34px;height:34px;display:grid;box-shadow:inset 0 0 0 1px #f4d19059}@keyframes watermarkAppear{0%{opacity:0}to{opacity:1}}@media (width<=440px){.music-control{padding:7px 12px;font-size:11px;top:10px;right:10px}.wedding-scroll{width:min(100% - 22px,420px);padding-inline:16px}.wedding-scroll:after{inset-inline:24px}.copy-block,.detail-card{margin-inline:16px}.wedding-photo-frame{--photo-frame-pad:10px;width:min(84%,330px)}.photo-frame-ending{width:min(82%,318px)}.scroll-subtitle{letter-spacing:.16em;font-size:13px}.scroll-header h2{font-size:42px}.zh-copy{font-size:19px}.en-copy{font-size:17px}}.envelope-screen{z-index:40;background:repeating-linear-gradient(90deg,#be914d0e 0 1px,#0000 1px 12px),repeating-linear-gradient(0deg,#240f0d14 0 1px,#0000 1px 10px),linear-gradient(#3b1b19,#4d211d);place-items:center;padding:20px;transition:opacity .9s,visibility .9s,background 1.4s;display:grid;position:fixed;inset:0}.envelope-screen.stage-opened{opacity:0;visibility:hidden;background:linear-gradient(#4e211d59,#ede0c200)}.ancient-envelope{background:0 0;border:none;width:min(100%,430px);padding:0;display:block;position:relative}.envelope-body{z-index:2;color:#f4dfc1;text-align:center;background:linear-gradient(90deg,#c69f5938,#0000 13% 87%,#c69f5938),linear-gradient(145deg,#70211cf0,#4d1614f2),repeating-linear-gradient(45deg,#b693572e,#b693572e 2px,#6e272226 2px 7px);border:1px solid #ba935370;border-radius:24px;padding:42px 22px 30px;position:relative;overflow:hidden;box-shadow:0 26px 48px #0f060594,inset 0 0 0 1px #dbb77057}.envelope-body>:not(.envelope-watermark){z-index:2;position:relative}.envelope-body:before{content:"";pointer-events:none;border:1px solid #d0a85f59;border-radius:18px;position:absolute;inset:8px}.envelope-watermark{z-index:1;pointer-events:none;transform-origin:50%;opacity:.66;grid-template-columns:repeat(7,minmax(64px,1fr));grid-auto-rows:44px;place-content:center;gap:18px 24px;display:grid;position:absolute;inset:-46% -38%;transform:rotate(-28deg)}.envelope-watermark span{color:#f7ddaf33;font-family:var(--font-zh-ceremonial);white-space:nowrap;text-shadow:0 1px 8px #370f0b2e;place-items:center;font-size:clamp(18px,4.8vw,24px);font-weight:600;display:grid}.envelope-watermark span:nth-child(2n){transform:translateY(10px)}.envelope-watermark span:nth-child(3n){opacity:.78}.envelope-ornament{z-index:2;background:linear-gradient(90deg,#0000,#dbb973d1,#0000);width:66%;height:1px;position:absolute;inset:26px auto auto 50%;transform:translate(-50%)}.envelope-flap{transform-origin:top;z-index:1;background:linear-gradient(#982f27,#74251f);border:1px solid #be965266;border-radius:0 0 24px 24px;width:86%;height:36%;transition:transform 2.2s cubic-bezier(.2,.75,.2,1);position:absolute;top:0;left:50%;transform:translate(-50%);box-shadow:0 10px 28px #00000057}.seal-mark{color:#ffe6cd;background:radial-gradient(circle at 30% 30%,#cf5442,#9b2e23 68%);border-radius:50%;place-items:center;width:58px;height:58px;margin:8px auto 16px;font-size:26px;transition:opacity .9s;display:grid;box-shadow:0 8px 16px #2909076b}.envelope-body h1{font-family:var(--font-zh-ceremonial);letter-spacing:.16em;color:#f8e5bd;text-shadow:0 2px 10px #2d0b0857;margin:0;font-size:clamp(34px,10vw,46px)}.envelope-en-title{font-family:var(--font-en-royal-title);letter-spacing:.16em;color:#e5cfa8;margin:8px 0 10px;font-size:14px;font-weight:600}.envelope-name-line{font-family:var(--font-zh-ceremonial);color:#f5e4c5;margin:0;font-size:22px}.envelope-date{font-family:var(--font-zh-ceremonial);color:#e2c698;margin:10px 0 2px;font-size:15px}.envelope-date-en{font-size:12px;font-family:var(--font-en-royal);color:#cda975;margin:0}.envelope-guest{background:#521b1752;border:1px solid #cda4616b;border-radius:10px;margin-top:10px;padding:10px}.envelope-guest p{color:#f6e3c0;margin:3px 0}.envelope-guest p:first-child{font-family:var(--font-zh-ceremonial);font-size:20px}.envelope-guest p:last-child{font-family:var(--font-en-royal);font-size:18px}.open-hint{color:#f5ddb4;letter-spacing:.08em;flex-direction:column;gap:3px;margin-top:16px;font-size:13px;display:inline-flex}.stage-opening .ancient-envelope,.stage-sealed .ancient-envelope{animation:3.8s ease-in-out infinite envelopeFloat}.stage-opening .envelope-flap{z-index:4;transform:translate(-50%)rotateX(153deg)}.stage-opening .seal-mark{opacity:0}@keyframes envelopeFloat{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}
