@import url('https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&display=swap');
:root{font-family:Arial,"Microsoft YaHei",sans-serif;color:#605248;background:#f6f1e9;font-synthesis:none}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at 52% 48%,#fffaf2 0%,#f5eee5 65%,#efe7dc 100%);min-height:100vh}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer}button:focus-visible,a:focus-visible{outline:2px solid #ab745f;outline-offset:5px}button{color:inherit}button:hover{filter:brightness(.97)}[hidden]{display:none!important}.app{max-width:1800px;margin:auto;padding:0 4.5vw}header{height:110px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #d7c9b64d}.brand{display:flex;gap:12px;color:#6b5b4e;text-decoration:none;font-size:17px;letter-spacing:3px;font-weight:bold}.brand-icon{font-size:39px;line-height:42px;font-weight:normal}.brand small{display:block;font-size:8px;letter-spacing:2px;margin-top:8px;font-weight:normal}.header-right{display:flex;align-items:center;gap:13px}.made{font-size:11px;color:#9d9183;letter-spacing:2px;margin-right:16px}.round{position:relative;border:1px solid #d8cbbc;background:#ffffff4a;border-radius:50%;height:35px;width:35px;font-size:18px}.sound-slash{position:absolute;left:12px;top:9px;font-size:16px}.round.on .sound-slash{display:none}main{display:grid;grid-template-columns:minmax(220px,.9fr) minmax(440px,2fr) minmax(220px,.75fr);min-height:650px;height:calc(100vh - 190px);align-items:center;position:relative;gap:8px}.intro{align-self:center;z-index:2;padding-bottom:55px}.eyebrow{font-size:9px;letter-spacing:2px;color:#a88c6f;font-weight:600;display:flex;align-items:center;gap:8px}.eyebrow>span{height:5px;width:5px;background:#bca17d;border-radius:50%}h1{font-family:"Noto Serif SC","Songti SC",SimSun,serif;font-weight:500;font-size:clamp(30px,2.7vw,47px);line-height:1.65;letter-spacing:2px;margin:25px 0 22px;color:#54463d}h1>span{color:#b77f79} .intro>p{font-size:12px;line-height:2.3;color:#9a8b7d;letter-spacing:.6px}.intro-note{font-family:"Noto Serif SC",SimSun,serif;color:#ac917d;font-size:11px;display:flex;align-items:center;gap:8px;margin-top:34px}.intro-note>span{font-size:23px}.scene-area{height:100%;min-height:540px;position:relative;margin-left:-50px;margin-right:-16px}#scene{position:absolute;inset:0;touch-action:none}canvas{display:block;width:100%;height:100%;outline:none}.room-label{position:absolute;left:50%;top:28px;transform:translateX(-50%);font-size:10px;letter-spacing:1px;white-space:nowrap;color:#ad9d89;display:flex;align-items:center;gap:9px}.live-dot{width:5px;height:5px;background:#b4ad8b;border-radius:50%}.room-number{font-size:8px;letter-spacing:1px;border-left:1px solid #cabca6;padding-left:10px;margin-left:5px}.scene-caption{position:absolute;bottom:63px;left:50%;transform:translateX(-50%) rotate(-5deg);font-family:Georgia,serif;font-size:17px;font-style:italic;white-space:nowrap;color:#b4a08a}.view-tools{position:absolute;right:15px;bottom:95px;background:#fffbf0bb;border:1px solid #decfba;border-radius:24px;display:flex;flex-direction:column;padding:7px;box-shadow:0 5px 20px #8a694409}.view-tools button{border:0;background:transparent;font-size:21px;width:27px;height:31px}.view-tools span{border-top:1px solid #e0d5c4;margin:5px 3px}.discovery{background:#fffcf559;border:1px solid #e2d5c5;border-radius:14px;padding:25px 20px 15px;margin-left:15px;z-index:2;box-shadow:0 8px 40px #8a664506}.discovery-heading{display:flex;justify-content:space-between;gap:6px}.discovery .eyebrow{font-size:8px;letter-spacing:1.7px}#count{font-size:10px;color:#aa8f70}.discovery h2{font-size:15px;font-family:"Noto Serif SC",SimSun,serif;font-weight:500;letter-spacing:1px;margin:17px 0}.progress{height:3px;background:#e9dfd1;border-radius:3px;margin-bottom:17px}.progress i{display:block;height:100%;background:#ba8d7b;width:0;transition:width .5s;border-radius:3px}.egg{width:100%;border:0;border-bottom:1px solid #e3d9ca77;padding:14px 0;background:transparent;display:flex;align-items:center;text-align:left;gap:12px}.egg-icon{width:33px;height:33px;display:grid;place-items:center;background:#eee6da;border-radius:10px;font-size:19px}.egg-info{flex:1}.egg strong{display:block;font-size:11px;font-weight:400;letter-spacing:.7px}.egg small{display:block;font-size:9px;color:#b1a18f;margin-top:6px}.egg-check{color:#c4b5a1;font-size:15px}.egg.found .egg-check{color:#a78767}.egg.found .egg-icon{background:#f0dfd6}.egg:last-child{border:0}.gift-note{display:flex;gap:10px;align-items:center;border-top:1px dashed #dbccba;margin-top:12px;padding-top:13px;color:#ad947e}.gift-note>span{font-size:27px}.gift-note p{font-size:10px;line-height:1.9;margin:0}footer{height:80px;border-top:1px solid #d7c9b64d;display:flex;justify-content:space-between;align-items:center;color:#ab9c8a}.controls-hint{display:flex;align-items:center;gap:10px;font-size:10px;letter-spacing:1px}.controls-hint>span{font-size:18px}.controls-hint i{font-style:normal;margin:0 7px;color:#cabcaa}.footer-love{font-size:8px;letter-spacing:2px}.footer-love b{font-size:15px;color:#b48678;padding:0 8px}#markers{position:absolute;inset:0;pointer-events:none;overflow:hidden}.marker{position:absolute;border:1px solid #fff9e7;background:#fff9e5d9;color:#a47c50;box-shadow:0 0 20px #fff0ae99;width:26px;height:26px;border-radius:50%;pointer-events:auto;padding:0;transform:translate(-50%,-50%);animation:breathe 2.5s infinite;font-size:18px}.marker.found{opacity:.55;animation:none;font-size:12px}.marker:hover{scale:1.2}#loading{position:absolute;inset:0;background:#f6efe8;display:flex;align-items:center;justify-content:center;gap:15px;font-size:12px;letter-spacing:2px}#loading span{animation:breathe 1s infinite}#toast{position:fixed;bottom:100px;left:50%;transform:translate(-50%,15px);opacity:0;background:#6a564bea;color:#fff8ea;padding:13px 25px;border-radius:24px;font-size:12px;pointer-events:none;transition:.3s;z-index:10;max-width:90vw;text-align:center}#toast.visible{opacity:1;transform:translate(-50%,0)}.modal{position:fixed;inset:0;z-index:20;display:grid;place-items:center;padding:25px}.modal-backdrop{position:absolute;inset:0;background:#4b3a303b;backdrop-filter:blur(7px)}.letter{position:relative;width:450px;max-width:100%;max-height:85vh;overflow:auto;background:#fffbf2;border:1px solid #f2e4cd;padding:42px 46px 30px;border-radius:8px;box-shadow:0 25px 100px #60402b30;text-align:center;animation:appear .5s}.close{position:absolute;right:16px;top:10px;background:none;border:0;font-size:26px;color:#a9937b}.letter-kicker{font-size:9px;letter-spacing:3px;color:#ad967b}#modal-icon{font-size:32px;margin:25px 0 16px}.letter h2{font-family:"Noto Serif SC",SimSun,serif;font-size:23px;font-weight:500;color:#79604f}.letter p{font-family:"Noto Serif SC",SimSun,serif;font-size:14px;line-height:2.2;color:#967e68;white-space:pre-line}#modal-actions{display:flex;gap:16px;justify-content:center;margin:25px 0}#modal-actions button{background:transparent;border:1px solid #d5bda4;border-radius:22px;padding:9px 17px;font-size:12px}.letter-footer{border-top:1px solid #ecdfcc;padding-top:20px;font-size:8px;letter-spacing:3px;color:#b7a086}.letter-footer span{color:#ba8b81;margin-left:10px}#wish{position:fixed;bottom:5vh;left:50%;transform:translateX(-50%);z-index:15;background:#fff9ede8;border:1px solid #ffe8bd;padding:25px 50px;text-align:center;border-radius:16px;box-shadow:0 10px 70px #60452b20;width:max-content;max-width:92vw;backdrop-filter:blur(12px)}.wish-kicker{color:#b79a6a;font-size:9px;letter-spacing:3px}#wish h2{font-family:"Noto Serif SC",SimSun,serif;font-size:27px;font-weight:500;color:#946f55;margin:13px 0}#wish p{font-size:12px;line-height:1.8;color:#aa927b}#wish button{border:0;border-radius:25px;padding:13px 25px;background:#b68774;color:#fff9ee;font-size:12px;margin-top:10px}#back-room{background:transparent!important;color:#a47f66!important}@keyframes breathe{50%{box-shadow:0 0 22px #ffe9a6;opacity:.65}}@keyframes appear{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media(min-width:1600px){main{grid-template-columns:1fr 2.1fr .7fr}.discovery{padding:30px}}@media(max-width:1100px){.app{padding:0 3vw}main{grid-template-columns:200px minmax(340px,1fr) 210px}.intro h1{font-size:30px}.intro>p{font-size:11px}.discovery{margin-left:0;padding:19px 15px}.scene-area{margin-left:-50px;margin-right:-30px}.intro-note{font-size:10px}.footer-love{letter-spacing:1px}}@media(max-width:800px){.app{padding:0 6vw}header{height:80px}.brand{font-size:14px}.brand small{font-size:7px}.brand-icon{font-size:32px}.made{display:none}.header-right{gap:9px}main{display:flex;flex-direction:column;height:auto;gap:0;min-height:0}.intro{width:100%;text-align:center;padding:35px 0 0}.intro .eyebrow{justify-content:center;font-size:8px}h1{font-size:31px!important;line-height:1.6;margin:17px 0 12px}h1 br{display:none}.intro>p{font-size:11px;line-height:2}.intro-note{display:none}.scene-area{width:112%;height:470px;min-height:0;margin:-15px -6vw 0}.room-label{top:24px;font-size:8px}.scene-caption{bottom:15px;font-size:15px}.view-tools{right:20px;bottom:50px}.discovery{width:100%;margin:15px 0 30px;padding:22px}.discovery h2{font-size:16px}.egg-list{display:grid;grid-template-columns:1fr 1fr;column-gap:22px}.egg{padding:12px 0}.egg strong{font-size:11px}.egg small{font-size:9px}.gift-note{padding-top:12px}.gift-note p br{display:none}.gift-note p{font-size:10px}footer{height:auto;min-height:95px;flex-direction:column;justify-content:center;gap:16px;padding:20px 0}.controls-hint{font-size:8px;gap:5px;letter-spacing:0}.controls-hint i{margin:0 2px}.controls-hint>span{font-size:14px}.footer-love{font-size:7px}#toast{bottom:30px;width:max-content}.letter{padding:37px 28px 25px}#wish{padding:22px 25px;bottom:4vh}#wish h2{font-size:23px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;scroll-behavior:auto!important}}

.portrait-preview{display:block;width:100%;border-radius:4px;margin:18px auto 0;border:6px solid #e4d1b6}.letter:has(.portrait-preview){width:480px}.letter:has(.portrait-preview) h2{font-size:20px;line-height:1.7}.letter:has(.portrait-preview) #modal-icon{margin:10px 0}

/* Size the dialog against the viewport, not an intrinsic grid track. */
.modal{display:flex;align-items:center;justify-content:center;width:100%;height:100%;height:100dvh;min-width:0;padding:16px;padding-top:max(16px,env(safe-area-inset-top));padding-bottom:max(16px,env(safe-area-inset-bottom));overflow:hidden}
.letter,.letter:has(.portrait-preview){flex:0 1 450px;width:100%;min-width:0;max-width:100%;max-height:100%;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;overflow-wrap:anywhere}
.letter:has(.portrait-preview){flex-basis:480px}
.letter h2,.letter p,.letter-kicker,.letter-footer{max-width:100%;overflow-wrap:anywhere}
#modal-actions{flex-wrap:wrap}
.close{width:40px;height:40px;right:7px;top:5px;z-index:1}
body.modal-open{overflow:hidden}
@media(max-width:480px){.letter{padding:42px 22px 24px}.letter h2{font-size:21px;line-height:1.6}.letter p{line-height:2}#modal-icon{margin:16px 0 12px}}
