.admin{width:calc(100% - 48px);max-width:1160px;margin:32px auto;padding:32px 36px 140px;background:#f4fbff;min-height:calc(100svh - 64px);border:1px solid #d5e8f5;border-radius:28px;box-shadow:0 16px 60px #28608b15}.admin h1{font-size:clamp(23px,3vw,30px);text-shadow:none;letter-spacing:0}.admin h2{font-size:21px;margin-bottom:12px;font-weight:700}.admin h3{font-size:16px;font-weight:700}.admin .eyebrow{text-align:left;margin:0 0 6px;color:#a54678}.admin-header{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:28px}.admin-header>div:last-child{display:flex;align-items:center;gap:12px;flex-shrink:0}.admin-workspace[data-slot=tabs]{display:flex;flex-direction:column;gap:0;width:100%;min-width:0}.admin-workspace>[data-slot=tabs-content]{width:100%;min-width:0;font-size:16px}.admin-tabs[data-slot=tabs-list]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));width:100%;height:auto;min-height:56px;padding:5px;background:#e2eef8;border-radius:16px;margin-bottom:26px;gap:5px}.admin-tabs button{min-width:0;min-height:46px;height:auto;font-size:16px;padding:10px 12px;border-radius:12px;color:#486b89;white-space:normal}.admin-tabs button[aria-selected=true]{background:white;color:#163e78;box-shadow:0 3px 10px #244e7912;font-weight:700}.admin-card{background:white;border:1px solid #cfe2ef;border-radius:20px;padding:26px;margin:0 0 28px}.admin-two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px}.admin label{font-size:15px}.admin input{border-radius:10px;min-width:0}.admin form{min-width:0}.admin .primary,.admin .secondary{border-radius:12px;box-shadow:0 3px 0 #426a9020;border-width:1px;min-height:46px}.admin .compact{width:auto;min-width:130px}.admin .text-button{border-radius:10px;font-size:14px}.upload-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:22px;margin-top:24px}.upload-card{min-width:0;padding:20px;border:1px solid #cfe2ef;border-radius:20px;background:white;box-shadow:0 4px 16px #335f8110}.upload-preview{height:200px;display:flex;align-items:center;justify-content:center;background:#f0f7fc;border-radius:12px;margin:16px 0;color:#57788f;font-size:14px;overflow:hidden}.upload-preview img{width:100%;height:100%;object-fit:contain}.upload-label{position:relative;display:block;background:#e7f3ff;border:1px solid #aacce5;border-radius:11px;text-align:center;padding:11px;margin:0;cursor:pointer;overflow:hidden}.upload-label:focus-within{outline:3px solid #ed629c;outline-offset:3px}.upload-label input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;margin:0}.upload-card form{margin-top:16px}.upload-card form input{font-size:14px}.photo-tools{display:flex;flex-wrap:wrap;gap:8px;border-top:1px solid #e3edf4;padding-top:12px}.photo-tools button{border:1px solid #c2ddec;border-radius:9px;background:#f4faff;padding:8px 10px;font-size:14px;min-height:42px}.photo-tools button:last-child{color:#a03961;background:#fff3f6;border-color:#ecd0dc}.link-card{max-width:780px;margin-inline:auto;padding:32px}.check-label{display:flex;align-items:center;gap:12px;margin-top:20px}.invitation-sample{background:#fff0f7;border:1px dashed #eab9d1;border-radius:14px;padding:25px;text-align:center;margin:24px 0;overflow-wrap:anywhere}.stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.stats div{background:white;border:1px solid #cfe2ef;border-radius:18px;padding:20px;text-align:center;font-size:14px}.stats strong{display:block;font-size:34px;color:#ad3e7a}.admin-actions{display:flex;flex-wrap:wrap;gap:12px;margin:20px 0 24px}.admin-actions .secondary{margin:0}.admin [data-slot=table-container]{border:1px solid #cfe2ef;border-radius:16px;background:white}.admin td,.admin th{padding:14px 16px}.admin th{background:#eaf4fc}.reply-message{white-space:normal!important;min-width:180px;max-width:400px;overflow-wrap:anywhere}.duplicate{display:block;font-size:12px;color:#a03961}.admin.login{max-width:480px;min-height:0;margin-top:8vh;padding:36px 32px 44px}.login form{margin-top:28px}.login>p{font-size:15px}.login .eyebrow{text-align:left}.admin-feedback{position:fixed;z-index:1000;right:max(24px,env(safe-area-inset-right));bottom:max(24px,env(safe-area-inset-bottom));width:min(440px,calc(100vw - 32px));pointer-events:none}.admin-notice{display:flex;align-items:flex-start;gap:12px;padding:18px;border:1px solid #b2d2d0;border-radius:16px;background:#f1fffa;color:#235d54;box-shadow:0 8px 36px #173e7830;pointer-events:auto;overflow-wrap:anywhere}.admin-notice>div{flex:1;min-width:0}.admin-notice strong{font-size:15px}.admin-notice p{font-size:14px;margin-top:3px;max-height:35svh;overflow-y:auto}.admin-notice.error{background:#fff5f7;border-color:#e6aac1;color:#942d50}.admin-notice.pending{background:#f1f8ff;border-color:#b9d3ef;color:#285b90}.notice-icon{display:grid;place-items:center;flex-shrink:0;width:28px;height:28px;border:1px solid;border-radius:50%;font-weight:700}.admin-notice button{flex-shrink:0;display:grid;place-items:center;width:36px;height:36px;margin:-6px -6px 0 0;border:0;border-radius:9px;font-size:24px;background:transparent;color:inherit}@media(max-width:900px){.admin{padding:26px 24px 140px}.upload-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.admin-header{align-items:flex-start;flex-direction:column;gap:12px}}@media(max-width:600px){.admin{width:100%;margin:0;padding:24px 16px 150px;border:0;border-radius:0;min-height:100svh}.admin-two{grid-template-columns:1fr;gap:0}.admin-tabs button{font-size:14px;padding:10px 6px}.upload-grid{grid-template-columns:1fr;gap:18px}.upload-preview{height:240px}.admin-card,.link-card{padding:20px}.stats{gap:8px}.stats div{padding:16px 5px;font-size:13px}.stats strong{font-size:28px}.admin.login{width:calc(100% - 32px);margin:32px auto;border-radius:22px;min-height:0;padding:28px 22px}.admin-feedback{right:16px;bottom:max(16px,env(safe-area-inset-bottom))}}.admin .music-card{max-width:760px;margin-inline:auto}.music-card audio{display:block;width:100%;margin:20px 0}.music-card form{margin-top:24px}.music-card input[type=range]{padding:0;accent-color:#c76799}.music-filename{overflow-wrap:anywhere;margin:18px 0}@media(max-width:600px){.admin-tabs[data-slot=tabs-list]{grid-template-columns:repeat(2,minmax(0,1fr))}}@font-face{font-family:WeddingRound;src:local("YouYuan"),local("幼圆");font-display:swap}.invitation{font-family:WeddingRound,Microsoft YaHei,PingFang SC,sans-serif}.invitation,.world-backdrop{max-width:720px}.invitation .names,.invitation h1,.invitation h2{font-family:WeddingRound,YouYuan,Microsoft YaHei,sans-serif;font-weight:900;letter-spacing:2px}.invitation h1{color:#265495}.invitation .eyebrow{letter-spacing:1px;font-size:13px}.invitation .primary,.invitation .secondary{position:relative;isolation:isolate;border-radius:25px;border:2px solid #df92b7;box-shadow:inset 0 3px 0 #fff9,0 5px 0 #b7638b24,0 9px 16px #78a3ce19;background:linear-gradient(#fff0f7,#ffdae9);color:#984778;padding:13px 40px;line-height:1.5;overflow:hidden}.invitation .primary:after,.invitation .primary:before{position:absolute;top:50%;transform:translateY(-50%);font-size:16px;opacity:.65;pointer-events:none}.invitation .primary:before{content:"✿";left:16px;color:#dc75a7}.invitation .primary:after{content:"✧";right:16px;color:#b36c99}.invitation .primary>span{display:none}.invitation .secondary{background:linear-gradient(#faffff,#dbefff);border-color:#9ccce9;color:#4277a0}.invitation .text-button{color:#49789e;text-decoration:none}.invitation .text-button:hover{text-decoration:underline}.invitation input,.invitation textarea{border-radius:14px;border-color:#b4d1e6}.invitation .guest{border-radius:22px;border:2px solid white;background:#ffffffba;box-shadow:0 5px 15px #4692b017}.invitation-letter{border-radius:28px;border-color:#bad7f5;background:linear-gradient(150deg,#fffafd,#ffe2ef);box-shadow:inset 0 0 0 5px #fff8,0 8px 0 #598fcc1c;position:relative;padding-block:14px}.invitation-letter:before{content:"✿";position:absolute;color:#ecb0cc;left:22px;top:30px;font-size:26px}.invitation-letter:after{content:"✧";position:absolute;color:#adbedf;right:23px;bottom:30px;font-size:28px}.invitation .blackboard{border-radius:22px;border:7px solid #e9c8a0;outline:2px solid #fff1d8;box-shadow:inset 0 0 0 2px #265c5b,0 8px 0 #53899c23}.portrait-frame{border-radius:12px}.early-note,.reply-panel,.rsvp-choice{border-radius:24px}.date-card strong{font-family:WeddingRound,sans-serif}.world-backdrop{background-position:top}.sky-haze{background:linear-gradient(#ecfaff10,#eefaff24 30%,#e4f5ff6b)}.grounded-couple{position:relative;display:flex;justify-content:center;align-items:flex-end;height:225px;width:min(100%,410px);margin:15px auto 20px;padding-bottom:14px;overflow:visible;isolation:isolate}.couple-ground{position:absolute;bottom:0;left:1%;right:1%;height:47px;border-radius:50%;background:linear-gradient(#fbfcf6,#e5eadd);border:2px solid #fffc;box-shadow:0 8px 0 #6cabc01c;z-index:-1}.person-slot{position:relative;width:43%;height:100%;display:flex;align-items:flex-end;justify-content:center;z-index:2}.person-slot.falling,.person-slot.held{z-index:8}.person-body{height:100%;width:100%;padding:0;border:0;background:none!important;box-shadow:none;touch-action:none;transform-origin:50% 13%;cursor:grab;will-change:transform;transition:none;display:flex;align-items:flex-end;justify-content:center}.person-body:hover{filter:none!important}.person-body:active{cursor:grabbing}.person-body .newlywed{height:100%;width:100%;object-fit:contain;object-position:center bottom;animation:none}.contact-shadow{bottom:-4px;left:20%;width:60%;height:14px;border-radius:50%;background:#4d7271;filter:blur(3px)}.contact-shadow,.drag-caption{position:absolute;pointer-events:none}.drag-caption{display:none;top:6%;left:65%;padding:5px 9px;border-radius:12px;background:#fff4fb;color:#c16691;font-size:12px;white-space:nowrap;box-shadow:0 2px 5px #797a9029}.held .drag-caption{display:block}.held .newlywed{animation:little-struggle .23s ease-in-out infinite alternate}.falling .newlywed{animation:none;transform:scaleY(1.03)}.landing .newlywed{animation:ground-cushion .24s both;transform-origin:center bottom}.walking .newlywed{animation:tiny-walk .28s ease-in-out infinite;transform-origin:center bottom}.classroom-cast{height:200px;align-items:flex-end}.classroom-cast .grounded-couple{width:76%;height:185px;margin:0 0 0 auto}.ceremony>.grounded-couple,.welcome>.grounded-couple{height:235px}.orbit-whale{position:absolute;width:280px;height:155px;pointer-events:none;transform-origin:center;will-change:left,top,transform;opacity:.7}.orbit-whale canvas{width:100%;image-rendering:pixelated}.topbar{position:relative;z-index:4}.teacher{bottom:35px}.scene{z-index:2}.welcome h1{margin-top:12px}.welcome{justify-content:flex-start;padding-top:15px}.exploration{text-align:center}.exploration h1{margin:0 0 14px}.exploration h1>span{color:#e995bc;font-size:.65em}.map-viewport{position:relative;isolation:isolate;height:clamp(480px,76svh,740px);width:calc(100% + 30px);margin-left:-15px;overflow:clip;border:3px solid #ffffffcf;border-radius:34px;box-shadow:0 12px 35px #3f7aaf24;background:#b6e1fb;container-type:inline-size}.map-camera{position:absolute;inset:0;transition:transform 1.25s cubic-bezier(.2,.72,.22,1);will-change:transform}.garden-map{width:100%;height:100%;object-fit:fill;display:block;image-rendering:pixelated}.map-chest{position:absolute;width:19%;height:12%;transform:translate(-50%,-80%);border:0!important;padding:0;background:none;box-shadow:none;opacity:1!important;overflow:visible;z-index:2;cursor:pointer}.map-chest:hover{filter:brightness(1.1)!important}.map-chest:active{transform:translate(-50%,-80%) scale(.97)!important}.map-chest>img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none}.map-chest-base{clip-path:inset(42% 0 0 0)}.map-chest-lid{clip-path:inset(0 0 58% 0);transform-origin:center 45%;transition:transform .7s cubic-bezier(.2,.9,.3,1),opacity .6s}.map-chest.lid-raised .map-chest-lid{transform:translateY(-30%) rotate(-20deg);opacity:.3}.chest-contact{position:absolute;left:9%;bottom:3%;width:82%;height:14%;border-radius:50%;background:#344d5429;filter:blur(2px)}.map-chest-label{position:absolute;top:94%;left:50%;transform:translateX(-50%);white-space:nowrap;padding:3px 9px;border-radius:14px;background:#ffffffe0;color:#46679c;font-size:12px;font-weight:700;box-shadow:0 2px 0 #809aae21;line-height:1.5}.map-chest-label small{font-size:11px;color:#a5638c;margin-left:6px}.map-chest.selected{z-index:4}.map-guide{position:absolute;width:18%;height:15%;transform:translate(-50%,-50%);transition:left 1s cubic-bezier(.4,.05,.2,1),top 1s cubic-bezier(.4,.05,.2,1),opacity .45s;z-index:5;pointer-events:none;filter:drop-shadow(0 10px 2px #71909d25)}.map-guide img{width:100%;height:100%;object-fit:contain;animation:guide-hover 3s ease-in-out infinite}.map-guide.flying img{animation:guide-flight 1s both}.map-guide.tapping img{animation:wand-knock .55s both;transform-origin:70% 65%}.map-guide.emerging,.map-guide.ready,.map-guide.revealing,.map-guide.turning{opacity:0}.chest-burst{position:absolute;left:20%;top:-20%;color:#fff6bf;font-size:60px;animation:star-burst .7s both;text-shadow:0 0 16px #ffdb85}.map-back{left:15px;top:14px;z-index:20;border:1px solid #fff;padding:8px 13px;background:#fffdf8e8;color:#567493;min-height:40px}.map-back,.map-narration{position:absolute;border-radius:20px;font-size:13px}.map-narration{bottom:12px;left:50%;transform:translateX(-50%);width:max-content;max-width:92%;padding:8px 14px;background:#ffffffe6;color:#586e8f;z-index:22;pointer-events:none}.map-footer{padding:18px 4px 0}.map-footer>p{font-size:14px;margin-bottom:16px}.map-footer strong{color:#c96c9d}.phase-emerging .garden-map,.phase-ready .garden-map,.phase-revealing .garden-map,.phase-turning .garden-map{filter:brightness(.92) saturate(.82)}.memory-performance{position:absolute;inset:0;z-index:10;pointer-events:none;perspective:1100px}.album-assembly{position:absolute;left:0;right:0;top:21%;height:60%;display:flex;justify-content:center;align-items:flex-start;transform-origin:50% 100%;--frame-h:clamp(170px,32svh,310px)}.physical-album{position:relative;pointer-events:auto;width:min(76%,calc(var(--frame-h) * var(--ratio,1.3333)));aspect-ratio:var(--ratio,1.3333);height:auto;max-height:var(--frame-h);min-height:110px;background:none!important;border:0;padding:0;box-shadow:none;perspective:1100px;transition:width .8s,height .8s,aspect-ratio .8s;overflow:visible;z-index:3;opacity:0;transform:translateY(110px) scale(.25)}.physical-album:active{transform:none}.album-rotator{position:absolute;inset:0;transform-style:preserve-3d;transform:rotateY(var(--turn));transition:transform 1.1s cubic-bezier(.42,0,.22,1)}.album-face{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;background:#fffdf4;border:8px solid #fff9ec;border-radius:15px;outline:3px solid #68a5d6;box-shadow:0 5px 0 #22548d5c,0 15px 25px #183c7329;overflow:hidden;display:grid;place-items:center}.album-face.back{transform:rotateY(180deg)}.album-face img{width:100%;height:100%;object-fit:contain;background:#fffdf4}.empty-memory{width:100%;height:100%;display:flex;align-items:center;justify-content:center;flex-direction:column;color:#6485aa;background:linear-gradient(135deg,#fffdf7,#faeff5);padding:14px}.empty-memory>span{font-size:45px;color:#e29bbd;line-height:1.2}.empty-memory strong{font-size:14px}.empty-memory small{font-size:12px;margin-top:8px}.frame-corner{position:absolute;z-index:4;color:#ef8db7;text-shadow:1px 2px white;font-size:22px;pointer-events:none}.corner-a{left:-10px;top:-15px}.corner-b{right:-10px;bottom:-16px;color:#edb669}.pal{position:absolute;pointer-events:none;width:32%;height:34%;object-fit:contain;z-index:6}.frame-out .physical-album{opacity:1;transform:translateY(0) scale(1);animation:prop-unpack .9s cubic-bezier(.2,.85,.3,1.1)}.memory-caption{position:absolute;bottom:10%;left:12%;right:12%;text-align:center;color:#355876;pointer-events:auto;font-size:13px;background:#fffc;border-radius:18px;padding:8px 10px;z-index:9}.memory-caption p{margin:0 0 3px}.memory-caption span{display:inline-block;margin-right:12px;color:#b26b95;font-weight:700}.memory-caption button{border:0;background:none;color:#4f7098;padding:6px;font-size:13px;min-height:36px}.star-performer{position:absolute;left:3%;top:calc(var(--prop-h,var(--frame-h)) - 12px);width:32%;height:130px;z-index:5;pointer-events:none;animation:star-emerge .7s both}.pal-star-body{inset:0;width:100%;height:100%;animation:guide-hover 3s infinite}.loose-wand,.pal-star-body{position:absolute;object-fit:contain}.loose-wand{left:72%;top:18%;width:33%;height:46%;transform-origin:5% 95%;transform:rotate(-18deg)}.magic-thread{position:absolute;left:85%;top:-25%;font-size:21px;white-space:nowrap;color:#fff7af;transform:rotate(-43deg);text-shadow:0 0 5px #efc767;animation:twinkle 1.4s infinite}.performance-0 .physical-album{animation:star-levitate 3s ease-in-out infinite}.is-turning .loose-wand{animation:cast-flip 1.1s both}.is-turning .magic-thread{animation:spell-spark 1.1s both}.performance-1 .pal{top:calc(var(--prop-h,var(--frame-h)) - 36px);height:135px;width:31%}.pal-blue{left:0;transform-origin:80% 20%;animation:pair-climb-left .75s both}.pal-peach{right:0;transform-origin:20% 20%;animation:pair-climb-right .75s both}.frame-out .performance-1{animation:pair-lift-together .9s both}.is-turning .performance-1 .pal-blue{animation:pair-push 1.1s both}.is-turning .performance-1 .pal-peach{animation:pair-pull 1.1s both}.pal-rabbit{right:2%;top:calc(var(--prop-h,var(--frame-h)) - 48px);height:180px;width:37%;animation:rabbit-out .75s both}.frame-out .performance-2{animation:hug-bring .85s both}.is-turning .pal-rabbit{animation:rabbit-turn 1.1s both}.performance-2 .album-rotator{transition-timing-function:steps(2)}.pal-lamb{left:50%;top:calc(var(--prop-h,var(--frame-h)) - 6px);height:135px;width:33%;transform:translateX(-50%);animation:lamb-out .7s both}.frame-out .performance-3{animation:head-catch .9s both}.is-turning .performance-3{animation:head-flip 1.1s both}.pal-sweeper{left:9%;top:calc(var(--prop-h,var(--frame-h)) - 8px);height:115px;width:35%;animation:sweeper-out .8s both}.frame-out .performance-4 .physical-album{animation:dust-reveal 1s both}.is-turning .pal-sweeper{animation:sweep-across 1.1s both}.is-turning .performance-4 .physical-album:after{content:"✦ · ✧ · ✦";position:absolute;inset:0;display:grid;place-items:center;background:#e8f4ffeb;color:#d5a4ce;font-size:30px;animation:dust-screen 1.1s both;pointer-events:none}.phase-emerging .pal,.phase-emerging .star-performer{top:calc(var(--prop-h,var(--frame-h)) + 45px)}@keyframes little-struggle{0%{transform:rotate(-5deg) scaleX(.98)}to{transform:rotate(5deg) scaleX(1.02)}}@keyframes ground-cushion{0%{transform:scale(1.12,.84)}65%{transform:scale(.97,1.03)}to{transform:scale(1)}}@keyframes tiny-walk{0%,to{transform:rotate(-2deg) scaleY(.995)}50%{transform:rotate(2deg) scaleY(1)}}@keyframes guide-hover{50%{transform:translateY(-5px) rotate(2deg)}}@keyframes guide-flight{0%{transform:rotate(-12deg)}50%{transform:translateY(-12px) rotate(4deg)}to{transform:rotate(0)}}@keyframes wand-knock{0%,to{transform:rotate(0)}30%{transform:rotate(-15deg) translateY(-6px)}65%{transform:rotate(17deg) translateY(7px)}}@keyframes star-burst{0%{transform:scale(.2);opacity:0}45%{opacity:1;transform:scale(1.8)}to{opacity:0;transform:scale(2.4)}}@keyframes prop-unpack{0%{transform:translateY(120px) scale(.25);opacity:0}to{transform:translateY(0) scale(1);opacity:1}}@keyframes star-emerge{0%{transform:translate(50px,100px) scale(.4);opacity:0}to{transform:translate(0) scale(1);opacity:1}}@keyframes star-levitate{0%,to{translate:0 0}50%{translate:0 -8px}}@keyframes cast-flip{0%,to{transform:rotate(-18deg)}25%{transform:rotate(-62deg)}50%{transform:rotate(25deg)}75%{transform:rotate(-34deg)}}@keyframes spell-spark{0%,to{opacity:.3;scale:.9}50%{opacity:1;scale:1.5}}@keyframes pair-climb-left{0%{translate:110px 95px;rotate:15deg;opacity:0}40%{translate:65px 40px;rotate:-12deg;opacity:1}70%{translate:22px -10px;rotate:3deg}to{translate:0 0;rotate:0deg}}@keyframes pair-climb-right{0%{translate:-110px 95px;rotate:-15deg;opacity:0}40%{translate:-65px 40px;rotate:12deg;opacity:1}70%{translate:-22px -10px;rotate:-3deg}to{translate:0 0;rotate:0deg}}@keyframes pair-lift-together{0%{translate:0 65px}35%{translate:0 73px;scale:1 .96}to{translate:0 0;scale:1}}@keyframes pair-push{30%{rotate:-13deg;translate:12px -5px}70%{rotate:9deg;translate:0 7px}}@keyframes pair-pull{30%{rotate:13deg;translate:-12px 7px}70%{rotate:-9deg;translate:0 -5px}}@keyframes rabbit-out{0%{translate:0 90px;scale:.6;opacity:0}50%{translate:0 -8px;opacity:1}to{translate:0 0;scale:1}}@keyframes hug-bring{0%{translate:50px 80px;rotate:8deg}to{translate:0 0;rotate:0deg}}@keyframes rabbit-turn{0%,to{rotate:0deg;scale:1}45%,55%{rotate:-15deg;scale:1.15;translate:-25px -30px}}@keyframes lamb-out{0%{translate:0 90px;scale:1 .8;opacity:0}55%{translate:0 -25px;scale:.9 1.1;opacity:1}80%{translate:0 6px;scale:1.1 .9}to{translate:0 0;scale:1}}@keyframes head-catch{0%{translate:0 80px}50%{translate:0 -15px}75%{translate:0 7px}to{translate:0 0}}@keyframes head-flip{0%,to{translate:0 0}20%{translate:0 18px;scale:1 .96}50%{translate:0 -38px;scale:1}78%{translate:0 8px}}@keyframes sweeper-out{0%{translate:70px 65px;rotate:-7deg;opacity:0}50%{rotate:7deg;opacity:1}to{translate:0 0;rotate:0deg}}@keyframes dust-reveal{0%{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0)}}@keyframes sweep-across{0%,to{translate:0 0;rotate:0deg}50%{translate:130px -10px;rotate:12deg}}@keyframes dust-screen{0%,to{opacity:0;transform:translateX(-90%)}35%,65%{opacity:1;transform:translateX(0)}90%{opacity:0;transform:translateX(90%)}}@media(min-width:600px){.welcome>.grounded-couple{height:260px}.classroom-cast .grounded-couple{height:210px}.classroom-cast{height:220px}.album-assembly{--frame-h:300px}.map-chest-label,.map-narration{font-size:14px}}@media(max-width:390px){.map-viewport{height:540px}.map-chest-label{font-size:11px;padding:2px 6px}.map-chest-label small{font-size:10px;margin-left:3px}.album-assembly{--frame-h:210px}.empty-memory strong{font-size:12px}.star-performer{width:35%}.memory-caption{font-size:12px;left:8%;right:8%}.grounded-couple{height:200px}.welcome>.grounded-couple{height:205px}.classroom-cast .grounded-couple{height:165px}.classroom-cast{height:175px}}@media(prefers-reduced-motion:reduce){.invitation *,.invitation :after,.invitation :before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.orbit-whale{will-change:auto}}.living-map{height:clamp(560px,78svh,790px);overflow:clip;background:#d9edff}.living-map .map-camera{transform-origin:50% 50%;transition:transform 1.45s cubic-bezier(.3,.05,.2,1)}.living-map .garden-map{filter:none;object-fit:fill}.world-site{position:absolute;width:0;height:0;z-index:2;--foot-x:0cqw;--foot-y:10cqw}.world-site.selected{z-index:12}.site-0,.site-3,.site-4{--present-x:13cqw}.site-1,.site-2{--present-x:-13cqw}.site-1{--present-x:-11cqw}.open-chest-back,.open-chest-front,.treasure-trigger{position:absolute;left:-8cqw;bottom:0;width:16cqw;height:16cqw;margin:0;padding:0;border:0;background:none!important;box-shadow:none!important;transform:none!important}.treasure-trigger{height:13cqw;z-index:11;overflow:visible;opacity:1!important}.open-chest-back img,.open-chest-front img,.treasure-trigger img{width:100%;height:100%;object-fit:fill;image-rendering:pixelated;pointer-events:none}.treasure-trigger .closed-chest{transition:opacity .22s}.opened .closed-chest{opacity:0}.open-chest-back,.open-chest-front{pointer-events:none;opacity:0;transition:opacity .22s}.open-chest-back{z-index:2}.open-chest-front{z-index:8;clip-path:polygon(0 57%,72% 59%,100% 47%,100% 100%,0 100%)}.opened .open-chest-back,.opened .open-chest-front{opacity:1}.phase-opening .selected .open-chest-back{animation:lid-unfold .65s both;transform-origin:50% 60%}.box-ground-shadow{position:absolute;left:-9cqw;top:-1.1cqw;width:18cqw;height:2.8cqw;background:#685c6245;border-radius:50%;filter:blur(2px)}.world-site .map-chest-label{top:calc(100% + 3px);font-size:clamp(10px,2.2cqw,14px);padding:2px 7px}.world-site .map-chest-label small{font-size:.85em}.residents{position:absolute;inset:0;z-index:5;pointer-events:none}.residents,.scene-prop{transition:translate .9s ease-in-out}.phase-presenting .residents,.phase-presenting .scene-prop,.phase-ready .residents,.phase-ready .scene-prop,.phase-turning .residents,.phase-turning .scene-prop{translate:var(--present-x) 0}.resident{position:absolute;width:11cqw;height:14cqw;left:-5.5cqw;bottom:0;transform:translate(var(--foot-x),var(--foot-y));transform-origin:50% 100%;--foot-x:0cqw;--foot-y:2.7cqw}.resident-blue{--foot-x:-12cqw}.resident-peach{--foot-x:12cqw}.resident-star{--foot-x:-13cqw;--foot-y:2cqw}.resident-rabbit{--foot-x:11cqw;width:13cqw;height:17cqw;left:-6.5cqw}.resident-sweeper{--foot-x:-11cqw;height:14cqw}.resident-lamb{height:12cqw}.resident-body{width:100%;height:100%;position:relative;transform-origin:50% 95%}.resident-body>img:first-child{width:100%;height:100%;object-fit:contain;object-position:center bottom;image-rendering:pixelated}.phase-climbing .resident-body>img:first-child,.phase-peeking .resident-body>img:first-child,.phase-retreating .resident-body>img:first-child{object-position:center top}.resident-shadow{position:absolute;bottom:-.3cqw;left:13%;width:74%;height:1.7cqw;background:#67595a55;filter:blur(1px);border-radius:50%;transform-origin:center;z-index:-1}.phase-peeking .residents{clip-path:polygon(-50cqw -60cqw,50cqw -60cqw,50cqw -6cqw,-50cqw -6cqw)}.phase-peeking .resident{animation:peek-from-interior .9s both}.phase-peeking .resident-peach{animation-delay:.15s}.phase-climbing .resident-shadow,.phase-peeking .resident-shadow,.phase-retreating .resident-shadow{opacity:0}.phase-climbing .resident{animation:climb-over-rim 1.2s both}.phase-climbing .resident-peach{animation-name:hop-over-rim}.phase-climbing .resident-rabbit{animation-name:rabbit-over-rim}.phase-climbing .resident-lamb{animation-name:lamb-over-rim}.phase-climbing .resident-sweeper{animation-name:sweep-over-rim}.phase-climbing .resident-star{animation-name:star-from-chest}.phase-climbing .residents{animation:cross-front-wall 1.2s both}.phase-landing .residents,.phase-packing .residents,.phase-presenting .residents,.phase-ready .residents,.phase-retrieving .residents,.phase-turning .residents{z-index:14}.phase-landing .resident-body{animation:feet-land .5s both}.phase-landing .resident-rabbit .resident-body,.phase-landing .resident-star .resident-body{animation:none}.landing-puff{position:absolute;left:0;bottom:-.6cqw;width:100%;line-height:1;text-align:center;color:#fff9df;font-size:2cqw;opacity:0;z-index:15;pointer-events:none;transform-origin:50% 100%}.phase-landing .landing-puff{animation:feet-dust .5s both}.phase-retrieving .resident-body{animation:reach-in .85s both}.phase-retrieving .resident-blue .resident-body{transform-origin:100% 100%}.phase-retrieving .resident-peach .resident-body,.phase-retrieving .resident-rabbit .resident-body{animation-name:reach-in-right;transform-origin:0 100%}.phase-retrieving .resident-star .resident-wand{animation:wand-lift .85s both}.scene-prop{position:absolute;left:0;bottom:7cqw;width:0;height:0;z-index:12;pointer-events:none}.living-map .physical-album{position:absolute;left:0;bottom:0;top:auto;width:min(28cqw,calc(22cqw * var(--ratio,1.333)));height:auto;min-height:0;max-height:none;aspect-ratio:var(--ratio,1.333);transform:translateX(-50%)!important;opacity:1!important;pointer-events:auto;animation:none;transition:width .65s,aspect-ratio .65s;filter:none!important}.living-map .album-face{border-width:4px;outline-width:2px;border-radius:7px;box-shadow:0 3px 0 #597ca3,0 7px 10px #384e7026}.living-map .frame-corner{font-size:2.8cqw}.living-map .corner-a{left:-1cqw;top:-1.7cqw}.living-map .corner-b{right:-1cqw;bottom:-1.7cqw}.album-decorations{position:absolute;inset:0;pointer-events:none;backface-visibility:hidden;-webkit-backface-visibility:hidden;transform:translateZ(1px)}.album-decorations.back{transform:rotateY(180deg) translateZ(1px)}.living-map .empty-memory{padding:5px}.living-map .empty-memory>span{font-size:5cqw}.living-map .empty-memory strong{font-size:1.65cqw;line-height:1.6}.living-map .empty-memory small{font-size:1.4cqw;margin-top:4px}.phase-retrieving .scene-prop{animation:prop-from-interior .85s both}.phase-presenting .scene-prop{animation:prop-settle 1s both}.phase-presenting .resident-body{animation:brace-prop 1s both}.prop-0:after{content:"✧ · ✦";position:absolute;left:-13cqw;top:0;color:#fff8c3;font-size:3cqw;rotate:-40deg;pointer-events:none;text-shadow:0 0 5px #ffc879}.phase-ready .prop-0{animation:magic-suspension 3s ease-in-out infinite}.phase-turning .resident-star .resident-wand{animation:wand-lift 1.15s both}.phase-turning .resident-blue .resident-body{animation:push-frame 1.15s both}.phase-turning .resident-peach .resident-body{animation:pull-frame 1.15s both}.phase-turning .resident-rabbit .resident-body{animation:rabbit-frame-turn 1.15s both}.phase-turning .prop-2{animation:rabbit-prop-turn 1.15s both}.phase-turning .prop-3,.phase-turning .resident-lamb .resident-body{animation:lamb-frame-turn 1.15s both}.phase-turning .resident-sweeper .resident-body{animation:sweeper-frame-turn 1.15s both}.phase-packing .scene-prop{animation:prop-to-interior .9s both}.phase-packing .resident-body{animation:reach-in .9s both}.phase-retreating .resident{animation:return-to-chest 1.2s both}.phase-retreating .residents{animation:behind-front-wall 1.2s both}.phase-closing .world-site.selected .open-chest-back{animation:lid-fold .5s both}.living-map .map-guide{width:14%;height:12%;z-index:15}.living-map .map-guide:not(.map):not(.flying):not(.tapping){opacity:0;transition:opacity .5s}.living-map .map-guide.guide-is-resident{opacity:0}.scene-caption{position:absolute;bottom:55px;left:10%;right:10%;padding:7px 12px;background:#ffffffde;border:1px solid #fff;border-radius:18px;z-index:30;font-size:13px;color:#557394;text-align:center}.scene-caption p{margin:0 0 2px}.scene-caption span{color:#ba7294;margin-right:16px}.scene-caption button{border:0;background:none;color:#477aa1;padding:6px}.living-map .map-narration{z-index:31}.living-map .map-back{z-index:32}.person-slot.falling .newlywed,.person-slot.held .newlywed{height:auto;width:118%;flex-shrink:0;max-width:none;max-height:none;object-fit:contain;transform-origin:57.7% 0}.person-slot.held .newlywed{animation:waist-dangle .7s ease-in-out infinite alternate}.person-slot .person-body{transform-origin:58% 48%}.orbit-whale{width:clamp(245px,48vw,350px);height:200px;opacity:.95}.orbit-whale canvas{height:100%;object-fit:contain}@keyframes lid-unfold{0%{scale:1 .7;opacity:0}to{scale:1 1;opacity:1}}@keyframes lid-fold{0%{scale:1 1;opacity:1}to{scale:1 .7;opacity:0}}@keyframes cross-front-wall{0%,48%{z-index:5}49%,to{z-index:14}}@keyframes behind-front-wall{0%,48%{z-index:14;clip-path:polygon(-50cqw -60cqw,50cqw -60cqw,50cqw 20cqw,-50cqw 20cqw)}49%,to{z-index:5;clip-path:polygon(-50cqw -60cqw,50cqw -60cqw,50cqw -6cqw,-50cqw -6cqw)}}@keyframes feet-land{0%{transform:scale(1.13,.83)}60%{transform:scale(.98,1.03)}to{transform:scale(1)}}@keyframes feet-dust{0%{opacity:0;scale:.4}40%{opacity:.9;scale:1}to{opacity:0;scale:1.7}}@keyframes reach-in{0%,to{rotate:0deg}40%,65%{rotate:18deg;translate:3cqw -1cqw}}@keyframes reach-in-right{0%,to{rotate:0deg}40%,65%{rotate:-18deg;translate:-3cqw -1cqw}}@keyframes prop-from-interior{0%{translate:0 7cqw;scale:.1;opacity:0}30%{translate:0 5cqw;scale:.22;opacity:1}to{translate:0 0;scale:1;opacity:1}}@keyframes prop-settle{0%{transform:translateY(0)}35%{transform:translateY(1.1cqw)}70%{transform:translateY(-.4cqw)}to{transform:translateY(0)}}@keyframes brace-prop{0%,to{scale:1}35%{scale:1.05 .95}70%{scale:.98 1.02}}@keyframes magic-suspension{50%{transform:translateY(-.8cqw)}}@keyframes wand-lift{0%,to{rotate:0deg}35%{rotate:-35deg}65%{rotate:18deg}}@keyframes push-frame{35%{rotate:-10deg;translate:2cqw -.7cqw}70%{rotate:4deg}}@keyframes pull-frame{35%{rotate:10deg;translate:-2cqw .7cqw}70%{rotate:-4deg}}@keyframes rabbit-frame-turn{45%{rotate:-3deg;translate:-.6cqw -.3cqw}75%{rotate:1deg}}@keyframes rabbit-prop-turn{45%{transform:translate(.3cqw,-.3cqw) rotate(-1deg)}}@keyframes lamb-frame-turn{20%{transform:translateY(1.5cqw)}50%{transform:translateY(-4cqw)}80%{transform:translateY(.8cqw)}}@keyframes sweeper-frame-turn{50%{translate:5cqw -1cqw;rotate:14deg}}@keyframes prop-to-interior{0%{translate:var(--present-x) 0;scale:1;opacity:1}70%{translate:0 5cqw;scale:.25;opacity:1}to{translate:0 7cqw;scale:.05;opacity:0}}@keyframes return-to-chest{0%{transform:translate(var(--foot-x),var(--foot-y))}45%{transform:translateY(-3cqw)}70%{transform:translateY(3cqw)}to{transform:translateY(9cqw)}}@keyframes waist-dangle{0%{rotate:-4deg;scale:1 .99}to{rotate:5deg;scale:.99 1.01}}@media(prefers-reduced-motion:reduce){.living-map *,.living-map :after,.person-slot .newlywed{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.fuller-clouds img:nth-child(n){top:var(--cloud-y);left:var(--cloud-x);width:var(--cloud-size);height:auto;opacity:var(--cloud-opacity);animation:layer-cloud var(--cloud-time) ease-in-out var(--cloud-delay) infinite alternate;image-rendering:pixelated}@keyframes layer-cloud{0%{transform:translateX(-80px)}to{transform:translateX(230px)}}.hinged-chest-canvas{position:absolute;left:50%;bottom:-2.2cqw;max-width:none;transform:translateX(-50%);pointer-events:none;image-rendering:pixelated}.hinged-chest-canvas,.living-map img.hinged-chest-canvas{width:23cqw;height:23cqw}.living-map .open-chest-front{clip-path:none}.living-map .phase-closing .selected .open-chest-back{animation:none}.living-map.phase-opening .selected .open-chest-back{animation:none;transform:none}.living-map.phase-closing .selected .open-chest-back,.living-map.phase-closing .selected .open-chest-front{opacity:1;animation:none}.pal-touch{display:block;width:100%;height:100%;padding:0!important;border:0!important;border-radius:0!important;background:none!important;box-shadow:none!important;opacity:1!important;overflow:visible;touch-action:manipulation;pointer-events:auto;cursor:pointer;filter:none!important}.pal-touch:disabled{cursor:default;pointer-events:none}.pal-touch:active{scale:1!important}.pal-touch:focus-visible{outline:2px dashed #ee9ac3;outline-offset:5px;border-radius:12px!important}.pal-pose{position:relative;display:block;width:100%;height:100%;transform-origin:50% 90%}.pal-pose>img:first-child{width:100%;height:100%;object-fit:contain;object-position:center bottom;image-rendering:pixelated}.resident-star .pal-pose .resident-wand{position:absolute;left:calc(11cqw * 376 / 493);top:auto;bottom:calc(11cqw * 109 / 493);width:calc(11cqw * 80 / 493);height:auto;max-width:none;object-fit:contain;transform-origin:10% 96.212%;rotate:0deg}.pal-reply{position:absolute;left:50%;bottom:102%;transform:translateX(-50%);width:max-content;max-width:120px;white-space:normal;border:1px solid #fff;border-radius:12px;background:#fff8fbeF;color:#946287;padding:5px 8px;font-size:10px;line-height:1.4;box-shadow:0 3px 9px #61758a22;pointer-events:none;z-index:40}.pal-reacting .pal-pose{animation:pal-hello .9s ease-in-out both}.pal-reacting.react-rabbit .pal-pose{animation:pal-shy 1.2s ease-in-out both}.pal-reacting.react-sweeper .pal-pose{animation:pal-nuzzle 1s ease-in-out both}.pal-reacting.react-star .resident-wand{animation:wand-lift .9s both}.pal-reacting .pal-pose:after{content:"♡";position:absolute;left:65%;top:15%;color:#f5a3c9;font-size:22px;animation:pal-heart 1.4s both;pointer-events:none}@keyframes pal-hello{25%{rotate:-4deg}60%{rotate:4deg}to{rotate:0deg}}@keyframes pal-shy{35%,65%{rotate:-2deg;translate:0 2px}to{rotate:0deg;translate:0 0}}@keyframes pal-nuzzle{25%{translate:3px 0;rotate:3deg}65%{translate:-3px 0;rotate:-3deg}to{translate:0 0;rotate:0deg}}@keyframes pal-heart{0%{opacity:0;translate:0 0;scale:.5}30%{opacity:1;scale:1}to{opacity:0;translate:0 -30px}}.prop-1,.prop-4{bottom:3cqw}.prop-2{bottom:5cqw}.phase-ducking .residents,.phase-peeking .residents{clip-path:polygon(-50cqw -60cqw,50cqw -60cqw,50cqw -6cqw,-50cqw -6cqw)}.phase-ducking .resident{animation:duck-into-chest .7s both}.phase-ducking .resident-shadow{opacity:0}@keyframes peek-from-interior{0%{transform:translateY(13cqw)}65%{transform:translateY(-.5cqw)}to{transform:translate(0)}}@keyframes duck-into-chest{0%{transform:translate(0)}to{transform:translateY(11cqw)}}@keyframes climb-over-rim{0%{transform:translate(0)}25%{transform:translate(-2cqw,-2cqw) rotate(-8deg)}55%{transform:translate(calc(var(--foot-x)*.6),-4cqw) rotate(-6deg)}to{transform:translate(var(--foot-x),var(--foot-y))}}@keyframes hop-over-rim{0%{transform:translate(0)}30%{transform:translate(2cqw,-1cqw)}55%{transform:translate(calc(var(--foot-x)*.6),-5cqw) rotate(6deg)}to{transform:translate(var(--foot-x),var(--foot-y))}}@keyframes rabbit-over-rim{0%{transform:translate(0)}35%{transform:translate(2cqw,-.5cqw) rotate(2deg)}65%{transform:translate(7cqw)}to{transform:translate(var(--foot-x),var(--foot-y))}}@keyframes lamb-over-rim{0%{transform:translate(0) scaleY(.92)}40%{transform:translateY(-6cqw)}to{transform:translate(var(--foot-x),var(--foot-y))}}@keyframes sweep-over-rim{0%{transform:translate(0)}30%{transform:translate(-4cqw,-1cqw) rotate(-8deg)}65%{transform:translate(-8cqw,1cqw) rotate(4deg)}to{transform:translate(var(--foot-x),var(--foot-y))}}@keyframes star-from-chest{0%{transform:translate(0)}50%{transform:translate(-5cqw,-5cqw)}to{transform:translate(var(--foot-x),var(--foot-y))}}.party-portrait{position:relative;margin:18px -8px 20px;padding:12px 8px;background:#eaf8ffb0;border:2px solid #fff;border-radius:26px;box-shadow:0 6px 20px #4c8fa51c;text-align:center}.party-title{font-size:14px;color:#63809d;margin:0}.party-stage{height:300px;position:relative;isolation:isolate;overflow:clip;border-radius:18px}.party-floor{position:absolute;bottom:5px;left:1%;right:1%;height:95px;background:linear-gradient(#fffdf0,#e6f0df);border:2px solid #fff;border-radius:50%;z-index:-1;box-shadow:0 7px 0 #80adb71c}.party-couple{position:absolute;bottom:44px;left:18%;right:18%}.party-couple .grounded-couple{height:215px!important;width:100%;margin:0;padding-bottom:0}.party-couple .couple-ground{display:none}.party-pal{position:absolute;bottom:10px;left:var(--party-x);width:14%;height:90px;transform:translateX(-50%);animation:join-portrait .8s ease-out var(--party-delay) both}.party-star{bottom:45px;left:8%;height:95px}.party-sweeper{height:75px}.party-rabbit{height:100px}.party-pal:before{content:"";position:absolute;bottom:0;left:20%;width:60%;height:7px;background:#64736a33;border-radius:50%;filter:blur(1px)}.party-pal .pal-reply{font-size:11px;max-width:105px}.party-blue .pal-reply,.party-star .pal-reply{left:10%;transform:none}.party-lamb .pal-reply,.party-sweeper .pal-reply{left:auto;right:0;transform:none}.party-result{font-size:13px;color:#a2648c;margin:9px 0 0;min-height:20px}.party-portrait>.text-button{margin-top:5px;font-size:13px;min-height:36px}.party-flash{z-index:30;background:#fff;opacity:0;animation:portrait-flash .5s 1.6s both}.party-confetti,.party-flash{position:absolute;inset:0;pointer-events:none}.party-confetti{overflow:hidden;z-index:20}.party-confetti i{position:absolute;top:0;width:5px;height:8px;border-radius:2px;opacity:0;animation:portrait-confetti 1.7s ease-out both}@keyframes join-portrait{0%{opacity:0;translate:0 14px}to{opacity:1;translate:0 0}}@keyframes portrait-flash{0%,to{opacity:0}25%{opacity:.85}}@keyframes portrait-confetti{0%{opacity:0;transform:translateY(-10px) rotate(0)}15%{opacity:1}to{opacity:0;transform:translateY(280px) rotate(240deg)}}@media(max-width:420px){.party-stage{height:255px}.party-couple .grounded-couple{height:175px!important}.party-pal{height:66px}.party-star{height:75px}.party-rabbit{height:80px}.party-sweeper{height:63px}.party-title{font-size:12px}}@media(prefers-reduced-motion:reduce){.fuller-clouds img:nth-child(n),.idle-peek,.pal-pose,.party-stage *{animation:none!important}.idle-peek{transform:translateY(7cqw)}.party-flash{display:none}.pal-reacting .pal-pose:after{animation:none!important;opacity:1}}.living-map .open-chest-back,.living-map .open-chest-front{transition:none}.invitation .invitation-letter{display:block;position:relative;width:min(80%,280px);padding:0;border:0;border-radius:0;background:none;box-shadow:none;overflow:visible;isolation:isolate;color:#984778}.invitation-letter:after,.invitation-letter:before{display:none}.invitation-letter>small,.invitation-letter>strong{display:block;position:relative;margin-top:10px}.invitation-letter>small{margin-top:2px;color:#6484a1}.invitation .invitation-letter:active{transform:none}.envelope-art{position:relative;display:block;height:156px;width:100%;perspective:900px;filter:drop-shadow(0 7px 0 #608cac20)}.envelope-back{position:absolute;inset:0;background:#f0cfdd;border:3px solid #bb8ea9;border-radius:8px}.envelope-note{position:absolute;left:7%;top:9%;width:86%;height:130px;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:6px;background:#fffaf0;border:3px solid #e6cda1;box-shadow:inset 0 0 0 4px #fffef8;color:#8d6280;z-index:1}.envelope-note>span{font-size:13px;letter-spacing:1px}.envelope-note>b{font-size:17px}.envelope-note>small{font-size:11px;letter-spacing:2px}.envelope-pocket{position:absolute;inset:0;z-index:3;background:#f8deea;clip-path:polygon(0 0,50% 52%,100% 0,100% 100%,0 100%);border:3px solid #bb8ea9;border-radius:8px}.envelope-pocket:after{content:"";position:absolute;inset:0;background:#ffeaf1;clip-path:polygon(0 100%,50% 45%,100% 100%)}.envelope-flap{position:absolute;inset:0 0 auto;height:106px;z-index:4;transform-origin:center 3px;backface-visibility:visible}.envelope-flap svg{display:block;width:100%;height:100%;overflow:hidden}.envelope-rim{position:absolute;inset:0;border:3px solid #bb8ea9;border-radius:8px;z-index:5;pointer-events:none}.envelope-seal{position:absolute;left:50%;top:57%;transform:translate(-50%,-50%);z-index:6;background:#dc8eb0;color:#fff6df;width:40px;height:40px;display:grid;place-items:center;font-size:25px;line-height:1;border:3px solid #f2bbd0;outline:2px solid #c27898;border-radius:35%;box-shadow:0 3px 0 #bb74954a;animation:seal-breathe 2.8s ease-in-out infinite}.departing-letter .invitation-letter .envelope-art{visibility:hidden}.scene-transition{position:fixed;inset:0;z-index:100;overflow:hidden;pointer-events:auto;isolation:isolate}.letter-journey{position:absolute;left:var(--origin-x);top:var(--origin-y);width:var(--letter-w);height:var(--letter-h);transform:translate(-50%,-50%);animation:letter-journey 3.1s cubic-bezier(.45,0,.2,1) both}.letter-journey .envelope-seal{animation:seal-release .45s ease-in both}.letter-journey .envelope-flap{animation:flap-unfold .6s ease-in-out .18s both}.letter-journey .envelope-note{animation:note-unfold 3.1s ease-in-out both}.letter-journey .envelope-back,.letter-journey .envelope-pocket,.letter-journey .envelope-rim{animation:pocket-release 3.1s ease-in-out both}.paper-wash{position:absolute;inset:0;background:#fffaf0;animation:paper-wash 3.1s linear both}.departing-magic .teacher .teaching{animation:teacher-open-portal 1.25s ease-in-out both;transform-origin:60% 68%}.departing-magic .blackboard{animation:chalk-magic 1.25s ease-in-out both}.portal-bloom{width:120px;height:120px;margin:-60px;background:#eafaff;border:4px solid #fff5ce;border-radius:50%;box-shadow:0 0 0 8px #a5d8ed90,0 0 0 12px #fff9dc60;animation:portal-bloom 2s cubic-bezier(.5,0,.25,1) both}.portal-bloom,.spell-circle{position:absolute;left:var(--origin-x);top:var(--origin-y)}.spell-circle{width:130px;height:130px;margin:-65px;color:#fff5cd;animation:spell-circle 2s ease-out both}.spell-circle span{position:absolute;inset:0;border:2px dashed #f9df9b;border-radius:50%}.spell-circle span:nth-child(2){inset:14%;border:2px solid #fff4d0;transform:rotate(45deg);border-radius:18%}.spell-circle b{position:absolute;inset:0;display:grid;place-items:center;font-size:55px;font-weight:400;text-shadow:0 0 12px #fff9ce}.spell-motes{position:absolute;left:var(--origin-x);top:var(--origin-y)}.spell-motes i{position:absolute;width:6px;height:6px;background:#ffebb5;box-shadow:0 0 0 2px #fff8;animation:spell-mote 1.2s calc(.18s + var(--delay)) both;transform:rotate(var(--a))}.soft-cloud-wash{position:absolute;inset:0;background:#eafaff;animation:soft-cloud-wash .85s both}.living-map .map-guide{transition:left .9s cubic-bezier(.4,.05,.2,1),top .9s cubic-bezier(.4,.05,.2,1),opacity .45s}.guide-facing{display:block;width:100%;height:100%;transform-origin:center}.living-map .map-guide.flying img{animation-duration:.9s}.wedding-flower-arch{display:none;position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:116%;height:120%;max-width:none;pointer-events:none;z-index:-1;overflow:visible}.ceremony .wedding-flower-arch,.welcome .wedding-flower-arch{display:block}.arch-flower-sway{transform-box:fill-box;transform-origin:center bottom;animation:arch-flower-sway 5s ease-in-out infinite}.party-couple .wedding-flower-arch{width:138%;height:133%}@keyframes seal-breathe{50%{box-shadow:0 3px 0 #bb74954a,0 0 0 5px #fff5}}@keyframes seal-release{to{transform:translate(-50%,-70%) rotate(15deg) scale(1.25);opacity:0}}@keyframes flap-unfold{0%{transform:rotateX(0)}to{transform:rotateX(175deg);z-index:0}}@keyframes pocket-release{0%,40%{opacity:1;translate:0 0}65%,to{opacity:0;translate:0 80px}}@keyframes note-unfold{0%,25%{translate:0 0;scale:1}40%{translate:0 -144px;scale:1;animation-timing-function:cubic-bezier(.55,0,.85,.4)}80%,to{translate:0 0;scale:var(--cover)}}@keyframes letter-journey{0%,12%{transform:translate(-50%,-50%)}40%,to{transform:translate(calc(-50% + var(--travel-x)),calc(-50% + var(--travel-y)))}}@keyframes paper-wash{0%,75%{opacity:0}80%,88%{opacity:1}to{opacity:0}}.transition-letter .letter-journey{animation-name:letter-journey,letter-fade;animation-duration:3.1s;animation-fill-mode:both}@keyframes letter-fade{0%,82%{opacity:1}88%,to{opacity:0}}@keyframes teacher-open-portal{0%,to{transform:rotate(0)}22%{transform:rotate(-17deg) translateY(-6px)}43%{transform:rotate(14deg)}62%{transform:rotate(-5deg)}80%{transform:rotate(7deg)}}@keyframes chalk-magic{45%{box-shadow:inset 0 0 0 2px #265c5b,0 0 26px #fff1bd90}}@keyframes portal-bloom{0%,18%{transform:scale(0);opacity:0}30%{transform:scale(.35);opacity:1}59%,72%{transform:scale(var(--cover));opacity:1}to{transform:scale(var(--cover));opacity:0}}@keyframes spell-circle{0%,9%{transform:scale(.1) rotate(-40deg);opacity:0}28%{transform:scale(1) rotate(0);opacity:1}55%{transform:scale(2) rotate(85deg);opacity:1}75%,to{transform:scale(3) rotate(130deg);opacity:0}}@keyframes spell-mote{0%{transform:rotate(var(--a)) translateX(9px) scale(0);opacity:0}28%{opacity:1}to{transform:rotate(var(--a)) translateX(180px) scale(.2);opacity:0}}@keyframes soft-cloud-wash{0%,to{opacity:0}35%,65%{opacity:1}}@keyframes arch-flower-sway{50%{transform:rotate(3deg)}}@media(prefers-reduced-motion:reduce){.arch-flower-sway,.envelope-seal{animation:none}.living-map .map-guide{transition:none}}@font-face{font-family:WeddingPixel;src:url(/fonts/wedding-pixel.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap}@font-face{font-family:WeddingPixelExtended;src:url(/fonts/fusion-pixel-12px-full.woff2) format("woff2");font-style:normal;font-weight:400;font-display:swap}.invitation{--title-font:WeddingPixel,WeddingPixelExtended,WeddingRound,"Microsoft YaHei",sans-serif;--title-edge:#fffdf3;--title-shadow:#a8c9e5}.invitation .date-card strong,.invitation .names,.invitation .portrait h2,.invitation .reply-panel h2,.invitation h1{font-family:var(--title-font);font-weight:400;font-synthesis:none;letter-spacing:1px}.invitation h1{font-size:36px;line-height:1.4;color:#39649a;text-shadow:-1px -1px 0 var(--title-edge),1px -1px 0 var(--title-edge),-1px 1px 0 var(--title-edge),1px 1px 0 var(--title-edge),2px 3px 0 var(--title-shadow);text-wrap:balance}.invitation .welcome h1{font-size:48px;line-height:1.25;letter-spacing:4px;color:#39649a}.invitation .welcome h1 span{color:#d978a3;--title-shadow:#eac0d0;text-shadow:-1px -1px 0 var(--title-edge),1px -1px 0 var(--title-edge),-1px 1px 0 var(--title-edge),1px 1px 0 var(--title-edge),2px 3px 0 var(--title-shadow)}.invitation .names{font-size:24px;line-height:1.6;letter-spacing:2px;color:#426d9d;text-shadow:1px 2px 0 #fffdf3}.invitation .names b{font-size:20px;font-weight:400;vertical-align:middle}.invitation .portrait h2{font-size:24px;line-height:1.5;letter-spacing:2px;text-shadow:1px 2px 0 #164848}.invitation .reply-panel h2{font-size:24px;line-height:1.6;color:#9b557e;text-shadow:1px 2px 0 #fffdf3}.invitation .date-card strong{font-size:36px;letter-spacing:2px;line-height:1.6}.invitation .primary,.invitation .secondary,.invitation-letter>strong{font-weight:700;letter-spacing:1px;text-shadow:0 1px 0 #fff8}.invitation .eyebrow{font-size:12px;line-height:1.8;letter-spacing:1.5px;color:#507792}.invitation .guest{line-height:1.9;letter-spacing:.5px}.invitation .chalk-caption,.invitation .soft-note,.invitation .teacher-line{letter-spacing:.6px;line-height:1.9}.invitation .map-narration,.invitation .portrait p,.invitation form{letter-spacing:.2px}.invitation input,.invitation textarea{letter-spacing:normal;text-shadow:none}@media(max-width:599px){.invitation h1{font-size:24px;line-height:1.7}.invitation .welcome h1{font-size:36px;line-height:1.4;letter-spacing:3px}}@media(max-width:359px){.invitation .names,.invitation h1{letter-spacing:0}}.invitation:is(.step-0,.step-1,.step-2){height:100svh;min-height:0;display:flex;flex-direction:column;padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom)}.invitation:is(.step-0,.step-1,.step-2)>.topbar{flex:none;padding:10px 22px}.scene-viewport.fitted{position:relative;flex:1;min-height:0}.fitted>.scene-fit-content{transform-origin:top center;display:flow-root}.letter-journey>.envelope-art{width:calc(100% / var(--letter-scale,1));transform:scale(var(--letter-scale,1));transform-origin:top left}.fitted .scene{padding:0 26px 12px}.fitted .eyebrow{margin:3px 0 8px}.fitted .welcome{min-height:0;padding:0;justify-content:flex-start}.fitted .welcome h1{margin:0 0 6px;font-size:36px;line-height:1.25}.fitted .names{margin:4px 0 7px}.fitted .guest{padding:5px 18px;line-height:1.65}.fitted .welcome>.grounded-couple{height:clamp(115px,21svh,180px);margin:12px auto 5px}.fitted .soft-note{margin-top:9px}.invitation:is(.step-0,.step-1) .fitted .scene{min-height:var(--scene-height,0);display:flex;flex-direction:column}.invitation:is(.step-0,.step-1) .fitted .scene>section{flex:1;display:flex;flex-direction:column;justify-content:space-evenly;gap:8px;padding-block:8px}.invitation:is(.step-0,.step-1) .fitted .scene>section>*{flex-shrink:0}.step-0 .fitted .welcome>.grounded-couple{height:clamp(120px,20svh,190px);width:min(88%,360px);margin:28px auto 8px}.step-0 .fitted .welcome .wedding-flower-arch{width:110%;height:112%}.step-0 .invitation-letter{width:min(68%,238px)}.step-0 .invitation-letter>.envelope-art{width:calc(100% / .85);transform:scale(.85);transform-origin:top left;margin-bottom:-23.4px}.step-0 .fitted .welcome .soft-note{margin-top:0}.step-1 .fitted .intro{width:100%}.step-1 .fitted .intro>.blackboard{margin-block:4px}.step-1 .fitted .intro>.classroom-cast{height:clamp(130px,21svh,190px);width:100%}.step-1 .fitted .intro>.primary{margin-block:0}.fitted .intro>h1{font-size:24px;line-height:1.5;margin-bottom:12px}.fitted .blackboard{margin-top:0;padding:14px 16px 10px}.fitted .portrait-frame{height:clamp(110px,23svh,190px);width:auto;max-width:100%;margin-inline:auto;aspect-ratio:3/4}.fitted .portrait h2{margin:8px 0 2px}.fitted .portrait p{line-height:1.6}.fitted .chalk-caption{margin-top:10px;padding-top:7px}.fitted .classroom-cast{height:clamp(105px,18svh,150px)}.fitted .classroom-cast .grounded-couple{height:100%}.fitted .teacher{width:29%;bottom:14px}.fitted .teacher-line{margin:7px 0 10px}.fitted .exploration>h1{font-size:24px;line-height:1.5;margin-bottom:8px}.fitted .map-viewport{height:max(330px,calc(100svh - 240px));border-radius:24px}.fitted .map-footer{padding:8px 0 0}.fitted .map-footer>p{font-size:13px;margin-bottom:6px}.fitted .map-footer>.primary{margin-block:0;padding-block:10px}.fitted .map-footer>.text-button{margin:3px 0 0;padding:4px 8px;font-size:12px}@media(min-width:600px){.fitted .scene{padding-inline:44px}.fitted .welcome h1{font-size:48px}.fitted .welcome>.grounded-couple{height:clamp(130px,23svh,210px)}}@media(max-width:359px){.fitted .scene{padding-inline:18px}}.offering-pose{aspect-ratio:400/660}.idle-portrait,.offering-pose{position:relative;display:block;height:100%;max-width:100%;pointer-events:none}.idle-portrait{aspect-ratio:337/558}.idle-portrait>.newlywed{display:block;width:100%;height:100%;object-fit:fill}.idle-eyelids{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;opacity:0}.standing .idle-eyelids{animation:newlywed-blink 5.8s step-end -1.2s infinite}.bride.standing .idle-eyelids{animation-duration:6.9s;animation-delay:-3.6s}.standing .idle-portrait,.standing .offering-pose{transform-origin:center bottom;animation:newlywed-breathe 4.6s ease-in-out infinite}.bride.standing .idle-portrait,.bride.standing .offering-pose{animation-duration:5.3s;animation-delay:-2s}.departing-letter .idle-eyelids{animation:none;opacity:0}.departing-letter .standing .offering-pose{animation:none}@keyframes newlywed-blink{0%,91%,95%,to{opacity:0}92%,94%{opacity:1}}@keyframes newlywed-breathe{0%,to{transform:scaleY(1)}50%{transform:scaleY(1.003)}}@media(prefers-reduced-motion:reduce){.standing .idle-eyelids,.standing .idle-portrait,.standing .offering-pose{animation:none}}.offering-pose>.pixel-art{position:absolute;inset:0;width:100%;height:100%;max-width:none;object-fit:fill}.offering-arm{transition:transform .45s cubic-bezier(.35,0,.3,1)}.offering-actors{position:absolute;inset:0;transform:scale(.82);transform-origin:center bottom}.groom .offering-pose.relaxed .offering-arm{transform:rotate(62deg)}.bride .offering-pose.relaxed .offering-arm{transform:rotate(-55deg)}.walking .offering-pose{animation:tiny-walk .28s ease-in-out infinite;transform-origin:center bottom}.landing .offering-pose{animation:ground-cushion .24s both;transform-origin:center bottom}.step-0 .fitted .welcome>.welcome-tableau{width:min(100%,430px);margin:30px auto 0;container-type:inline-size}.welcome-tableau>.offering-couple{width:100%;height:auto;aspect-ratio:700/660;margin:0;padding:0;display:block}.offering-actors>.person-slot{position:absolute;top:0;width:57.142857%;height:100%;z-index:2}.offering-actors>.groom{left:-11.428571%}.offering-actors>.bride{left:54.285714%}.offering-actors>.person-slot:is(.held,.falling){z-index:8}.offering-actors>.person-slot .offering-pose{width:100%;max-width:none}.offering-couple>.couple-ground{bottom:-2%;left:-8%;right:-8%;height:12%;z-index:-1}.offering-couple .contact-shadow{bottom:1%;left:27%;width:47%}.step-0 .offering-couple .wedding-flower-arch{width:123%;height:115%;bottom:-1%;opacity:.85}.step-0 .offering-couple .offering-actors>.invitation-letter{position:absolute;left:32.85%;top:33.65%;width:30%;height:17.727273%;z-index:4;transform-origin:center bottom;transition:rotate .35s,translate .5s}.step-0 .offering-couple .offering-actors>.invitation-letter>.envelope-art{width:280px;height:156px;margin:0;transform:scale(var(--offering-scale,.4));transform-origin:top left}.offering-couple .offering-actors>.invitation-letter:focus-visible{outline-offset:6px}.offering-couple:has(.groom:not(.standing)) .offering-actors>.invitation-letter{rotate:3deg}.offering-couple:has(.bride:not(.standing)) .offering-actors>.invitation-letter{rotate:-3deg}.offering-couple:has(.groom:not(.standing)):has(.bride:not(.standing)) .offering-actors>.invitation-letter{rotate:0deg;translate:0 43cqw}.departing-letter .offering-couple .groom .offering-arm{transform:rotate(62deg)}.departing-letter .offering-couple .bride .offering-arm{transform:rotate(-55deg)}.invitation .offering-instruction{font-size:14px;letter-spacing:1px;color:#985679;line-height:1.7;margin-top:0}.offering-couple .offering-actors>.invitation-letter:before{content:"";display:block;position:absolute;inset:-7px;border:2px solid #fff2c5;border-radius:12px;box-shadow:0 0 12px 5px #fff0b75c;pointer-events:none;animation:letter-invite-glow 4.8s ease-in-out infinite}.offering-couple .envelope-seal{animation:letter-seal-glow 2.4s ease-in-out infinite}.offering-couple .letter-nudge{position:absolute;left:50%;top:calc(100% + 14px);transform:translateX(-50%);width:max-content;padding:3px 10px;background:#fff9ef;border:1px solid #dca4bb;border-radius:12px;box-shadow:0 3px 0 #b7859a20;color:#a05278;font-size:clamp(18px,4.5cqw,24px);font-weight:700;line-height:1.5;letter-spacing:1px;pointer-events:none;animation:letter-nudge-appear .6s .8s both}.letter-nudge:before{content:"";position:absolute;left:calc(50% - 5px);top:-6px;width:9px;height:9px;background:#fff9ef;border-left:1px solid #dca4bb;border-top:1px solid #dca4bb;transform:rotate(45deg)}.departing-letter .offering-couple .letter-nudge,.offering-couple:has(.person-slot:not(.standing)) .letter-nudge{visibility:hidden}.departing-letter .offering-couple .invitation-letter:before,.offering-couple:has(.person-slot:not(.standing)) .invitation-letter:before{display:none}.departing-letter .offering-couple .envelope-seal{animation:none}@keyframes letter-invite-glow{0%,55%,to{opacity:.15;scale:1}72%{opacity:.9;scale:1.04}90%{opacity:0;scale:1.12}}@keyframes letter-seal-glow{0%,to{box-shadow:0 3px 0 #bb74954a}50%{box-shadow:0 3px 0 #bb74954a,0 0 0 5px #fff3d777,0 0 15px 7px #ffe5aa88}}@keyframes letter-nudge-appear{0%{opacity:0;translate:0 4px}to{opacity:1;translate:0 0}}@media(prefers-reduced-motion:reduce){.offering-couple .envelope-seal,.offering-couple .invitation-letter:before,.offering-couple .letter-nudge{animation:none}.offering-couple .invitation-letter:before{opacity:.5}.offering-arm,.offering-couple .offering-actors>.invitation-letter{transition:none}}.newlywed-hint{position:absolute;left:50%;bottom:0;translate:-50% 100%;width:max-content;max-width:95%;padding:2px 9px;border-radius:10px;background:#fff9edeb;color:#93758b;font-size:11px;pointer-events:none;opacity:0;animation:hint-once 8s 2s both}.grounded-couple:has(.person-slot:not(.standing))>.newlywed-hint,.step-3 .newlywed-hint{display:none}.step-1 .teacher:after{content:"✦";position:absolute;right:12%;top:38%;color:#ffe8a6;text-shadow:0 0 7px #fff7cb;pointer-events:none;animation:quiet-spark 5.7s 2s infinite}.step-1 .intro>.primary,.step-2 .chapel-ready{background:linear-gradient(#ffe3f0,#f8bcd5);border-color:#c96b96;color:#81385f;animation:button-invite-strong 2.8s ease-in-out infinite}.step-1 .intro>.primary:after,.step-2 .chapel-ready:after{content:"→";font-size:24px;color:#98456f;opacity:1;animation:invite-arrow 1.6s ease-in-out infinite}@keyframes invite-arrow{0%,to{translate:0 0}55%{translate:5px 0}}@keyframes button-invite-strong{0%,to{box-shadow:inset 0 3px 0 #fff9,0 5px 0 #b7638b44,0 0 0 2px #fff2d8}50%{box-shadow:inset 0 3px 0 #fff9,0 5px 0 #b7638b44,0 0 0 5px #ffe0aacc,0 0 18px #f4c37880}}.step-0 .music-button{animation:button-invite 4.8s 3s 1}.phase-map .treasure-trigger.unread-chest:after{content:"✦";position:absolute;left:46%;top:8%;color:#fff3b6;text-shadow:0 0 8px #fff7da;pointer-events:none;font-size:18px;animation:quiet-spark 6.5s var(--hint-delay) infinite}.phase-map .read-chest .map-chest-label{opacity:.78}.album-hint{bottom:-24px;width:max-content;padding:2px 7px;border-radius:9px;background:#fffaf0ed;color:#9c6383;font-size:10px;animation:hint-once 7s both}.album-hint,.step-2 .phase-ready .pal-touch:after{position:absolute;left:50%;translate:-50% 0;pointer-events:none}.step-2 .phase-ready .pal-touch:after{content:"点点我";top:95%;white-space:nowrap;background:#fffaf0de;border-radius:8px;padding:1px 5px;color:#99748d;font-size:8px;opacity:0;animation:hint-once 6s 5s 1 both}.step-2 .phase-ready .pal-touch.pal-reacting:after{display:none}@keyframes quiet-spark{0%,65%,to{opacity:0;scale:.6}74%,85%{opacity:1;scale:1}93%{opacity:0;scale:1.15}}@keyframes button-invite{0%,65%,to{box-shadow:inset 0 3px 0 #fff9,0 5px 0 #b7638b24}80%{box-shadow:inset 0 3px 0 #fff9,0 5px 0 #b7638b24,0 0 0 4px #fff3cbaa,0 0 16px #ffdc9c66}}@keyframes hint-once{0%,to{opacity:0}12%,78%{opacity:1}}.party-portrait.captured .party-pal .pal-touch:not(.pal-reacting) .pal-pose>img{transform-origin:center bottom;animation:party-breathe var(--pal-breath-time,4.2s) ease-in-out infinite;animation-delay:calc(var(--party-delay)*-13)}.party-portrait .party-rabbit{--pal-breath-time:5.1s}.party-portrait .party-lamb{--pal-breath-time:3.8s}@keyframes party-breathe{0%,to{transform:scale(1)}50%{transform:scale(1.008,1.014)}}.chapel-arrival{position:absolute;inset:0;overflow:hidden}.chapel-guide{position:absolute;left:calc(50% - 45px);top:48%;width:90px;height:86px;object-fit:contain;image-rendering:pixelated;animation:guide-to-chapel 1.1s ease-in-out both;transform-origin:center}.arrival-gate{position:absolute;left:50%;top:48%;width:min(76vw,370px,66vh);aspect-ratio:420/390;animation:gate-approach 1.8s cubic-bezier(.4,0,.7,1) both;transform-origin:center 58%;isolation:isolate}.arrival-arch{display:block;width:100%;height:100%}.arrival-wash{position:absolute;inset:0;background:#fff7eb;animation:arrival-wash 1.8s linear both}@keyframes guide-to-chapel{0%{opacity:0;transform:translate(-55px,75px) rotate(-8deg)}18%{opacity:1}45%{opacity:1;transform:translate(12px,-12px) rotate(6deg) scale(.85)}85%,to{opacity:0;transform:translate(15px,-35px) rotate(0deg) scale(.55)}}@keyframes gate-approach{0%{opacity:0;transform:translate(-50%,-50%) scale(.9)}15%{opacity:1}38%{opacity:1;transform:translate(-50%,-50%) scale(1.06)}58%,to{opacity:1;transform:translate(-50%,-50%) scale(1.65)}}@keyframes arrival-wash{0%,40%{opacity:0}55%,70%{opacity:1}96%,to{opacity:0}}@media(prefers-reduced-motion:reduce){.album-hint,.newlywed-hint{animation:none;opacity:1}.phase-map .treasure-trigger:after,.step-1 .teacher:after,.step-2 .pal-touch:after{animation:none;opacity:0}.party-portrait.captured .party-pal .pal-touch:not(.pal-reacting) .pal-pose>img,.step-0 .music-button,.step-1 .intro>.primary,.step-1 .intro>.primary:after,.step-2 .chapel-ready,.step-2 .chapel-ready:after{animation:none}}@media(prefers-reduced-motion:no-preference){.living-map .map-camera{transition-duration:1.16s}.living-map .map-guide{transition-duration:.72s,.72s,.36s}.living-map .map-guide.flying img{animation-duration:.72s}.living-map .map-guide.tapping img{animation-duration:.44s}.living-map .residents,.living-map .scene-prop{transition-duration:.72s}.living-map.phase-peeking .resident{animation-duration:.72s}.living-map.phase-climbing .resident,.living-map.phase-climbing .residents,.living-map.phase-retreating .resident,.living-map.phase-retreating .residents{animation-duration:.96s}.living-map.phase-landing .landing-puff,.living-map.phase-landing .resident-body{animation-duration:.4s}.living-map.phase-retrieving .resident-body,.living-map.phase-retrieving .resident-wand,.living-map.phase-retrieving .scene-prop{animation-duration:.68s}.living-map.phase-presenting .resident-body,.living-map.phase-presenting .scene-prop{animation-duration:.8s}.living-map.phase-turning .resident-body,.living-map.phase-turning .resident-wand,.living-map.phase-turning .scene-prop{animation-duration:.92s}.living-map.phase-packing .resident-body,.living-map.phase-packing .scene-prop{animation-duration:.72s}.living-map.phase-ducking .resident{animation-duration:.56s}.living-map .album-rotator{transition-duration:.88s}.living-map .physical-album{transition-duration:.52s,.52s}}.living-map .scene-caption{flex-wrap:wrap;gap:6px}.scene-caption button{min-height:36px}.invitation-dialog{position:fixed;inset:0;margin:auto;width:min(90vw,440px);max-height:90svh;padding:26px;border:2px solid #fff6e8;border-radius:24px;color:#5b5274;background:#fff7ee;box-shadow:0 12px 60px #273e6740;text-align:center;font-family:WeddingRound,sans-serif;overflow:auto}.invitation-dialog::backdrop{background:#283c655c}.music-welcome .welcome-note{display:block;font-size:38px;color:#d679a4}.music-welcome h2{font-size:24px;margin:12px 0}.music-welcome h2:focus{outline:none}.music-welcome p{font-size:15px;line-height:1.8;margin:12px 0 22px}.music-welcome .primary,.music-welcome .text-button{display:block;width:100%;margin:12px 0}.music-welcome small{display:block;font-size:12px;color:#8b7b8a;margin-top:16px}.photo-enlargement{width:min(96vw,1050px);max-height:94svh;padding:12px;overflow:hidden}.photo-enlargement header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 6px 8px}.photo-enlargement header button{margin:0;min-height:42px}.enlargement-scroll{height:65svh;overflow:auto;overscroll-behavior:contain;background:#f0e7e2;border-radius:12px;text-align:center}.enlargement-image{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:0;border:0;background:none;cursor:zoom-in;touch-action:pan-x pan-y pinch-zoom}.enlargement-image img{display:block;width:100%;height:100%;object-fit:contain}.zoomed .enlargement-image{width:200%;height:200%;cursor:zoom-out}.photo-enlargement p{margin:10px 0 4px;font-size:14px;max-height:8svh;overflow:auto;overflow-wrap:anywhere}.photo-enlargement small{font-size:12px;color:#8b7b8a}.venue-map-card{margin:12px 0 24px}.venue-address{line-height:1.8}.venue-map-window{margin:16px 0 8px;overflow:hidden;border:2px solid #fff8ed;border-radius:18px;background:#e7eee9;box-shadow:0 4px 14px #4b719820}.venue-map-window iframe{display:block;width:100%;height:clamp(300px,52svh,450px);border:0}.venue-map-card small{display:block;font-size:12px;color:#7b8195;line-height:1.6}