:root{font-family:"PingFang SC","Microsoft YaHei",system-ui,sans-serif;color:#59432d;background:#f5f0e6;font-synthesis:none;--cream:#fff7dc;--ink:#60472f;--green:#647a49;--pink:#c66b80;--gold:#edcc8c}*{box-sizing:border-box}html,body{margin:0;min-height:100%;overscroll-behavior:none}body{height:100dvh;overflow:hidden}button{font:inherit;cursor:pointer;border:0;-webkit-tap-highlight-color:transparent}button:focus-visible{outline:3px solid #fdc966;outline-offset:4px}button:disabled{cursor:default;opacity:.55}button:active{transform:translateY(1px)}[hidden]{display:none!important}#app{position:relative;width:100%;height:100dvh;overflow:hidden}.scene{position:absolute;inset:0;overflow:hidden}.gift-scene{color:#f7dfbb;background:radial-gradient(ellipse at 50% 53%,#c34680 0%,#b42068 36%,#a80c5b 77%);isolation:isolate}.gift-scene:after{content:"";position:absolute;inset:auto 0 10px;height:2px;background:#e5c075;pointer-events:none}.gift-heading{position:absolute;z-index:3;top:max(25px,env(safe-area-inset-top));left:6%;right:6%;display:flex;align-items:center;justify-content:space-between;gap:20px;font-family:Georgia,serif;font-size:clamp(12px,1.3vw,16px);opacity:.85}.icon-button,.round-button{width:40px;height:40px;flex-shrink:0;display:grid;place-items:center;border-radius:50%;background:#fff6dce0;color:#715734;box-shadow:0 2px 0 #785b2c24}.icon-button{background:#ffffff12;color:#ffe5be;border:1px solid #ffe5be30;box-shadow:none}.icon-button svg,.round-button svg,.map-button svg{width:21px;height:21px}#carousel{display:block;width:100%;height:100%;touch-action:none;cursor:grab}#carousel:active{cursor:grabbing}.gift-copy{position:absolute;bottom:max(87px,13%);left:16px;right:16px;text-align:center;pointer-events:none}.gift-copy p{margin:0;font-size:12px;letter-spacing:.09em;opacity:.75}#gift-hint{margin-bottom:18px;min-height:20px}.gift-copy h1{font-family:"Segoe Script","Bradley Hand",cursive;font-size:clamp(35px,4.5vw,55px);font-weight:400;font-style:italic;letter-spacing:.035em;line-height:1.25;margin:0 0 12px}.gift-copy .gift-name{font-size:13px;letter-spacing:.28em;margin-bottom:20px}.glass-button{padding:12px 35px;border:1px solid #f8d8ba77;background:#ffffff0b;color:#ffedcb;border-radius:35px;font-size:15px;letter-spacing:.12em;pointer-events:auto;transition:background .2s}.glass-button:hover{background:#ffffff20}.gift-footer{position:absolute;bottom:max(30px,env(safe-area-inset-bottom));left:6%;right:6%;display:flex;justify-content:space-between;align-items:center;font-size:10px;letter-spacing:.08em;color:#f6d5bba6}.text-button{background:none;color:inherit;font-size:11px;padding:8px}.horse-controls{position:absolute;bottom:70px;display:flex;justify-content:center;gap:16px;left:0;right:0}.horse-controls button{background:none;color:#f9dfbf9c;font-size:11px;text-decoration:underline;text-underline-offset:4px;padding:6px}.game-scene{background:#8ea76a}.game-toolbar{position:absolute;z-index:4;top:max(14px,env(safe-area-inset-top));left:14px;right:14px;display:flex;gap:10px;align-items:center;justify-content:space-between}.inventory{display:flex;gap:5px;align-items:center;padding:7px 10px;background:#fff6dceF;border:2px solid #d5bb83;border-radius:16px;box-shadow:0 3px 0 #765b3620}.inventory .count{font-size:13px;font-weight:750;margin-right:5px;line-height:1.1}.inventory .count small{display:block;font-size:9px;font-weight:500;letter-spacing:.06em;margin-bottom:3px}.item-slot{width:29px;height:32px;border-radius:7px;background:#dacda774;display:grid;place-items:center;position:relative;color:#a3987f}.item-slot.found{background:#ffe3a1;border:1px solid #e6bd70}.item-slot svg{width:23px;height:23px}.item-slot:not(.found) svg{opacity:.3;filter:grayscale(1)}#town{display:block;width:100%;height:100%;touch-action:none}.location-label{position:absolute;top:max(80px,calc(env(safe-area-inset-top) + 66px));left:22px;border-radius:12px;color:#fff9e9;background:#3b4f3480;backdrop-filter:blur(8px);padding:6px 12px;font-size:11px;letter-spacing:.12em;pointer-events:none}.map-button{position:absolute;right:18px;top:86px;width:38px;height:38px;border-radius:12px;background:#fff6dcE8;color:#647a49;box-shadow:0 2px 0 #785b2c24;display:grid;place-items:center}.quest-panel{position:absolute;left:14px;right:14px;bottom:max(38px,calc(env(safe-area-inset-bottom) + 24px));display:flex;align-items:center;justify-content:space-between;gap:12px;border:2px solid #c8ae77;background:#fff7e4f7;box-shadow:0 5px 0 #5f462125,0 6px 20px #263c3220;border-radius:17px;padding:15px 16px}.quest-panel p{margin:5px 0 0;font-size:13px;font-weight:650}.quest-kicker{font-size:9px;color:#a08253;letter-spacing:.12em}.cream-button,.primary-button,.secondary-button{font-size:13px;padding:11px 19px;border-radius:13px;border:1px solid #d3bc87;background:#fae7b9;color:#624d30;box-shadow:0 3px 0 #d2b27a;white-space:nowrap;min-height:42px}.primary-button{background:#829b68;color:white;border-color:#71895a;box-shadow:0 3px 0 #5d7749}.secondary-button{background:#fff9e9;border-color:#d4c7a7;box-shadow:0 3px 0 #d9cdb3}.game-help{position:absolute;bottom:11px;left:0;right:0;text-align:center;font-size:10px;color:#fff7e3;text-shadow:0 1px 3px #3f5728;margin:0;letter-spacing:.08em}.nearby-actions{position:absolute;right:17px;bottom:141px;display:flex;flex-direction:column;align-items:end;gap:6px}.nearby-actions button{padding:8px 12px;border-radius:13px;background:#fff8e8ed;box-shadow:0 2px 0 #97805a55;font-size:11px;color:#685336}.toast{position:absolute;z-index:30;left:50%;top:16%;transform:translate(-50%,-12px);background:#453b2dec;color:#fff7e3;border-radius:18px;padding:12px 20px;font-size:12px;box-shadow:0 5px 25px #0002;max-width:88%;width:max-content;opacity:0;transition:.2s;pointer-events:none}.toast.show{opacity:1;transform:translate(-50%,0)}.modal-backdrop{position:absolute;z-index:15;inset:0;background:#26312772;backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;padding:22px;animation:fade-in .2s}.modal{width:min(100%,420px);max-height:90dvh;overflow-y:auto;background:#fff8e5;border:3px solid #d8bd88;outline:1px solid #fff6d7;outline-offset:-8px;border-radius:23px;padding:31px 25px 26px;box-shadow:0 16px 60px #17231555;color:#614b33;position:relative}.modal-close{position:absolute;right:12px;top:12px;background:none;color:#a58c66;width:27px;height:27px;display:grid;place-items:center;border-radius:50%}.modal-close svg{width:18px;height:18px}.modal h2{font-size:22px;font-weight:650;margin:7px 0 15px;text-align:center;letter-spacing:.04em}.modal p{font-size:13px;line-height:1.9;margin:10px 0 18px}.modal .subtle{text-align:center;color:#a68d65;font-size:11px}.modal-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-top:20px}.modal .portrait{width:86px;height:100px;background-repeat:no-repeat;margin:auto;image-rendering:auto}.modal .item-large{width:47px;height:47px;display:block;margin:3px auto 10px}.modal .item-large svg{width:100%;height:100%}.photo-blank{height:165px;background:#f1e7cf;border:8px solid #fffdf2;outline:1px solid #dac9a7;box-shadow:0 3px 8px #6c57341a;margin:21px 4px}.blank-caption{height:24px}.dialogue-backdrop{background:transparent;backdrop-filter:none;align-items:flex-end;padding:16px 14px 37px;pointer-events:none}.dialogue-panel{width:min(100%,620px);pointer-events:auto;display:flex;align-items:center;gap:16px;background:#fff9e7f5;border:2px solid #d4bb85;border-radius:25px;padding:20px;position:relative;box-shadow:0 5px 15px #36372426}.dialogue-speaker{position:absolute;left:20px;top:-18px;background:#d9b777;color:#65482b;border-radius:14px;padding:7px 16px;font-size:12px;font-weight:650}.dialogue-panel p{font-size:14px;line-height:1.8;margin:10px 0;flex:1}.dialogue-portrait{width:72px;height:86px;flex-shrink:0;background-repeat:no-repeat}.dialogue-next{width:34px;height:34px;align-self:flex-end;border-radius:50%;background:#dfb56f;color:white;display:grid;place-items:center}.dialogue-next svg{width:18px;height:18px}.dialogue-close{position:absolute;right:8px;top:-29px;color:#fff7de;background:#4f5e3f85;border-radius:15px;font-size:10px;padding:5px 9px}.party-scene{position:absolute;inset:0;background:#b99562;overflow:hidden}.party-art{position:absolute;width:100%;height:100%;object-fit:cover;object-position:50% 42%}.party-hud{position:absolute;inset:0;pointer-events:none}.party-hud button{pointer-events:auto}.party-banner{position:absolute;top:17%;left:12%;right:12%;display:flex;justify-content:center;gap:5px;transform:rotate(-1deg)}.party-banner span{font-size:clamp(19px,3vw,36px);padding:6px 7px;border-radius:3px;color:#594430;box-shadow:0 3px 7px #503c2220;background:#ead7aa}.party-banner span:nth-child(3n){background:#c6d8af;transform:rotate(3deg)}.party-banner span:nth-child(3n + 1){background:#efc5c1;transform:rotate(-3deg)}.party-banner span:nth-child(3n + 2){background:#eadea9}.party-character{position:absolute;transform:translate(-50%,-100%);background-repeat:no-repeat;filter:drop-shadow(0 4px 2px #4e3f2820);animation:celebrate 2.4s ease-in-out infinite}.party-baker{width:72px;height:81px;object-fit:cover;object-position:center}.party-controls{position:absolute;left:0;right:0;bottom:16%;text-align:center;display:flex;justify-content:center;gap:8px;flex-wrap:wrap;padding:10px}.party-controls button{font-size:12px;background:#fff7def2;border:1px solid #d0b581;box-shadow:0 3px 0 #a88754;padding:10px 16px;border-radius:18px;color:#674b2c}.confetti{position:absolute;inset:0;overflow:hidden;pointer-events:none}.confetti i{position:absolute;width:7px;height:13px;border-radius:2px;animation:fall 4s linear infinite;opacity:.8;top:-30px}.letter-modal{background:#fff9e8;min-height:450px}.letter-modal h2{font-size:21px;color:#b57579}.letter-blank{height:260px;border-top:1px solid #dccdab60;border-bottom:1px solid #dccdab60;margin:20px 0;background:repeating-linear-gradient(transparent 0px,transparent 32px,#ddcfa641 33px,transparent 34px)}.album-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.album-card{padding:9px;background:#fffdf4;box-shadow:0 2px 6px #59432822;border:1px solid #dacbaa;transform:rotate(-1deg)}.album-card:nth-child(2n){transform:rotate(1deg)}.album-card .album-photo{height:105px;background:#efe4cd}.album-card p{font-size:11px;margin:7px 0 0;text-align:center}.album-card.locked{opacity:.4}.fishing-water{height:185px;background:linear-gradient(#74bbcd,#398eae);border:6px solid #e7d6af;border-radius:15px;position:relative;overflow:hidden}.fishing-water:before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(0deg,transparent 0px,transparent 25px,#d5f8f71a 26px,transparent 28px);transform:skewY(-7deg)}.fishing-rod{position:absolute;left:7px;bottom:0;width:90px;height:130px;border-right:5px solid #947043;transform:rotate(32deg);transform-origin:bottom}.fishing-line{position:absolute;left:43%;top:19px;width:1px;height:90px;background:#fff8d0;transform:rotate(-15deg);transform-origin:top}.bobber{position:absolute;left:54%;top:105px;width:15px;height:22px;border-radius:8px;background:linear-gradient(#fff9e3 45%,#db5e64 45%);box-shadow:0 0 0 6px #ddf7ff20;animation:bob 1.2s ease-in-out infinite}.bobber.bite{top:126px;animation:wiggle .15s infinite;box-shadow:0 0 0 13px #f2ffed30}.fishing-water .ripples{position:absolute;left:49%;top:125px;width:55px;height:13px;border-radius:50%;border:1px solid #d9f5ec88}.fishing-state{text-align:center;min-height:27px}.fishing-state.bite{color:#ba655c;font-weight:750}.settings-list{display:grid;gap:10px}.settings-list button{width:100%}.empty-scene-icon{margin:10px auto;width:65px;height:65px;display:grid;place-items:center;border-radius:50%;background:#f2e8cf;color:#a8926c}.empty-scene-icon svg{width:38px;height:38px}.loading{position:absolute;inset:0;z-index:40;background:#fff8e9;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:20px}.loading p{font-size:12px;letter-spacing:.1em;color:#8e7955}.loading-flower{width:28px;height:28px;border-radius:50%;border:5px solid #d5a16e;border-top-color:#a0af7b;animation:spin 1s linear infinite}.map-overview .modal{width:min(92vw,600px);padding:15px;max-height:92dvh}.map-overview img{width:100%;display:block;border-radius:13px;max-height:75dvh;object-fit:contain}.map-overview h2{font-size:16px}.overview-note{text-align:center;font-size:10px!important;margin:7px 0!important}.progress-note{font-size:11px!important;color:#a18b64;text-align:center}.modal-error{padding:25px;text-align:center}
@keyframes fade-in{from{opacity:0}to{opacity:1}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes bob{50%{transform:translateY(3px)}}@keyframes wiggle{50%{transform:translateX(2px)}}@keyframes celebrate{50%{translate:0 -3px}}@keyframes fall{to{transform:translateY(100dvh) rotate(260deg)}}
@media(min-width:700px){body{display:grid;place-items:center;background:#eee9df;background-image:radial-gradient(#d9d0ba 1px,transparent 1px);background-size:20px 20px}#app{width:min(100vw,520px);height:min(96dvh,980px);border-radius:29px;box-shadow:0 20px 90px #624e3425;border:7px solid #fffaf0}.modal{max-height:85dvh}.gift-heading{font-size:13px}.gift-copy h1{font-size:43px}}
@media(max-height:650px){.gift-copy{bottom:70px}#gift-hint{margin-bottom:8px}.gift-copy h1{font-size:32px}.gift-copy .gift-name{margin-bottom:10px}.gift-footer{bottom:20px}.horse-controls{bottom:47px}.quest-panel{padding:10px 13px}.party-controls{bottom:11%}.modal{max-height:94dvh;padding-top:25px}.modal h2{font-size:18px}.photo-blank{height:100px}.fishing-water{height:140px}.letter-blank{height:140px}}
.memory-photo{width:100%;aspect-ratio:4/3;object-fit:cover;display:block;border:7px solid #fffdf2;outline:1px solid #dac9a7;margin:20px 0 14px;box-shadow:0 3px 8px #6c57341a}.modal .memory-caption{white-space:pre-line;font-size:13px;line-height:1.9;text-align:left;margin:15px 2px 8px}.album-photo{width:100%;object-fit:cover;display:block}.fishing-overlay .modal{width:min(100%,480px);padding:27px 17px 23px}.fishing-overlay .modal h2{font-size:20px;margin-bottom:5px}.fishing-overlay .fishing-instruction{text-align:center;font-size:11px;margin:0 0 17px;color:#947e5a}.fishing-stage{aspect-ratio:1/1;overflow:hidden;border-radius:17px;box-shadow:inset 0 0 0 2px #afba8a;background:#70acb5}.fishing-stage canvas{display:block;width:100%;height:100%}.fishing-overlay .fishing-state{font-size:12px;margin:17px 0 10px}.fishing-overlay .modal-actions{margin-top:8px}.fishing-overlay .primary-button{min-width:110px}.letter-overlay .modal{padding-top:31px}.letter-overlay .modal h2{color:#b57579;font-size:21px}.letter-body{padding:8px 2px}.letter-body p{font-size:13px;line-height:2.05;white-space:normal;margin:0 0 22px}.letter-body p:last-child{margin-top:28px}.party-memory{position:absolute;top:22.45%;width:8.4%;height:5.8%;object-fit:cover;pointer-events:auto;cursor:pointer;box-shadow:0 0 0 2px #a67e4b55}.gift-scene{background:#b8286f}.gift-copy{top:75%;bottom:auto}.gift-copy .gift-name{display:none}.horse-controls{bottom:35px}.gift-footer{bottom:max(8px,env(safe-area-inset-bottom));font-size:9px}#gift-hint{font-size:11px;letter-spacing:.03em}
@media(max-height:680px){.gift-copy{top:75%;bottom:auto}.gift-copy h1{font-size:31px;margin-bottom:10px}#gift-hint{margin-bottom:8px}.glass-button{padding:9px 25px;font-size:13px}.horse-controls{bottom:25px}.gift-footer{bottom:4px;font-size:8px}.horse-controls button{font-size:10px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition:none!important}}
.party-character{animation:none!important;translate:none!important}
.gift-heading{justify-content:flex-end}
.gift-copy{top:auto;bottom:max(100px,calc(env(safe-area-inset-bottom) + 100px))}
.gift-copy h1{font-size:clamp(29px,7vw,40px);margin-bottom:12px}
#gift-hint{position:absolute;left:0;right:0;top:calc(100% + 8px);margin:0}
.horse-controls{bottom:max(42px,calc(env(safe-area-inset-bottom) + 42px));gap:10px}
.gift-footer{bottom:max(8px,env(safe-area-inset-bottom))}
.party-scene{background:#b99562}
.party-flame{position:absolute;left:50%;top:41.6%;width:15px;height:27px;transform:translate(-50%,-100%);border-radius:55% 45% 45% 45%;background:radial-gradient(ellipse at 50% 78%,#fffdf1 0 20%,#ffed8a 35%,#ffca43 70%,#ffb13f 100%);box-shadow:0 0 12px 5px #ffd35a88,0 0 30px 12px #ffd35a22;transition:opacity .35s,filter .35s;pointer-events:none}
.is-blown .party-flame{opacity:0;filter:blur(2px)}
.party-character:after{content:"";position:absolute;left:31%;bottom:2%;width:38%;height:4%;border-radius:50%;background:#60442a24;filter:blur(2px);pointer-events:none;z-index:-1}
.letter-overlay .modal-close{position:sticky;top:0;float:right;margin:-17px -12px 0 0;background:#fff8e5f2;z-index:3}
.keepsake-preview{display:block;width:180px;height:210px;object-fit:contain;margin:14px auto 18px;max-width:80%}
.interior-hotspots{position:absolute;inset:0;pointer-events:none;z-index:1}
.scene-hotspot{position:absolute;pointer-events:auto;background:transparent;border:0;padding:0;border-radius:5px;box-shadow:none;touch-action:manipulation}
.scene-hotspot:active{transform:none}
.scene-hotspot:focus-visible{outline:2px solid #ffe6a5;outline-offset:1px;background:#fff2c51a}
.interior-heading{z-index:2}
.interior-actions{z-index:3}
.party-world{position:absolute;left:0;top:0;width:1024px;height:1536px;transform-origin:0 0;will-change:transform}.party-world .party-art{width:1024px;height:1536px;object-fit:fill;pointer-events:none}.party-world .party-hud{width:1024px;height:1536px}.party-world .party-banner span{font-size:36px}.party-world .party-character{animation:none!important;translate:none!important}.party-scene>.party-controls{z-index:4;bottom:max(15px,env(safe-area-inset-bottom));left:10px;right:10px;padding:8px;gap:7px;background:#fff6dfdf;border:1px solid #d4bb85;border-radius:17px;backdrop-filter:blur(7px)}.party-scene>.party-controls button{font-size:11px;padding:9px 12px;min-height:37px}.party-visits{flex-basis:100%;display:flex;justify-content:center;gap:6px;flex-wrap:wrap}.party-visits button{background:#e2edcef2!important;color:#4f663b!important;border-color:#b2c391!important}.party-scene>.confetti{z-index:3}.party-scene:focus{outline:none}
.interior-scene{position:absolute;inset:0;z-index:2;background:#473f30}.interior-canvas{display:block;width:100%;height:100%;touch-action:none}.interior-heading{position:absolute;top:91px;left:19px;right:19px;display:flex;align-items:center;justify-content:space-between;color:#fff7e5;pointer-events:none;text-shadow:0 1px 4px #312716}.interior-heading span{background:#4a513dc9;border-radius:12px;padding:7px 13px;font-size:13px}.interior-heading small{font-size:10px;background:#4a513d99;padding:6px 9px;border-radius:10px}.interior-actions{position:absolute;left:15px;right:15px;bottom:max(20px,env(safe-area-inset-bottom));display:flex;gap:8px;flex-wrap:wrap;justify-content:center}.interior-actions button{background:#fff8e8ed;color:#685336;border:1px solid #cbb38a;border-radius:14px;padding:10px 13px;box-shadow:0 3px 0 #7b634455;font-size:11px;min-height:39px}.interior-actions .interior-exit{background:#7d9363;color:#fff;border-color:#647b4f}.letter-progress{display:grid;justify-items:center;gap:13px;padding:10px 0;color:#a08360;font-size:11px}.letter-body p{white-space:pre-line}.letter-body p:empty{display:none}.letter-complete .modal-actions{margin-bottom:4px}.dialogue-panel p{min-height:51px}
