@font-face{font-family:Noto Serif SC Local;src:url(/fonts/noto-serif-sc.woff)format("woff");font-style:normal;font-weight:400 600;font-display:swap}:root{--navy:#101c27;--navy2:#172734;--ink:#f2e9dc;--muted:#9ca8ad;--gold:#e9c58d;--line:#e8dfcf26;--serif:"Noto Serif SC Local","Songti SC",serif}*{box-sizing:border-box}html,body{background:var(--navy);min-height:100%;color:var(--ink);margin:0;font-family:Inter,PingFang SC,Microsoft YaHei,sans-serif}button,input,textarea{font:inherit}button{cursor:pointer}button:disabled{opacity:.5;cursor:wait}button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--gold);outline-offset:3px}.app-shell{background:radial-gradient(at 64% 44%,#29343b 0%,#172530 43%,#101c27 78%);min-height:100svh;overflow:hidden}.topbar{border-bottom:1px solid var(--line);z-index:10;justify-content:space-between;align-items:center;height:93px;margin:0 4.5%;display:flex;position:relative}.brand{color:var(--ink);text-align:left;letter-spacing:-.5px;background:0 0;border:0;align-items:center;gap:11px;padding:0;font-family:Georgia,serif;font-size:25px;display:flex}.brand-star{color:var(--gold);font-size:46px;line-height:1}.brand small{color:#9da7a9;letter-spacing:2.2px;margin-top:4px;font:9px Inter,Microsoft YaHei,sans-serif;display:block}.top-actions{align-items:center;gap:16px;display:flex}.round-control,.text-control{color:#e8d7bd;background:0 0;border:0;justify-content:center;align-items:center;gap:9px;display:inline-flex}.round-control{border-radius:50%;width:38px;height:38px}.round-control:hover{background:#fff1}.text-control{letter-spacing:.5px;border:1px solid #d5be9847;border-radius:5px;padding:12px 17px;font-size:12px}.text-control:hover,.outline-button:hover{background:#e9c58d12}.home-layout{grid-template-columns:minmax(330px,.8fr) minmax(520px,1.4fr);align-items:center;max-width:1540px;min-height:calc(100svh - 93px);margin:auto;padding:0 5% 70px;display:grid;position:relative}.intro-copy{z-index:2;margin-top:-38px;position:relative}.eyebrow{color:var(--gold);letter-spacing:3px;font-size:10px;line-height:1.6;display:block}.intro-copy h1,.editor-heading h1{font:400 clamp(35px,3.5vw,53px)/1.57 var(--serif);letter-spacing:2px;margin:23px 0}.intro-copy h1 em,.editor-heading h1 em{color:#edca91;font-style:normal}.intro-copy p,.editor-heading p{color:var(--muted);letter-spacing:.8px;font-size:12px;line-height:2.3}.dedication{align-items:center;gap:18px;margin-top:35px;display:flex}.dedication span{letter-spacing:2px;color:#8d9aa1;font:10px Georgia,serif}.dedication strong{font:400 19px var(--serif);letter-spacing:2px}.dedication i{color:var(--gold);font-style:normal}.intro-detail{color:#83929a;letter-spacing:2px;align-items:center;gap:13px;margin-top:65px;font-size:10px;display:flex}.intro-detail span{background:#b69a6d;width:28px;height:1px}.home-scene{height:min(710px,100svh - 146px);min-height:500px;position:relative}.scene-top-label{z-index:2;color:#c2a783;font:italic 13px Georgia,serif;position:absolute;top:25px;left:7%}.scene-top-label span{color:#72818a;letter-spacing:2px;margin-left:12px;font:9px Inter,sans-serif}.scene-cta{z-index:4;flex-direction:column;align-items:center;gap:12px;display:flex;position:absolute;bottom:12px;left:0;right:0}.scene-cta small{color:#89969a;letter-spacing:1.7px;font-size:9px}.primary-button{color:#302820;background:linear-gradient(110deg,#f4d7aa,#d9b074);border:1px solid #ffdfaf91;border-radius:5px;justify-content:center;align-items:center;gap:13px;min-height:47px;padding:14px 23px;font-size:12px;font-weight:600;transition:transform .2s,filter .2s;display:inline-flex;box-shadow:0 10px 45px #0003}.primary-button:hover:not(:disabled){filter:brightness(1.05);transform:translateY(-2px)}.scene-cta .primary-button{min-width:290px}.home-footer{border-top:1px solid var(--line);color:#809099;letter-spacing:1.5px;justify-content:space-between;align-items:center;padding-top:14px;font-size:9px;display:flex;position:absolute;bottom:22px;left:5%;right:5%}.footer-star{color:#baa480;vertical-align:middle;margin-right:10px;font-size:21px}.home-footer button{color:#94a2a7;background:0 0;border:0;align-items:center;gap:7px;font-size:10px;display:flex}.pure-mode .intro-copy,.pure-mode .scene-top-label,.pure-mode .scene-cta,.pure-mode .home-footer>div{opacity:0;pointer-events:none}.scene-wrap{--room-wall:#40505a;--room-side:#2c3944;--room-floor:#695b53;--room-accent:#e8c58f;--room-pink:#d6a7a3;perspective:1100px;touch-action:pan-y;-webkit-user-select:none;user-select:none;width:100%;height:100%;min-height:360px;position:relative;overflow:hidden}.theme-rose{--room-wall:#65505e;--room-side:#473846;--room-floor:#735761;--room-accent:#f0cbb4;--room-pink:#e8aeb7}.theme-starlight{--room-wall:#324c65;--room-side:#223648;--room-floor:#4a5262;--room-accent:#c6d4f4;--room-pink:#9bb9df}.ambient-glow{filter:blur(35px);background:radial-gradient(circle,#e5b86e38 0%,#e5b86e12 45%,#0000 70%);border-radius:50%;position:absolute;inset:12% 8% 10%}.theme-rose .ambient-glow{background:radial-gradient(circle,#f0aab73d,#0000 70%)}.theme-starlight .ambient-glow{background:radial-gradient(circle,#91b4ed38,#0000 70%)}.floating-star{color:#e9c58d;z-index:1;animation:3s ease-in-out infinite alternate twinkle;position:absolute}.star-one{font-size:15px;top:19%;left:17%}.star-two{font-size:27px;animation-delay:1s;top:27%;right:10%}.star-three{font-size:12px;animation-delay:2s;bottom:27%;left:7%}@keyframes twinkle{0%{opacity:.35;transform:translateY(0)}to{opacity:1;transform:translateY(-6px)}}.room{width:520px;height:385px;transform-style:preserve-3d;filter:drop-shadow(0 35px 30px #0007);margin:-192px 0 0 -260px;transition:transform 80ms ease-out;position:absolute;top:45%;left:50%}.room-back{background:linear-gradient(145deg,#ffffff12,transparent 48%),var(--room-wall);border:12px solid #b49a7c;border-bottom:18px solid #9c7f66;position:absolute;inset:0 0 45px;overflow:hidden;transform:translateZ(-58px);box-shadow:inset 0 0 90px #080f1c8c,0 0 0 4px #3b342e}.back-panel{border:1px solid #e4d7c142;position:absolute;inset:16px}.wall-line{background:#c5ae8a88;height:4px;position:absolute;bottom:37px;left:0;right:0;box-shadow:0 8px #181d25a3}.window{background:radial-gradient(circle at 70% 22%,#faf2cf 0 8px,#0000 10px),linear-gradient(#111b34,#293953);border:10px solid #c2a985;width:130px;height:125px;margin-left:-65px;position:absolute;top:40px;left:50%;box-shadow:0 0 0 3px #322d30,0 10px 25px #0007,inset 0 0 25px #080b1d}.window:after{content:"";background:#bca482;width:7px;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%);box-shadow:0 54px #bca482}.window-moon{color:#ffeca9;font-size:18px;position:absolute;top:17px;right:20px}.window-stars{color:#c7d2e7;letter-spacing:10px;font-size:13px;position:absolute;bottom:20px;left:12px}.wall-lamp{background:linear-gradient(#fff4cb,#d6aa64);border-radius:8px 8px 13px 13px;width:20px;height:36px;position:absolute;top:90px;box-shadow:0 0 24px 10px #e6bd7870}.lamp-left{left:52px}.lamp-right{right:52px}.room-side{background:linear-gradient(90deg,var(--room-side),#161f2b);transform-origin:50%;border:11px solid #8b765f;width:84px;height:340px;position:absolute;top:0;right:-42px;transform:translateZ(-16px)rotateY(90deg);box-shadow:inset 0 0 35px #0008}.room-floor{background:linear-gradient(90deg,#ffffff0b,transparent 30%),repeating-linear-gradient(90deg,transparent 0 90px,#2b20201f 91px 94px),var(--room-floor);transform-origin:top;border:9px solid #8d725c;width:520px;height:155px;position:absolute;bottom:-70px;left:0;transform:rotateX(78deg)translateZ(22px);box-shadow:inset 0 0 40px #0007}.floor-rug{background:#e5c99936;border:6px solid #d0b78888;border-radius:50%;width:250px;height:100px;position:absolute;top:20px;left:135px;box-shadow:inset 0 0 0 2px #dfc9a582}.photo-frame{background:#a98763;border:4px solid #e0bf90;width:100px;height:125px;padding:8px;position:absolute;top:137px;left:61px;transform:translateZ(45px)rotateY(9deg);box-shadow:0 5px 20px #0009}.photo-mat{background:#e7d3b0;place-items:center;width:100%;height:100%;display:grid;overflow:hidden}.photo-mat img{object-fit:cover;width:100%;height:100%}.photo-mat span{text-align:center;color:#85684e;font:italic 18px/1.2 Georgia,serif}.hanging-balloon{background:radial-gradient(circle at 30% 25%,#fff8,#fff0 26%),var(--room-pink);z-index:3;border-radius:50% 50% 48% 48%;width:42px;height:55px;position:absolute;top:21px;transform:translateZ(70px);box-shadow:inset -10px -8px 12px #0002,0 5px 12px #0004}.hanging-balloon:after{content:"";background:#ead6bd9c;width:1px;height:97px;position:absolute;top:55px;left:21px}.balloon-left{left:36px;transform:translateZ(70px)rotate(-9deg)}.balloon-right{background:radial-gradient(circle at 30% 25%,#fff9,#fff0 26%),var(--room-accent);top:45px;right:42px;transform:translateZ(75px)rotate(8deg)}.table{width:206px;height:94px;transform-style:preserve-3d;position:absolute;bottom:61px;left:178px;transform:translateZ(95px)}.table-top{background:linear-gradient(#e5c7a0,#aa7958);border:3px solid #f2d2aa;border-radius:50%;width:224px;height:33px;position:absolute;top:4px;left:-9px;box-shadow:0 8px 12px #0008}.table-front{background:#8b5e46;border-radius:0 0 45% 45%;width:198px;height:19px;position:absolute;top:27px;left:4px}.table-leg{background:linear-gradient(90deg,#ab7a56,#513e36);width:13px;height:62px;position:absolute;top:37px;transform:skew(-8deg)}.leg-one{left:28px}.leg-two{right:28px}.cake{z-index:6;width:86px;height:74px;position:absolute;bottom:140px;left:247px;transform:translateZ(126px)}.cake-body{background:linear-gradient(90deg,#c7827c,#f9cec5 40%,#b97671);border-radius:7px 7px 17px 17px;width:75px;height:44px;position:absolute;bottom:13px;left:6px;box-shadow:inset 0 -8px #a15f59}.cake-top{z-index:3;background:#f8e4d5;border:3px solid #f7eadc;border-radius:50%;width:77px;height:23px;position:absolute;top:12px;left:5px}.icing{border-bottom:5px dotted #fff1de;border-radius:50%;width:59px;height:14px;position:absolute;top:8px;left:8px}.cake-plate{background:#eee0c6;border-radius:50%;width:90px;height:17px;position:absolute;bottom:9px;left:0;box-shadow:0 4px #ae916f}.candle{z-index:5;background:repeating-linear-gradient(35deg,#f7d8bb 0 5px,#c77e7a 5px 9px);width:5px;height:29px;position:absolute;top:-14px;left:42px}.candle i{background:#ffe391;border-radius:60% 40%;width:11px;height:17px;animation:1.7s ease-in-out infinite alternate flame;position:absolute;bottom:28px;left:-3px;box-shadow:0 0 12px 5px #f9c970a8}@keyframes flame{to{transform:scale(.75)rotate(-7deg)}}.gift{background:var(--room-pink);border:4px solid #f4d9c4;width:54px;height:54px;position:absolute;bottom:38px;transform:translateZ(90px);box-shadow:6px 10px 12px #0007}.gift:before{content:"";background:#f4ddb5;position:absolute;inset:-4px 17px}.gift i{border:5px solid #f4ddb5;border-radius:50%;width:24px;height:14px;position:absolute;top:-16px;left:13px}.gift-one{left:102px}.gift-two{background:#aebdd0;width:43px;height:43px;bottom:44px;right:62px;transform:translateZ(111px)rotate(-7deg)}.gift-two:before{inset:-4px 12px}.vase{z-index:5;width:56px;height:104px;position:absolute;bottom:110px;right:70px;transform:translateZ(68px)}.vase-body{background:linear-gradient(90deg,#f1d7bd,#ad8974);border-radius:11px 11px 17px 17px;width:33px;height:53px;position:absolute;bottom:0;left:13px;box-shadow:4px 8px 9px #0005}.flower{color:var(--room-pink);text-shadow:0 3px 3px #0006;font-size:27px;position:absolute}.flower-one{top:4px;left:6px}.flower-two{color:var(--room-accent);top:0;right:0}.flower-three{font-size:20px;top:21px;left:22px}.scene-hint{color:#819099;letter-spacing:1.5px;font-size:9px;position:absolute;top:5%;right:5%}.is-editing{overflow:visible}.editor-layout{grid-template-columns:minmax(420px,630px) minmax(460px,1fr);gap:5%;max-width:1540px;margin:auto;padding:50px 5% 110px;display:grid}.editor-panel{z-index:2;position:relative}.editor-heading h1{margin:16px 0;font-size:clamp(34px,3vw,46px)}.editor-heading p{margin:0 0 29px}.editor-steps{border-top:1px solid var(--line);border-bottom:1px solid var(--line);color:#7e8d95;letter-spacing:1px;gap:32px;padding:17px 0;font-size:11px;display:flex}.editor-steps .active{color:var(--gold)}.form-section{border-bottom:1px solid var(--line);padding:37px 0}.section-title{align-items:flex-start;gap:17px;margin-bottom:24px;display:flex}.section-title b{color:var(--gold);margin-top:2px;font:italic 400 18px Georgia,serif}.section-title h2{font:400 20px var(--serif);margin:0 0 5px}.section-title p{color:var(--muted);margin:0;font-size:11px;line-height:1.8}.field-label{color:#d9cfbf;letter-spacing:1px;margin:18px 0 9px;font-size:11px;display:block}.field-label input,.field-label textarea,.form-section>textarea{width:100%;color:var(--ink);letter-spacing:.2px;resize:vertical;background:#0b172199;border:1px solid #ded0b63b;border-radius:5px;margin-top:9px;padding:13px 15px;font-size:12px;line-height:1.8;display:block}.form-section>textarea{margin:0}.field-label input::placeholder,.field-label textarea::placeholder,.form-section>textarea::placeholder{color:#788894}.two-fields{grid-template-columns:1fr 1fr;gap:15px;display:grid}.outline-button{color:var(--gold);background:0 0;border:1px solid #dabd905e;border-radius:5px;align-items:center;gap:9px;padding:11px 15px;font-size:11px;display:inline-flex}.scene-generate{margin:15px 0 21px}.theme-grid{grid-template-columns:repeat(3,1fr);gap:11px;display:grid}.theme-option{text-align:left;color:var(--ink);background:#0c18218a;border:1px solid #e7d7bd2e;border-radius:6px;min-width:0;padding:9px}.theme-option.selected,.music-options .selected{background:#e9c58d18;border-color:#eac88a}.theme-swatch{color:#f7d4a7;background:linear-gradient(145deg,#5a6262,#bb9468);border-radius:3px;place-items:center;height:67px;margin-bottom:11px;font-size:23px;display:grid}.swatch-rose{background:linear-gradient(145deg,#714e60,#d7a3a7)}.swatch-starlight{background:linear-gradient(145deg,#263d62,#7e9bbe)}.theme-option strong,.theme-option small{margin:0 3px;display:block}.theme-option strong{font-size:11px;font-weight:500}.theme-option small{color:#9da9aa;margin-top:4px;font-size:9px}.helper-note{color:#83929b;margin:16px 0 0;font-size:10px;line-height:1.8}.upload-row{gap:12px;display:flex}.upload-box{color:#d6bd97;cursor:pointer;border:1px dashed #d4bd975f;border-radius:5px;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:6px;min-height:122px;display:flex;position:relative}.upload-box strong{font-size:11px;font-weight:500}.upload-box small{color:#8fa0a6;font-size:9px}.upload-box input,.music-upload input{opacity:0;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.upload-preview{color:#f2dfbd;text-align:center;background:#b0a188;place-items:center;width:122px;min-height:122px;font:italic 17px/1.4 Georgia,serif;display:grid;overflow:hidden}.upload-preview img{object-fit:cover;width:100%;height:100%}.music-label{margin-top:24px}.music-options{gap:8px;display:flex}.music-options button{color:#d3c8b8;background:#0b172199;border:1px solid #e7d7bd2e;border-radius:4px;flex:1;min-height:40px;font-size:11px}.music-upload{color:#d9c7a8;cursor:pointer;border-bottom:1px solid #d9c7a877;align-items:center;gap:8px;margin-top:17px;padding-bottom:5px;font-size:11px;display:inline-flex;position:relative}.notice{color:#f3d4a4;border-left:2px solid var(--gold);background:#e9c58d17;padding:12px 14px;font-size:11px;line-height:1.6}.save-button{width:100%;margin-top:30px}.save-button svg:last-child{margin-left:auto}.share-box{text-align:center;background:#e4c99412;border:1px solid #e4c99479;border-radius:7px;margin-top:22px;padding:26px}.share-icon{color:#e5c68c;font-size:19px}.share-box h2{font:400 20px var(--serif);margin:8px 0}.share-box p{color:#aab3ae;font-size:11px}.link-row{border:1px solid #d8c49d78;border-radius:4px;margin-top:18px;display:flex;overflow:hidden}.link-row input{color:#e9d7ba;background:#101e29;border:0;flex:1;min-width:0;padding:11px;font-size:11px}.link-row button{color:#292720;background:#d7b781;border:0;align-items:center;gap:6px;padding:0 13px;font-size:11px;display:flex}.preview-link{color:var(--gold);background:0 0;border:0;align-items:center;gap:6px;margin-top:18px;font-size:11px;display:inline-flex}.editor-preview{border:1px solid var(--line);background:radial-gradient(circle,#3c454a,#14212c 70%);border-radius:8px;align-self:start;height:min(730px,100svh - 45px);min-height:610px;position:sticky;top:20px;overflow:hidden}.preview-header{z-index:3;color:#baa986;letter-spacing:2px;justify-content:space-between;font-size:9px;display:flex;position:absolute;top:20px;left:25px;right:25px}.preview-header span:last-child{color:#819098}.scene-compact{height:80%;min-height:0}.scene-compact .room{transform-origin:50%;scale:.77}.preview-caption{background:linear-gradient(#0000,#0b1720 30%);flex-direction:column;gap:7px;padding:22px 30px 26px;display:flex;position:absolute;bottom:0;left:0;right:0}.preview-caption span{color:var(--gold);letter-spacing:2px;font:10px Georgia,serif}.preview-caption strong{font:400 22px var(--serif)}.preview-caption small{color:#9fa9aa;font-size:10px}.gift-overlay{z-index:30;-webkit-backdrop-filter:blur(13px);backdrop-filter:blur(13px);background:#060e19de;flex-direction:column;justify-content:center;align-items:center;padding:30px;animation:.35s fadein;display:flex;position:fixed;inset:0}@keyframes fadein{0%{opacity:0}to{opacity:1}}.gift-card{--card-accent:#ddc08d;color:#4d4239;background:radial-gradient(circle at top,#fbf2e2,#ead8bb);border:1px solid #e4c58d;width:min(540px,100%);max-height:calc(100svh - 95px);padding:14px;animation:.45s cardin;position:relative;overflow:auto;transform:rotate(-1deg);box-shadow:0 25px 80px #0009}@keyframes cardin{0%{opacity:0;transform:translateY(35px)rotate(-5deg)scale(.9)}to{opacity:1;transform:translateY(0)rotate(-1deg)scale(1)}}.gift-card.theme-rose{--card-accent:#c88c95;background:radial-gradient(circle at top,#fff5f2,#eed5d4)}.gift-card.theme-starlight{--card-accent:#829abb;background:radial-gradient(circle at top,#f1f5fc,#dbe4ef)}.card-inner{text-align:center;border:1px solid #bfa781aa;flex-direction:column;align-items:center;min-height:510px;padding:38px 46px 27px;display:flex}.card-ornament{color:var(--card-accent);letter-spacing:12px;font-size:20px}.card-ornament span{letter-spacing:4px;vertical-align:middle;font:10px Georgia,serif}.card-to{letter-spacing:3px;color:#8c7466;margin-top:30px;font:11px Georgia,serif}.card-photo{object-fit:cover;border:7px solid #fff9f0;width:165px;height:140px;margin-top:23px;box-shadow:0 4px 17px #82694944}.gift-card h2{font:400 clamp(23px,4vw,33px)/1.5 var(--serif);color:#554637;margin:25px 0 10px}.card-line{background:var(--card-accent);width:52px;height:1px;margin:8px 0 18px}.gift-card p{white-space:pre-wrap;font:14px/2.1 var(--serif);letter-spacing:1px;margin:0 0 20px}.card-from{letter-spacing:2px;color:#857364;margin:auto 0 0;font:10px Georgia,serif}.card-from strong{font:14px var(--serif);color:#55483d;margin-left:8px}.card-bottom{letter-spacing:1px;color:#a88f79;margin-top:27px;font-size:10px}.close-gift{color:#6f6258;z-index:2;background:0 0;border:0;position:absolute;top:20px;right:20px}.overlay-tip{color:#b4b8b7;letter-spacing:1.5px;margin-top:21px;font-size:10px}@media (width<=980px){.home-layout{grid-template-columns:1fr;min-height:auto;padding:60px 6% 90px}.intro-copy{margin:0}.intro-detail{display:none}.home-scene{height:610px;margin-top:-15px}.home-footer{left:6%;right:6%}.editor-layout{grid-template-columns:1fr;gap:30px;padding:45px 6% 90px}.editor-preview{grid-row:1;height:520px;min-height:0;position:relative;top:auto}.scene-compact .room{scale:.75}.editor-panel{width:100%;max-width:700px;margin:auto}}@media (width<=650px){.topbar{height:75px;margin:0 5%}.brand{font-size:18px}.brand-star{font-size:37px}.brand small{font-size:8px}.text-control{padding:9px;font-size:10px}.text-control svg{width:14px}.top-actions{gap:4px}.home-layout{padding:38px 6% 80px}.intro-copy h1{font-size:34px}.intro-copy p{font-size:11px}.home-scene{height:485px;min-height:0;margin-top:0}.scene-cta{bottom:0}.scene-cta .primary-button{min-width:220px}.scene-hint{display:none}.home-footer{font-size:8px}.editor-layout{padding:30px 5% 80px}.editor-preview{height:355px}.scene-compact .room{scale:.55}.preview-caption{padding:12px 20px 17px}.preview-caption strong{font-size:17px}.editor-heading h1{font-size:34px}.theme-grid{gap:6px}.theme-option{padding:6px}.theme-swatch{height:47px}.theme-option strong{font-size:10px}.theme-option small{font-size:8px}.card-inner{min-height:460px;padding:28px 21px}.gift-card{padding:9px}.gift-card p{font-size:12px}.gift-overlay{padding:15px}.two-fields{gap:9px}.scene-wrap:not(.scene-compact) .room{scale:.58}}.three-room{background:radial-gradient(at 50% 45%,#34475255,#0000 68%);width:100%;height:100%;min-height:0;position:relative;overflow:hidden}.three-host{min-width:0;min-height:0;position:absolute;inset:0}.three-canvas{touch-action:pan-y;cursor:grab;width:100%;height:100%;display:block}.three-canvas:active{cursor:grabbing}.three-room-wishing:after{content:"";z-index:1;pointer-events:none;background:radial-gradient(at 52% 48%,#0000 18%,#07101c36 60%,#04091392 100%);animation:1.3s both room-nightfall;position:absolute;inset:0}@keyframes room-nightfall{0%{opacity:0}to{opacity:1}}.three-hotspot{z-index:5;white-space:nowrap;color:#fff0d1;font:600 12px/1.2 var(--serif);letter-spacing:.5px;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:linear-gradient(135deg,#233545f2,#101d2cf2);border:1px solid #ffe2a6b8;border-radius:999px;align-items:center;gap:9px;padding:10px 16px 10px 10px;animation:.22s both hotspot-pop;display:flex;position:absolute;transform:translate(-50%,-50%);box-shadow:0 0 0 5px #f7d6a122,0 8px 34px #070e19bb,0 0 28px #e8ad6270}.three-hotspot:hover,.three-hotspot:focus-visible{background:linear-gradient(135deg,#71513b,#2d2830);outline:0;box-shadow:0 0 0 7px #f7d6a136,0 8px 36px #070e19d9,0 0 35px #efbc77aa}.three-hotspot-icon{color:#3d2f26;background:#f2ce91;border-radius:50%;place-items:center;width:25px;height:25px;font-size:15px;display:grid}.three-hotspot-card{border-color:#fff0d2}@keyframes hotspot-pop{0%{opacity:0;scale:.82}to{opacity:1;scale:1}}.three-room-tools{z-index:3;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);white-space:nowrap;background:#122230d9;border:1px solid #d3b78a52;border-radius:99px;gap:5px;padding:5px;display:flex;position:absolute;bottom:98px;left:50%;transform:translate(-50%);box-shadow:0 8px 35px #07121da3}.three-room-tools button{color:#dfc397;background:0 0;border:0;border-radius:99px;justify-content:center;align-items:center;gap:6px;padding:9px 12px;font-size:12px;line-height:1.2;display:inline-flex}.three-room-tools button:hover,.three-room-tools button:focus-visible{color:#ffe6b6;background:#e4c38a28}.three-room-tools button span{letter-spacing:.4px;font-size:10px}.three-hint{z-index:2;color:#b6c0bf;letter-spacing:1px;text-shadow:0 2px 6px #101820;font-size:10px;position:absolute;top:63px;right:7%}.three-room-compact .three-room-tools{gap:2px;padding:4px;bottom:105px}.three-room-compact .three-room-tools button{padding:7px 8px;font-size:11px}.three-room-compact .three-room-tools button span{font-size:9px}.three-error{text-align:center;color:#ecd7b7;flex-direction:column;justify-content:center;align-items:center;padding:30px;display:flex;position:absolute;inset:0}.three-error span{color:#e3bf83;font-size:70px}.three-error p{max-width:260px;font-size:12px;line-height:1.8}.three-error button{color:#f4d7a8;background:#e3bf8322;border:1px solid #e3bf83;border-radius:4px;padding:10px 17px}@media (width<=650px){.three-room-tools{bottom:86px}.three-room-tools button{padding:9px 10px}.three-room-tools button span{display:none}.three-room-compact .three-room-tools{bottom:74px}.three-room-compact .three-room-tools button span{display:none}.three-hint{text-align:center;font-size:9px;top:56px;left:6%;right:6%}}@media (hover:none){.three-hotspot{display:none}}.memory-modal,.wish-modal{z-index:2;text-align:center;background:#13212c;border:1px solid #c9aa785e;width:min(630px,100%);max-height:calc(100svh - 75px);padding:25px;animation:.35s fadein;position:relative;overflow:auto;box-shadow:0 25px 80px #000a}.memory-modal .close-gift,.wish-modal .close-gift{color:#ead8bc;top:19px;right:19px}.memory-kicker{color:#d6b784;letter-spacing:2px;justify-content:space-between;padding:4px 34px 17px 2px;font:11px Georgia,serif;display:flex}.memory-kicker span{letter-spacing:1px;font-size:12px}.memory-modal img{object-fit:contain;background:#0b1720;width:100%;max-height:min(56svh,570px);display:block}.memory-modal p{font:15px/1.8 var(--serif);color:#f1e4d1;margin:14px 0 17px}.memory-actions{justify-content:space-between;gap:10px;display:flex}.memory-actions button,.wish-actions button{color:#eed5ab;background:#d9bc8a12;border:1px solid #d9bc8a7a;border-radius:4px;padding:11px 20px;font-size:11px}.memory-actions button:last-child,.wish-actions button:last-child{color:#362a20;background:#e4c48f}.memory-actions button:disabled{opacity:.35;cursor:default}.memory-skip{color:#a8b0af;background:0 0;border:0;margin:12px auto 0;font-size:10px;display:block}.wish-next{color:#fff5e4;background:#95734d;border:1px solid #987b55;border-radius:4px;margin-top:20px;padding:11px 23px;font-size:12px}.wish-modal{background:radial-gradient(circle at 50% 45%,#53422f,#1b2930 58%,#101b27);flex-direction:column;justify-content:center;align-items:center;min-height:430px;display:flex}.wish-modal>span{color:#e5c48f;letter-spacing:4px;margin-top:15px;font:11px Georgia,serif}.wish-modal h2{font:400 clamp(28px,5vw,46px)/1.6 var(--serif);color:#f8e9ce;margin:13px 0}.wish-modal p{font:15px var(--serif);color:#d7bd98}.wish-halo{color:#f7d898;text-shadow:0 0 35px #f2bd62;font:90px Georgia,serif;animation:2s ease-in-out infinite alternate wish-glow}.wish-sparkles{color:#eec987;letter-spacing:55px;font-size:22px;animation:3s infinite alternate twinkle;position:absolute;top:42px;left:0;right:0}.wish-actions{gap:12px;margin-top:32px;display:flex}@keyframes wish-glow{to{text-shadow:0 0 70px #ffe5a4;transform:scale(1.14)rotate(15deg)}}@media (width<=650px){.memory-modal,.wish-modal{padding:17px}.memory-modal img{max-height:50svh}.memory-kicker{font-size:9px}.wish-sparkles{letter-spacing:22px}}:root{--serif:"Noto Serif SC","Songti SC","SimSun",serif}html,body,button,input,textarea,.brand small,.text-control,.primary-button,.home-footer button,.three-room-tools button,.editor-panel input,.editor-panel textarea,.editor-panel button,.memory-actions button,.wish-actions button{font-family:var(--serif)}.intro-copy h1,.editor-heading h1{font:400 clamp(30px,3.2vw,48px)/1.65 var(--serif);letter-spacing:1px}.home-layout{grid-template-columns:minmax(280px,.76fr) minmax(520px,1.64fr)}.home-scene{height:min(790px,100svh - 124px);min-height:570px}.home-footer{justify-content:flex-end}@media (width<=980px){.home-layout{grid-template-columns:1fr}.home-scene{height:690px}}@media (width<=650px){.home-scene{height:505px;min-height:0}.intro-copy h1{font-size:34px}}@media (width>=651px) and (width<=980px){.home-scene{margin-top:24px}}.app-shell:not(.is-editing){height:100svh;min-height:620px;position:relative;overflow:hidden}.app-shell:not(.is-editing) .topbar{z-index:12;background:linear-gradient(#101d29ad,#0000);border-color:#e4c89c3d;height:78px;margin:0 4.5%;position:absolute;top:0;left:0;right:0}.app-shell:not(.is-editing) .home-layout{width:100%;max-width:none;height:100%;min-height:0;margin:0;padding:0;display:block}.app-shell:not(.is-editing) .home-scene{width:100%;height:100%;min-height:0;margin:0;position:absolute;inset:0}.app-shell:not(.is-editing) .three-room{background:radial-gradient(at 50% 43%,#47515a58,#15232e 70%)}.app-shell:not(.is-editing) .intro-copy{z-index:5;pointer-events:none;text-shadow:0 2px 18px #081620;width:min(310px,30vw);margin:0;padding:24px 20px 25px 0;position:absolute;top:124px;left:5.5%}.app-shell:not(.is-editing) .intro-copy:before{content:"";z-index:-1;filter:blur(12px);background:linear-gradient(90deg,#0d1a26dd,#0d1a2688 65%,#0000);position:absolute;inset:-25px -20px -30px -35px}.app-shell:not(.is-editing) .intro-copy h1{margin:17px 0;font-size:clamp(30px,3.2vw,45px);line-height:1.55}.app-shell:not(.is-editing) .intro-copy p{font-size:11px;line-height:2}.app-shell:not(.is-editing) .dedication{margin-top:22px}.app-shell:not(.is-editing) .intro-detail{margin-top:38px}.app-shell:not(.is-editing) .scene-top-label{z-index:4;top:101px;left:auto;right:5%}.app-shell:not(.is-editing) .three-hint{top:132px;right:5%}.app-shell:not(.is-editing) .three-room-tools{bottom:111px}.app-shell:not(.is-editing) .scene-cta{bottom:34px}.app-shell:not(.is-editing) .home-footer{z-index:7;border:0;width:auto;padding:0;bottom:14px;left:auto;right:4.5%}.app-shell:not(.is-editing) .home-footer button{color:#c9b28d}@media (width<=980px){.app-shell:not(.is-editing) .intro-copy{width:260px;top:104px}.app-shell:not(.is-editing) .intro-copy p,.app-shell:not(.is-editing) .intro-detail{display:none}.app-shell:not(.is-editing) .scene-top-label{top:96px}}@media (width<=650px){.app-shell:not(.is-editing){min-height:0}.app-shell:not(.is-editing) .topbar{height:70px;margin:0 5%}.app-shell:not(.is-editing) .intro-copy{background:0 0;width:88%;padding:0;top:75px;left:6%}.app-shell:not(.is-editing) .intro-copy:before{filter:none;background:linear-gradient(#0b1925dd,#0000);inset:-12px -7% -15px}.app-shell:not(.is-editing) .intro-copy .eyebrow{font-size:8px}.app-shell:not(.is-editing) .intro-copy h1{margin:7px 0;font-size:26px;line-height:1.36}.app-shell:not(.is-editing) .intro-copy .dedication{gap:10px;margin:6px 0 0}.app-shell:not(.is-editing) .intro-copy .dedication strong{font-size:13px}.app-shell:not(.is-editing) .scene-top-label,.app-shell:not(.is-editing) .three-hint{display:none}.app-shell:not(.is-editing) .three-room-tools{bottom:111px}.app-shell:not(.is-editing) .scene-cta{bottom:43px}.app-shell:not(.is-editing) .scene-cta small{display:none}.app-shell:not(.is-editing) .home-footer{bottom:10px;right:6%}}.card-opening{color:#f0dfc8;text-align:center;perspective:1200px;flex-direction:column;justify-content:center;align-items:center;gap:20px;width:min(680px,92vw);min-height:440px;display:flex}.opening-envelope{filter:drop-shadow(0 25px 36px #0008);width:min(430px,76vw);height:268px;position:relative;transform:translateY(25px)}.opening-envelope-back{background:linear-gradient(140deg,#d9bb8e,#ab7c58);border:2px solid #ead6b2;border-radius:5px;position:absolute;inset:0}.opening-letter{z-index:1;color:#6f4b38;background:linear-gradient(150deg,#fff9ef,#f1dfc3);border:2px solid #d2ad74;flex-direction:column;justify-content:center;align-items:center;gap:16px;width:80%;height:96%;padding:26px 18px;animation:.8s cubic-bezier(.2,.7,.2,1) 1s forwards letter-lift;display:flex;position:absolute;top:4%;left:10%;transform:translateY(17px)scale(.78)}.opening-letter span{letter-spacing:3px;font:12px Georgia,serif}.opening-letter strong{font:400 clamp(24px,4vw,38px) var(--serif)}.opening-letter small{color:#a58262;font-size:11px}.opening-flap{z-index:3;clip-path:polygon(0 0,100% 0,50% 100%);transform-origin:top;backface-visibility:hidden;background:#e9cda2;height:55%;animation:.72s ease-in .25s forwards envelope-flap;position:absolute;top:0;left:0;right:0}.opening-pocket{z-index:2;clip-path:polygon(0 43%,50% 77%,100% 43%,100% 100%,0 100%);background:linear-gradient(160deg,#c89e71,#a97455);border-radius:0 0 5px 5px;position:absolute;inset:0}.opening-seal{z-index:4;color:#f7dcad;background:#9c5c59;border-radius:50%;place-items:center;width:48px;height:48px;font-size:24px;animation:.35s .28s forwards seal-fade;display:grid;position:absolute;top:48%;left:50%;transform:translate(-50%,-50%);box-shadow:0 3px 8px #5d322d55}.card-opening p{font:15px var(--serif);letter-spacing:2px;margin:45px 0 0}.card-opening button{color:#eacb99;font:12px var(--serif);text-underline-offset:5px;cursor:pointer;background:0 0;border:0;text-decoration:underline}@keyframes envelope-flap{to{transform:rotateX(-175deg)}}@keyframes letter-lift{to{transform:translateY(-50px)scale(1)}}@keyframes seal-fade{to{opacity:0;transform:translate(-50%,-80%)scale(.5)}}.gift-card{width:min(780px,100vw - 36px);max-height:calc(100svh - 58px);padding:17px;animation:.65s cubic-bezier(.16,.8,.2,1) card-reveal}@keyframes card-reveal{0%{opacity:0;transform:translateY(55px)rotateY(-24deg)scale(.82)}to{opacity:1;transform:translateY(0)rotateY(0)scale(1)}}.card-inner{min-height:610px;padding:48px clamp(32px,6vw,90px) 37px}.card-ornament{font-size:25px}.card-ornament span{letter-spacing:5px;font-size:12px}.card-to{color:#6d5547;margin-top:30px;font-size:14px}.card-photo{width:220px;height:175px;margin-top:26px}.gift-card h2{margin:23px 0 8px;font-size:clamp(30px,4vw,43px)}.card-message-label{font:11px Georgia,var(--serif);letter-spacing:2px;color:#9b765d;margin-bottom:13px}.gift-card p{font:17px/2 var(--serif);letter-spacing:.7px;color:#514137;max-width:570px;margin-bottom:25px}.card-from{font-size:12px}.card-from strong{font-size:17px}.card-bottom{font-size:12px}.wish-next{margin-top:25px;font-size:13px}.card-actions{justify-content:center;align-items:center;gap:20px;margin-top:25px;display:flex}.card-actions .wish-next{margin:0}.memory-link{color:#8a6545;font:13px var(--serif);text-underline-offset:5px;cursor:pointer;background:0 0;border:0;text-decoration:underline}@media (width<=650px){.card-opening{min-height:390px}.opening-envelope{height:220px}.opening-letter{gap:10px;padding:15px}.opening-letter span{font-size:10px}.opening-letter small{font-size:9px}.card-opening p{font-size:12px}.gift-card{max-height:calc(100svh - 28px);padding:9px}.card-inner{min-height:0;padding:30px 21px 25px}.card-photo{width:170px;height:134px}.gift-card p{font-size:15px;line-height:1.9}.card-to{margin-top:20px}.card-ornament{font-size:17px}.card-ornament span{letter-spacing:3px;font-size:9px}}@media (prefers-reduced-motion:reduce){.opening-flap,.opening-letter,.opening-seal,.gift-card{animation:none}.opening-flap{transform:rotateX(-175deg)}.opening-letter{transform:translateY(-50px)}.opening-seal{opacity:0}}.scene-cta .primary-button{gap:9px;min-width:0;padding-inline:19px}.scene-cta .primary-button svg{margin-left:0}@media (width<=650px){.scene-cta .primary-button{min-width:0}}html,body,#root{overscroll-behavior:none}.three-canvas{touch-action:none}.tool-label-mobile{display:none}.music-unlock{z-index:16;color:#ffe5b7;font:12px var(--serif);background:#1b2b38ee;border:1px solid #ecd09f;border-radius:999px;padding:10px 16px;position:absolute;top:86px;right:5%;box-shadow:0 8px 22px #0007}.friend-notes,.friend-cheers{pointer-events:none;z-index:6;position:absolute;inset:0}.friend-notes span,.friend-cheers span{white-space:nowrap;will-change:transform,opacity;display:block;position:absolute;transform:translate(-50%,-50%)}.friend-notes span{color:#ffe6a5;text-shadow:0 0 15px #ffd57c,0 3px 8px #000;font:700 27px Georgia,serif;animation:1.65s ease-in-out infinite note-rise}.friend-notes span:after{content:"♫";font-size:17px;animation:1.4s ease-in-out .35s infinite note-rise;position:absolute;top:14px;left:18px}.friend-notes span:before{content:"♪";font-size:18px;animation:1.9s ease-in-out .7s infinite note-rise;position:absolute;top:-4px;left:-22px}.friend-cheers span{color:#6f4842;font:700 13px var(--serif);background:#fff6e9;border:1px solid #fff4d3;border-radius:15px;padding:7px 11px;animation:.5s ease-out both cheer-pop;box-shadow:0 8px 22px #0006}.friend-cheers span:after{content:"";border-top:8px solid #fff6e9;border-left:7px solid #0000;border-right:7px solid #0000;position:absolute;bottom:-7px;left:50%}@media (width<=980px){.app-shell:not(.is-editing) .intro-copy{width:min(350px,38vw)}.app-shell:not(.is-editing) .intro-copy p{display:block}}@keyframes note-rise{0%{opacity:0;transform:translate(-50%)scale(.7)}35%{opacity:1}to{opacity:0;transform:translate(-50%,-44px)scale(1.15)}}@keyframes cheer-pop{0%{opacity:0;transform:translate(-50%,-25%)scale(.7)}to{opacity:1;transform:translate(-50%,-50%)scale(1)}}@media (width<=650px){html,body,#root{height:100%;overflow:hidden}.app-shell:not(.is-editing){height:100svh;min-height:0;overflow:hidden}.app-shell:not(.is-editing) .topbar{border-bottom:0;height:62px;margin:0 4%;left:0;right:0}.brand{font-size:16px}.brand small{letter-spacing:1px;font-size:9px}.app-shell:not(.is-editing) .intro-copy{width:91%;padding:0;top:66px;left:5%}.app-shell:not(.is-editing) .intro-copy:before{background:linear-gradient(#0b1925f0,#0b1925b8 74%,#0000);inset:-5px -5% -13px}.app-shell:not(.is-editing) .intro-copy .eyebrow{letter-spacing:1.2px;font-size:9px}.app-shell:not(.is-editing) .intro-copy h1{letter-spacing:0;max-width:96%;margin:7px 0 4px;font-size:clamp(17px,4.8vw,23px);line-height:1.42}.app-shell:not(.is-editing) .intro-copy p{margin:2px 0;font-size:11px;line-height:1.4;display:block}.app-shell:not(.is-editing) .intro-copy .dedication{margin:4px 0 0}.app-shell:not(.is-editing) .scene-cta,.app-shell:not(.is-editing) .home-footer{display:none}.app-shell:not(.is-editing) .three-room-tools{left:12px;right:12px;bottom:calc(13px + env(safe-area-inset-bottom));white-space:normal;background:#102431ed;border-radius:19px;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;width:auto;padding:7px;display:grid;transform:none}.three-room-tools button{background:#ffffff0b;border-radius:12px;min-width:0;min-height:47px;padding:7px 5px;font-size:18px}.three-room-tools button span{letter-spacing:0;font-size:12px;display:inline}.three-room-tools button .tool-label-wide{display:none}.three-room-tools button .tool-label-mobile{display:inline}.three-hotspot{display:none}.friend-notes span{font-size:21px}.friend-cheers span{padding:5px 7px;font-size:9px}.music-unlock{padding:8px 11px;font-size:11px;top:60px;right:4%}}
