.empty-feed{padding:30px 0;color:var(--muted)}
.empty-feed h3{margin:0 0 8px;color:var(--ink);font:600 16px var(--serif)}
.empty-feed p{margin:0;font-size:12px}
.inline-composer{margin:10px 0 17px;padding:15px;background:var(--card);border:1px solid var(--line)}
.inline-composer label{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:11px}
.inline-composer select{padding:6px 9px;border:1px solid var(--line);background:white;color:var(--ink)}
.inline-composer textarea{display:block;width:100%;min-height:105px;margin:12px 0 8px;padding:11px;border:1px solid var(--line);resize:vertical;font:13px/1.7 var(--sans);outline-color:#91a18b}
.composer-form-actions{display:flex;align-items:center;justify-content:flex-end;gap:9px}
.composer-form-actions span{margin-right:auto;color:var(--muted);font-size:10px}
.composer-form-actions button,.comment-form button{border:0;background:var(--green-dark);padding:8px 14px;color:white;font-size:11px}
.composer-form-actions .cancel-publish{background:transparent;color:var(--ink-soft)}
.like-action.liked{color:var(--rust)}
.like-action b{font-size:10px;font-weight:500}
.comments-panel{margin:0 0 13px;padding:12px;background:#faf9f4}
.comment-list p{margin:0 0 8px;font-size:11px;line-height:1.6}
.comment-list b{margin-right:5px}
.no-comments{color:var(--muted)}
.comment-form{display:flex;gap:8px;margin-top:10px}
.comment-form input{flex:1;min-width:0;padding:8px;border:1px solid var(--line);font-size:11px}
.night-city-card{overflow:hidden;margin-bottom:27px;border:1px solid #273c4d;border-radius:12px;background:#0c1623;color:#e8eef1;box-shadow:0 17px 45px #15233118}.night-city-top{min-height:105px;padding:22px 27px 17px;display:flex;align-items:center;justify-content:space-between;background:radial-gradient(ellipse at 86% -20%,#1c3a4b 0,transparent 47%),linear-gradient(110deg,#0c1623,#111f2d)}.night-city-welcome .eyebrow{font:600 9px var(--sans);letter-spacing:2.5px;color:#7da7a7;margin:0 0 7px}.night-greeting{font:600 21px var(--serif);letter-spacing:.5px;margin:0 0 5px;color:#f0f0e9}.night-city-welcome>p:last-child{margin:0;color:#9caeba;font-size:10px}.night-city-meta{display:flex;align-items:center;gap:17px;color:#8094a3;font-size:9px}.night-city-name{display:flex;align-items:center;gap:7px;color:#d5e0e0}.night-city-name i,.place-live i{display:block;width:6px;height:6px;border-radius:50%;background:#82c6ae;box-shadow:0 0 9px #82c6ae}.night-city-meta button{border:1px solid #40576a;background:#182938;color:#c6d3d8;padding:8px 12px;border-radius:6px;font-size:10px}.night-map-layout{display:grid;grid-template-columns:minmax(0,1fr) 278px;gap:0;background:#0e1926}.night-map{position:relative;height:402px;overflow:hidden;background:#101d2c}.night-map-art{position:absolute;inset:0;width:100%;height:100%}.map-area-label,.map-river-label{fill:#8195a4;font:10px var(--sans);letter-spacing:2px;opacity:.9}.map-river-label{fill:#9be5e3;font:italic 12px var(--serif);letter-spacing:6px;opacity:.82}.map-night-vignette{position:absolute;inset:0;background:linear-gradient(90deg,#0c162324 0,#0c162300 28%,#0c162300 85%,#0c162322),linear-gradient(0deg,#0c16234c,transparent 27%,transparent 77%,#0c16232b);pointer-events:none}.landmark-pin{position:absolute;display:flex;align-items:center;gap:7px;padding:0;border:0;background:none;color:#f1efdf;text-align:left;transform:translate(-50%,-50%)}.river-pin{left:39%;top:62%}.farm-pin{left:75%;top:36%}.pin-core{z-index:2;width:32px;height:32px;display:grid;place-items:center;border:1px solid #d3c494;border-radius:50%;background:#b28c4e;color:#fff6dc;font-size:17px;box-shadow:0 0 0 5px #e2c67725,0 0 22px #dab96666;transition:.2s}.pin-pulse{position:absolute;left:0;top:50%;width:32px;height:32px;border:1px solid #e3ca82;border-radius:50%;transform:translateY(-50%);animation:pinPulse 2.3s infinite}.landmark-pin:not(.selected) .pin-core{background:#526e79;border-color:#7ba4a7;box-shadow:0 0 0 5px #9acbc21c,0 0 18px #86cfc653}.landmark-pin .pin-label{font-size:11px;line-height:1.4;white-space:nowrap;text-shadow:0 2px 6px #09121d}.pin-label small{display:block;color:#9cb0b4;font-size:8px}.map-compass{position:absolute;right:19px;top:17px;text-align:center;color:#94aab3;font-size:9px;line-height:1.4}.map-scale{position:absolute;left:17px;bottom:13px;color:#81949e;font-size:8px;letter-spacing:.4px}.landmark-panel{padding:23px 20px 17px;background:linear-gradient(145deg,#152535,#101b28);border-left:1px solid #263c4d;display:flex;flex-direction:column}.landmark-panel-kicker{display:flex;align-items:center;justify-content:space-between;color:#7792a0;font-size:8px;letter-spacing:1.5px}.place-live{display:flex;align-items:center;gap:6px;color:#8fbca9;letter-spacing:0;font-size:8px}.place-live i{width:5px;height:5px}.landmark-region{margin:21px 0 5px;color:#9caeb7;font-size:9px}.landmark-panel h2{margin:0;color:#f0eee2;font:600 24px var(--serif);letter-spacing:1px}.landmark-description{min-height:43px;margin:9px 0 13px;color:#a3b1b6;font-size:10px;line-height:1.8}.landmark-community-note{display:flex;gap:7px;padding:8px 9px;background:#182a37;color:#cfb77c;font-size:9px;line-height:1.6}.landmark-community-note span{color:#a8b4b3}.landmark-task-title{display:flex;justify-content:space-between;align-items:center;margin:17px 0 7px;color:#d8e1dc;font-size:10px}.landmark-task-title small{color:#768c96;font-size:8px}.landmark-task-list{display:flex;flex-direction:column;gap:6px}.landmark-task{width:100%;display:flex;align-items:center;gap:9px;padding:8px;border:1px solid #2c4351;border-radius:7px;background:#142330;color:#e4ebe6;text-align:left}.landmark-task:hover,.landmark-task.selected{border-color:#758e71;background:#1a2c36}.task-icon{width:29px;height:29px;display:grid;place-items:center;border-radius:7px;font-size:14px}.fishing-icon{background:#233d4b;color:#8ad0d0}.gardening-icon{background:#324536;color:#b5d193}.landmark-task>span:nth-child(2){display:flex;flex-direction:column;gap:3px}.landmark-task b{font-size:9px;font-weight:600}.landmark-task small{font-size:8px;color:#879ca3}.task-arrow{margin-left:auto;color:#9eb8a7;font-size:15px}.landmark-panel-footer{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:auto;padding-top:13px}.landmark-panel-footer>span{max-width:145px;color:#7f939b;font-size:8px;line-height:1.5}.landmark-panel-footer button{flex:none;padding:8px 10px;border:0;border-radius:5px;background:#b58e50;color:#fff8e8;font-size:9px}.night-map-legend{height:42px;display:flex;align-items:center;gap:17px;padding:0 19px;background:#0d1723;color:#7e949d;font-size:8px}.night-map-legend>span{display:flex;align-items:center;gap:6px}.night-map-legend>span:nth-child(2){margin-right:auto}.legend-glow{width:6px;height:6px;border-radius:50%;background:#d5b76f;box-shadow:0 0 7px #e4d081}.night-map-legend button{border:0;background:none;color:#c0cea5;font-size:9px}.map-user-dot{position:absolute;z-index:5;width:13px;height:13px;border:2px solid #e9fff5;border-radius:50%;background:#71d9b0;box-shadow:0 0 0 7px #71d9b037,0 0 17px #71d9b0;transform:translate(-50%,-50%)}@keyframes pinPulse{0%{opacity:.75;transform:translateY(-50%) scale(.7)}100%{opacity:0;transform:translateY(-50%) scale(1.75)}}
@media(max-width:800px){.night-city-card{margin-bottom:19px;border-radius:9px}.night-city-top{min-height:89px;padding:17px 15px 13px}.night-greeting{font-size:18px}.night-city-welcome>p:last-child{max-width:205px;font-size:9px}.night-city-meta{gap:9px;flex-wrap:wrap;justify-content:flex-end;max-width:130px;font-size:8px}.night-city-name{width:100%;justify-content:flex-end}.night-city-meta button{padding:6px 9px;font-size:9px}.night-map-layout{grid-template-columns:1fr}.night-map{height:325px}.landmark-panel{padding:17px 15px 13px;border-left:0;border-top:1px solid #263c4d}.landmark-region{margin-top:10px}.landmark-panel h2{font-size:20px}.landmark-description{min-height:0;margin-bottom:9px}.landmark-task-title{margin-top:12px}.landmark-task-list{display:grid;grid-template-columns:1fr 1fr}.landmark-panel-footer{margin-top:12px}.night-map-legend{padding:0 12px;gap:10px}.night-map-legend>span:nth-child(2){display:none}.night-map-legend button{margin-left:auto;font-size:8px}.river-pin{left:40%;top:61%}.farm-pin{left:74%;top:35%}}
.night-city-meta .night-wallet{padding:7px 9px;border:1px solid #314756;border-radius:6px;background:#142431;color:#a8bac0;font-size:9px;white-space:nowrap}.night-wallet b{color:#dfc27c;font-weight:650}.landmark-actions{display:flex;gap:6px}.landmark-panel-footer #checkin-landmark{border:1px solid #4b665c;background:#172e32;color:#b8d5bd}.landmark-panel-footer button:disabled{opacity:.4;cursor:not-allowed}.map-empty-note{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);padding:14px 19px;border:1px solid #42586a;border-radius:8px;background:#122333e8;color:#d5e0df;font-size:11px;line-height:1.9;text-align:center;box-shadow:0 10px 30px #0004}.map-empty-note small{color:#90a4ac;font-size:9px}.no-landmark-task{margin:4px 0;color:#83969c;font-size:9px}.night-map-legend button{cursor:pointer}.game-dialog{width:min(560px,calc(100vw - 26px));max-height:min(80vh,680px);padding:0;overflow:hidden;border:1px solid #405565;border-radius:13px;background:#101c28;color:#e8eeee;box-shadow:0 24px 80px #02060ccc}.game-dialog::backdrop{background:#06101caa;backdrop-filter:blur(5px)}.game-dialog-head{display:flex;align-items:center;justify-content:space-between;padding:19px 21px 14px;border-bottom:1px solid #2b3e4b}.game-dialog-head .eyebrow{margin:0 0 5px;color:#91aaa4;font-size:8px}.game-dialog-head h2{margin:0;font:600 20px var(--serif)}.game-dialog-head>button{width:31px;height:31px;border:1px solid #3d5260;border-radius:50%;background:#172634;color:#bbcacd;font-size:20px}.game-dialog-body{max-height:calc(80vh - 78px);overflow:auto;padding:14px 21px 20px}.game-balance{margin:0 0 12px;color:#9baeb4;font-size:10px}.game-balance b{color:#dfc27c}.game-item-list{display:flex;flex-direction:column;gap:8px}.game-item-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:12px;padding:12px;border:1px solid #2d4352;border-radius:8px;background:#142330}.game-item-row>div:first-child{display:flex;flex-direction:column;gap:5px}.game-item-row b{font-size:11px}.game-item-row small{color:#91a3aa;font-size:9px}.game-item-row>span{color:#d8c07f;font-size:9px;white-space:nowrap}.game-item-row button{padding:6px 10px;border:0;border-radius:5px;background:#758f68;color:#f7f5e8;font-size:9px}.game-item-actions{display:flex;gap:5px}.game-item-row button.secondary-game-button{border:1px solid #526679;background:#1b2b38;color:#b9c7cc}.game-empty{padding:24px 12px;text-align:center;color:#9aadb1;font-size:11px}.night-map-legend button:hover{color:#fff1c4}@media(max-width:520px){.night-city-top{align-items:flex-start}.night-city-meta{max-width:115px}.night-city-meta .night-wallet{font-size:8px;padding:5px 6px}.game-dialog-body{padding:12px}.game-item-row{grid-template-columns:minmax(0,1fr) auto;gap:7px}.game-item-row .game-item-actions,.game-item-row>button{grid-column:1 / -1;justify-content:flex-end}.landmark-actions{gap:5px}.landmark-panel-footer #checkin-landmark,.landmark-panel-footer #start-landmark-task{padding:7px 8px}}
.night-map-canvas{position:absolute;inset:0;background:#101d2c;z-index:1}.night-map .map-scale{z-index:500;bottom:8px;left:8px;padding:3px 6px;border-radius:4px;background:#0c1623d9;color:#c0d1d1;font-size:8px}.night-landmark-marker{background:transparent;border:0}.night-landmark-marker .pin-core{position:absolute;left:0;top:6px;display:grid;place-items:center;width:32px;height:32px;border:1px solid #86b8b5;border-radius:50%;background:#365f6b;color:#effff4;font-size:17px;box-shadow:0 0 0 5px #9acbc21c,0 0 18px #86cfc653}.night-landmark-marker.selected .pin-core{background:#b28c4e;border-color:#e3ca82;box-shadow:0 0 0 5px #e2c67725,0 0 22px #dab96688}.map-pin-label{position:absolute;left:39px;top:14px;padding:3px 7px;border:1px solid #6e8184;border-radius:4px;background:#0c1623e8;color:#f1efdf;font-size:11px;white-space:nowrap;box-shadow:0 2px 6px #09121d88}.night-user-marker{border:0;background:transparent}.night-user-marker span{display:block;width:14px;height:14px;border:2px solid #e9fff5;border-radius:50%;background:#71d9b0;box-shadow:0 0 0 7px #71d9b037,0 0 17px #71d9b0}.map-loading-overlay{position:absolute;z-index:600;inset:0;display:grid;place-items:center;background:#101d2c;color:#b9cccb;font-size:12px}.map-loading-overlay:empty{display:none}

/* Fishing game scene */
.fishing-scene{position:relative;min-height:310px;overflow:hidden;border:1px solid #2d4b59;border-radius:10px;background:linear-gradient(#162b3c 0%,#233c4b 57%,#183644 58%,#102630 100%);isolation:isolate}.fishing-sky{position:absolute;inset:0 0 43%;overflow:hidden;background:radial-gradient(ellipse at 72% 110%,#d28f6d24,transparent 50%)}.fishing-moon{position:absolute;right:17%;top:18%;width:37px;height:37px;border-radius:50%;background:#f1d9a4;box-shadow:0 0 32px #efcf927a}.fishing-star{position:absolute;color:#d6d4c3}.star-one{left:19%;top:22%}.star-two{left:46%;top:33%;font-size:10px}.star-three{right:34%;top:15%;font-size:23px}.fishing-shore{position:absolute;z-index:2;left:0;right:0;top:41%;height:24%;background:linear-gradient(170deg,#293b3a,#172c2d 70%);clip-path:polygon(0 48%,16% 35%,31% 41%,48% 25%,66% 39%,83% 28%,100% 42%,100% 100%,0 100%)}.fishing-person{position:absolute;left:24%;top:10%;width:47px;height:59px}.fishing-person i{position:absolute;left:17px;top:0;width:14px;height:14px;border-radius:50%;background:#17222b}.fishing-person b{position:absolute;left:10px;top:14px;width:29px;height:34px;border-radius:15px 15px 5px 5px;background:#182630;transform:rotate(-12deg)}.fishing-person em{position:absolute;left:30px;top:20px;width:67px;height:2px;background:#b89862;transform:rotate(-30deg);transform-origin:left;box-shadow:66px 27px 0 -0.5px #c9d5c1}.fishing-reed{position:absolute;bottom:0;width:2px;height:41px;background:#849064;transform:rotate(8deg);transform-origin:bottom}.fishing-reed:before,.fishing-reed:after{content:'';position:absolute;width:12px;height:4px;border-radius:100% 0;background:#849064}.fishing-reed:before{left:-10px;top:9px;transform:rotate(-27deg)}.fishing-reed:after{left:1px;top:20px;transform:rotate(24deg)}.reed-one{left:12%}.reed-two{right:13%;height:52px;transform:rotate(-8deg)}.fishing-water{position:absolute;left:0;right:0;bottom:0;height:43%;overflow:hidden;background:repeating-linear-gradient(174deg,transparent 0 19px,#87b5b72b 20px,#87b5b712 22px,transparent 24px 39px),linear-gradient(#1c4853,#0e2934)}.fishing-ripple{position:absolute;left:61%;top:37%;width:75px;height:17px;border:1px solid #a4d0c350;border-width:1px 0 0;border-radius:50%;transform:translateX(-50%);animation:waterRipple 3s ease-in-out infinite}.ripple-two{top:52%;width:48px;animation-delay:1s}.fishing-line{position:absolute;left:43%;top:-2px;width:1px;height:58%;background:#e6d5a7a8;transform:rotate(-6deg);transform-origin:top;transition:transform .3s}.fishing-bobber{position:absolute;left:59%;top:34%;width:8px;height:19px;border-radius:50% 50% 45% 45%;background:linear-gradient(#f3ede1 0 42%,#c66d58 43%);box-shadow:0 0 9px #d3c99b80;transition:transform .25s}.fishing-bobber b{position:absolute;left:3px;top:-11px;width:1px;height:12px;background:#e6d5a7}.fishing-catch{position:absolute;left:59%;top:23%;font-size:28px;opacity:0;transform:translateY(18px) rotate(-16deg);transition:.45s}.water-glint{position:absolute;color:#d6e7c8;opacity:.65}.glint-one{left:76%;top:28%}.glint-two{left:32%;top:55%;font-size:20px}.fishing-copy{position:absolute;z-index:4;left:0;right:0;bottom:16px;display:flex;flex-direction:column;align-items:center;gap:5px;text-shadow:0 2px 9px #0008}.fishing-copy b{color:#f3ead1;font-size:14px}.fishing-copy span{color:#a9c0bb;font-size:9px}.fishing-meter{position:absolute;z-index:4;left:24%;right:24%;bottom:5px;height:2px;background:#d7e2d62b}.fishing-meter i{display:block;width:0;height:100%;background:#d9bd7d}.fishing-scene[data-phase="cast"] .fishing-line{transform:rotate(18deg)}.fishing-scene[data-phase="waiting"] .fishing-meter i{width:38%;transition:width 5s linear}.fishing-scene[data-phase="nibble"] .fishing-bobber{animation:bobberNibble .42s ease-in-out infinite alternate}.fishing-scene[data-phase="nibble"] .fishing-meter i{width:75%;transition:width 4s linear}.fishing-scene[data-phase="bite"] .fishing-bobber{transform:translateY(13px);animation:bobberBite .18s ease-in-out infinite alternate}.fishing-scene[data-phase="bite"] .fishing-meter i{width:100%;transition:width .6s linear}.fishing-scene[data-phase="catch"] .fishing-catch,.fishing-scene[data-phase="result"] .fishing-catch{opacity:1;transform:translateY(-38px) rotate(8deg)}.fishing-scene[data-phase="catch"] .fishing-bobber,.fishing-scene[data-phase="result"] .fishing-bobber{transform:translateY(-34px)}.fishing-outcome{position:relative;z-index:6;display:flex;align-items:center;gap:9px;width:max-content;max-width:90%;margin:190px auto 14px;padding:9px 13px;border:1px solid #d3bd7b66;border-radius:9px;background:#10232ceF;box-shadow:0 8px 22px #0005}.fishing-outcome[hidden]{display:none}.fishing-outcome b,.fishing-outcome small{display:block}.fishing-outcome b{font-size:11px;color:#f2dfaa}.fishing-outcome small{margin-top:3px;color:#a9c0bb;font-size:9px}.fishing-reward-icon{font-size:25px}.fishing-scene[data-phase="result"] .fishing-meter i{width:100%}.fishing-scene[data-phase="miss"] .fishing-bobber{transform:translateY(8px)}@keyframes waterRipple{0%,100%{transform:translateX(-50%) scaleX(.8);opacity:.35}50%{transform:translateX(-50%) scaleX(1.2);opacity:.8}}@keyframes bobberNibble{to{transform:translateY(4px) rotate(8deg)}}@keyframes bobberBite{to{transform:translateY(8px) rotate(-8deg)}}
.fishing-scene[data-phase="waiting"] .fishing-meter i{width:0;transition:none;animation:fishingWait var(--fishing-wait-duration,10s) linear forwards}.fishing-scene[data-phase="nibble"] .fishing-meter i{width:84%;transition:width .4s linear;animation:none}@keyframes fishingWait{to{width:84%}}
.night-landmark-marker{position:relative;width:150px;height:44px;cursor:pointer}.night-user-marker{width:18px;height:18px}

/* 场景动态背景：照片运镜 + 常驻动态水波，无照片时使用自制动画 */
.night-scene{position:relative;overflow:hidden}
.scene-backdrop{position:absolute;inset:0;overflow:hidden;background:#0b1721}
.scene-backdrop img{width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .9s ease}
.scene-backdrop img:not([src]),.scene-backdrop img[src=""]{display:none}
.night-scene.has-photo .scene-backdrop img{opacity:.62;animation:sceneKenBurns 28s ease-in-out infinite alternate}
.scene-photo-veil{position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .9s ease;background:linear-gradient(180deg,#08131fb0,#0a1a2466 42%,#050e16e0)}
.night-scene.has-photo .scene-photo-veil{opacity:1}
.fishing-sky,.fishing-water{transition:opacity .9s ease}
.night-scene.has-photo .fishing-sky{opacity:.25}
.night-scene.has-photo .fishing-water{opacity:.5}
.scene-ripples{position:absolute;left:0;right:0;bottom:0;height:46%;pointer-events:none}
.scene-ripples i{position:absolute;left:50%;bottom:10%;width:190px;height:26px;margin-left:-95px;border:1px solid #a9dbd455;border-width:1px 0 0;border-radius:50%;animation:sceneRipple 5.6s ease-in-out infinite}
.scene-ripples i:nth-child(2){bottom:24%;width:130px;margin-left:-65px;animation-delay:1.7s}
.scene-ripples i:nth-child(3){bottom:38%;width:86px;margin-left:-43px;animation-delay:3.2s}
@keyframes sceneRipple{0%{transform:scale(.55);opacity:0}30%{opacity:.8}100%{transform:scale(1.4);opacity:0}}
@keyframes sceneKenBurns{from{transform:scale(1.03) translate3d(0,0,0)}to{transform:scale(1.16) translate3d(-1.6%,-1.4%,0)}}
.scene-tools{position:relative;z-index:7;display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:9px 12px 11px;border-top:1px solid #2b4350;background:#0d1a24d9}
.scene-credit{color:#93a9ae;font-size:8px}
.scene-source-note{margin-left:auto;color:#7fbfa4;font-size:8px}
.scene-upload{border:1px solid #456472;border-radius:5px;background:#172937;color:#c6d4d8;padding:5px 10px;font-size:9px}
.scene-upload:disabled{opacity:.55}

/* 自制动画菜园场景 */
.farming-scene{position:relative;min-height:310px;overflow:hidden;border:1px solid #2f4b45;border-radius:10px;background:linear-gradient(#132a33,#1b3a33 58%,#22392b);isolation:isolate}
.farming-sky{position:absolute;inset:0;background:radial-gradient(ellipse at 82% 12%,#2c4f4a 0,transparent 55%)}
.farming-sun{position:absolute;right:13%;top:11%;width:54px;height:54px;border-radius:50%;background:radial-gradient(#f7ecc4,#e2ba64);box-shadow:0 0 62px #f0d79a55;animation:farmingSun 8s ease-in-out infinite alternate}
@keyframes farmingSun{to{transform:translateY(7px) scale(1.05);opacity:.88}}
.farming-cloud{position:absolute;height:14px;border-radius:50%;background:#ffffff1f;box-shadow:26px 6px 0 -3px #ffffff17}
.cloud-one{width:118px;top:16%;left:-160px;animation:farmingCloud 44s linear infinite}
.cloud-two{width:76px;top:27%;left:-160px;animation:farmingCloud 60s linear infinite;animation-delay:7s}
@keyframes farmingCloud{to{transform:translateX(840px)}}
.farming-field{position:absolute;left:0;right:0;bottom:0;height:56%;background:linear-gradient(#2a3a2b,#212a1f)}
.soil-row{position:absolute;left:-3%;right:-3%;height:20px;border-radius:50%;background:linear-gradient(#3d4c34,#2a3423);box-shadow:0 7px 0 #1b2317aa}
.row-one{bottom:52%;height:16px}
.row-two{bottom:33%}
.row-three{bottom:14%}
.farming-sprout{position:absolute;left:50%;bottom:44%;z-index:2;transform:translateX(-50%) scale(.35);transform-origin:bottom center;font-size:30px;transition:transform 1.1s ease}
.farming-scene[data-phase="water"] .farming-sprout{transform:translateX(-50%) scale(.55)}
.farming-scene[data-phase="grow"] .farming-sprout{transform:translateX(-50%) scale(.9)}
.farming-scene[data-phase="ripe"] .farming-sprout,.farming-scene[data-phase="result"] .farming-sprout{transform:translateX(-50%) scale(1.15);animation:sproutSway 2.6s ease-in-out infinite alternate}
.farming-scene[data-phase="result"] .farming-sprout{animation:sproutSway 1.9s ease-in-out infinite alternate}
@keyframes sproutSway{to{transform:translateX(-50%) scale(1.18) rotate(5deg)}}
.farming-leaf{position:absolute;bottom:47%;width:36px;height:18px;border-radius:100% 0;background:#5d8a49;opacity:0;transition:opacity .9s ease,transform .9s ease}
.leaf-one{left:42%;transform:rotate(-24deg) scale(.4)}
.leaf-two{right:42%;transform:scaleX(-1) rotate(-24deg) scale(.4)}
.farming-scene[data-phase="grow"] .farming-leaf,.farming-scene[data-phase="ripe"] .farming-leaf,.farming-scene[data-phase="result"] .farming-leaf{opacity:.9}
.farming-scene[data-phase="grow"] .leaf-one,.farming-scene[data-phase="ripe"] .leaf-one,.farming-scene[data-phase="result"] .leaf-one{transform:rotate(-24deg) scale(1)}
.farming-scene[data-phase="grow"] .leaf-two,.farming-scene[data-phase="ripe"] .leaf-two,.farming-scene[data-phase="result"] .leaf-two{transform:scaleX(-1) rotate(-24deg) scale(1)}
.farming-copy{position:absolute;z-index:4;left:0;right:0;bottom:16px;display:flex;flex-direction:column;align-items:center;gap:5px;text-shadow:0 2px 9px #0008}
.farming-copy b{color:#eaf3d8;font-size:14px}
.farming-copy span{color:#aec4a8;font-size:9px}
.farming-meter{position:absolute;z-index:4;left:24%;right:24%;bottom:5px;height:2px;background:#d7e2d62b}
.farming-meter i{display:block;width:0;height:100%;background:#9fce7e}
.farming-scene[data-phase="water"] .farming-meter i{width:42%;transition:width 3.4s linear}
.farming-scene[data-phase="grow"] .farming-meter i{width:78%;transition:width 3.2s linear}
.farming-scene[data-phase="ripe"] .farming-meter i,.farming-scene[data-phase="result"] .farming-meter i{width:100%;transition:width .6s linear}
.farming-outcome{position:relative;z-index:6;display:flex;align-items:center;gap:9px;width:max-content;max-width:90%;margin:190px auto 14px;padding:9px 13px;border:1px solid #cfe0a166;border-radius:9px;background:#10232ceF;box-shadow:0 8px 22px #0005}
.farming-outcome[hidden]{display:none}
.farming-outcome b,.farming-outcome small{display:block}
.farming-outcome b{font-size:11px;color:#dff0b6}
.farming-outcome small{margin-top:3px;color:#aec4a8;font-size:9px}
.fishing-outcome,.farming-outcome{flex-wrap:wrap}
.scene-reward-choice{display:flex;flex-basis:100%;gap:6px;margin-top:5px}
.scene-reward-choice button{padding:5px 10px;border:0;border-radius:5px;background:#758f68;color:#f7f5e8;font-size:9px;cursor:pointer}
.scene-reward-choice button.secondary-game-button{border:1px solid #526679;background:#1b2b38;color:#b9c7cc}
.scene-reward-choice button:disabled{opacity:.5;cursor:not-allowed}
.farming-reward-icon{font-size:25px}

/* 小游戏操作面板：看准时机按一下，收获由手感决定 */
.scene-play{position:absolute;z-index:8;left:50%;bottom:92px;transform:translateX(-50%);width:min(330px,86%);display:flex;flex-direction:column;gap:9px;padding:10px 12px;border:1px solid #ffffff2b;border-radius:10px;background:#0c1924e8;box-shadow:0 12px 30px #0007}
.scene-play[hidden]{display:none}
.rhythm-track{position:relative;height:12px;border-radius:6px;background:#ffffff17;overflow:hidden}
.rhythm-zone{position:absolute;left:50%;top:0;bottom:0;width:36%;transform:translateX(-50%);border-radius:6px;background:linear-gradient(90deg,#7fd8a53d,#7fd8a5b0,#7fd8a53d)}
.rhythm-marker{position:absolute;top:-4px;left:0;width:6px;height:20px;margin-left:-3px;border-radius:3px;background:#ffe9a8;box-shadow:0 0 12px #ffe9a8cc}
.scene-play-row{display:flex;align-items:center;gap:11px;flex-wrap:wrap}
.scene-action{padding:7px 16px;border:0;border-radius:6px;background:#c8a05a;color:#1d1508;font-size:11px;font-weight:700}
.scene-action:disabled{opacity:.5}
@keyframes sceneActionPulse{0%,100%{box-shadow:0 0 0 0 #c8a05a80}55%{box-shadow:0 0 0 8px #c8a05a00}}
.scene-action.is-waiting{animation:sceneActionPulse 1.5s ease-in-out infinite}
.scene-choice{display:flex;align-items:center;gap:6px;color:#ccdade;font-size:9px;line-height:1.5}
.scene-choice input{accent-color:#8fc7a0}
.night-fishing-limit{padding:7px 9px;border:1px solid #314756;border-radius:6px;background:#142431;color:#a8bac0;font-size:9px;white-space:nowrap}
.night-fishing-limit b{color:#8fc7a0;font-weight:650}
@media(max-width:520px){.night-fishing-limit{font-size:8px;padding:5px 6px}.scene-play{bottom:8px;width:94%;padding:8px 10px;gap:6px}}

/* ===================== 首页画风升级 ===================== */
.community-page{background:
  radial-gradient(1100px 560px at 10% -12%, #e2ebe1 0%, transparent 62%),
  radial-gradient(900px 520px at 102% -4%, #e9e3f0 0%, transparent 58%),
  linear-gradient(180deg,#f6f4ee 0%,#f1efe7 45%,#f7f5f0 100%)}
.site-header{position:sticky;top:0;z-index:60;background:#fffefaf5;backdrop-filter:blur(12px);box-shadow:0 1px 0 #ebe8df,0 14px 34px -26px #364436}
.main-nav a{letter-spacing:.4px;transition:.18s}
.main-nav a:hover{color:#405c4b}
.night-city-card{position:relative;border-radius:24px;border:1px solid #2b4354;overflow:hidden;
  background:
    radial-gradient(880px 420px at 80% -22%, #2e5468a8 0%, transparent 62%),
    radial-gradient(620px 320px at 4% 112%, #1e4147a6 0%, transparent 60%),
    linear-gradient(160deg,#0d1b28 0%,#122533 46%,#0c1b25 100%);
  box-shadow:0 40px 90px -34px #102030d9, inset 0 1px 0 #ffffff14}
.night-city-card:after{content:'';position:absolute;z-index:1;inset:0;pointer-events:none;
  background:radial-gradient(120% 90% at 50% 120%, #0000 40%, #050d1499 100%)}
.night-city-top{position:relative;z-index:3;gap:22px;padding:30px 32px 22px}
.night-city-welcome .eyebrow{color:#9ec6b3;letter-spacing:4px;font-size:9px;margin-bottom:9px}
.night-greeting{font:600 31px/1.3 var(--serif);letter-spacing:2px;margin:0 0 8px;
  background:linear-gradient(100deg,#f8f4e7,#d9e8d8 58%,#b9d7c8);-webkit-background-clip:text;background-clip:text;color:transparent}
.night-city-welcome>p:last-child{color:#a5b8c1;font-size:11px;letter-spacing:.5px}
.night-city-meta{gap:9px;align-items:center}
.night-city-meta>span,.night-city-meta .night-wallet,.night-city-meta .night-fishing-limit,.night-city-meta .night-energy{
  border:1px solid #ffffff14;border-radius:999px;background:#0a17227d;padding:8px 13px;font-size:9.5px;
  letter-spacing:.3px;backdrop-filter:blur(4px);transition:border-color .2s,background .2s,transform .2s,color .2s}
.night-city-meta>span:hover{border-color:#9fd9c340;background:#12293a99;transform:translateY(-1px)}
.night-city-meta .night-wallet b,.night-city-meta .night-fishing-limit b{font-variant-numeric:tabular-nums}
.night-energy i{display:inline-block;width:6px;height:6px;border-radius:50%;background:#7fd6a6;box-shadow:0 0 9px #7fd6a6b0;margin-right:5px;vertical-align:1px}
.night-energy b{color:#9fe0bd}
.night-energy.is-low i{background:#e6a35c;box-shadow:0 0 9px #e6a35cb0}
.night-energy.is-low b{color:#f0bd85}
#locate-me{border:1px solid #ffffff1f;border-radius:999px;background:#12293a99;padding:8px 13px;color:#cfe0dd;font-size:9.5px;transition:.2s}
#locate-me:hover{background:#1b4152;color:#fff}
.night-map-layout{gap:14px}
.night-map{border-radius:16px;overflow:hidden;border:1px solid #ffffff12;box-shadow:inset 0 0 60px #00000059}
.landmark-panel{border-radius:16px;border:1px solid #ffffff12;background:linear-gradient(180deg,#132a3aeb,#0d1d2ae6);backdrop-filter:blur(6px);box-shadow:inset 0 1px 0 #ffffff0f,0 20px 44px -30px #000}
.landmark-panel-kicker span:first-child{letter-spacing:3px;color:#8fb3ad}
.landmark-task{border-radius:11px;transition:transform .16s,box-shadow .16s,border-color .16s,background .16s}
.landmark-task:hover{transform:translateY(-2px);box-shadow:0 14px 26px -18px #000}
.landmark-task.selected{border-color:#9fd9c366;box-shadow:0 0 0 1px #9fd9c333,0 14px 30px -20px #000}
.landmark-actions button,#checkin-landmark,#start-landmark-task{border-radius:9px;letter-spacing:.5px;transition:.18s}
.landmark-actions button:hover,#checkin-landmark:hover,#start-landmark-task:hover{filter:brightness(1.08);transform:translateY(-1px)}
.night-map-legend{border-radius:12px;border:1px solid #ffffff10;background:#0b1723b3}
.night-map-legend button{border:1px solid #ffffff1a;border-radius:999px;background:#12293a80;padding:7px 13px;color:#c8d7d8;font-size:9.5px;transition:.18s}
.night-map-legend button:hover{background:#1b4152;color:#fff;border-color:#9fd9c357}
.section-heading h2{font:600 21px var(--serif);letter-spacing:1.2px}
.section-heading p{color:#8b948a;letter-spacing:.3px}
.composer,.post-card,.side-card{border-radius:14px;box-shadow:0 16px 34px -30px #364436}
.post-card{transition:box-shadow .2s,transform .2s}
.post-card:hover{box-shadow:0 22px 44px -30px #364436;transform:translateY(-1px)}
.feed-tabs button{border-radius:999px;transition:.18s}
.feed-tabs button:hover{background:#eef0e7}
@media(max-width:800px){.night-city-card{border-radius:18px}.night-city-top{padding:20px 16px 14px}.night-greeting{font-size:22px}.night-city-meta{gap:6px}.night-city-meta>span,.night-city-meta .night-wallet,.night-city-meta .night-fishing-limit,.night-city-meta .night-energy{padding:6px 9px;font-size:8.5px}}

/* ===================== 玩法场景升级：钓鱼 / 种菜 ===================== */
.scene-subtitle{position:absolute;left:0;right:0;bottom:38px;text-align:center;color:#9fb6b6;font-size:9px;letter-spacing:1px}
.fishing-hint,.farming-hint{color:#cfe4cb;font-size:10px;letter-spacing:.8px;min-height:13px}
.fishing-copy b,.farming-copy b{text-shadow:0 3px 14px #000a}
.fishing-scene .fishing-line,.fishing-scene .fishing-bobber,.fishing-scene .fishing-catch,.fishing-scene .fishing-person em{transition:opacity .35s ease,transform .55s cubic-bezier(.34,1.3,.5,1)}
.fishing-scene[data-phase="ready"] .fishing-line,.fishing-scene[data-phase="ready"] .fishing-bobber,.fishing-scene[data-phase="ready"] .fishing-catch{opacity:0}
.fishing-scene[data-phase="cast"] .fishing-line,.fishing-scene[data-phase="cast"] .fishing-bobber{opacity:1}
.fishing-scene[data-phase="cast"] .fishing-person em{transform:rotate(30deg)}
.fishing-scene[data-phase="waiting"] .fishing-person em{transform:rotate(-16deg)}
.fishing-scene[data-phase="waiting"] .fishing-line{opacity:1}
.fishing-scene[data-phase="waiting"] .fishing-bobber{opacity:1;animation:bobberFloat 2.8s ease-in-out infinite}
.fishing-scene[data-phase="bite"] .fishing-bobber{opacity:1}
.fishing-scene[data-phase="bite"] .fishing-splash i{animation:splashRing .75s ease-out infinite}
.fishing-scene[data-phase="bite"] .fishing-splash i:nth-child(2){animation-delay:.25s}
.fishing-scene[data-phase="reel"] .fishing-person{transform:rotate(-6deg)}
.fishing-scene[data-phase="reel"] .fishing-bobber{animation:reelPull .5s ease-in-out infinite alternate}
.fishing-scene[data-phase="reel"] .fishing-splash i{animation:splashRing .9s ease-out infinite}
.fishing-scene[data-phase="landed"] .fishing-catch{opacity:1;transform:translateY(-46px) rotate(10deg) scale(1.18)}
.fishing-scene[data-phase="escape"] .fishing-line{transform:rotate(6deg);opacity:.4}
.fishing-scene[data-phase="escape"] .fishing-bobber{opacity:0}
.fishing-scene[data-phase="escape"] .fishing-stamp,.fishing-scene[data-phase="miss"] .fishing-stamp{opacity:1;transform:translate(-50%,-50%) scale(1) rotate(-8deg)}
.fishing-stamp{position:absolute;z-index:6;left:50%;top:33%;opacity:0;pointer-events:none;
  transform:translate(-50%,-50%) scale(1.7) rotate(-8deg);transition:opacity .3s ease,transform .35s cubic-bezier(.2,1.5,.4,1);
  font:700 30px var(--serif);letter-spacing:7px;color:#ef8b7c;text-shadow:0 4px 20px #000a,0 0 26px #ef8b7c55}
.fishing-shoot{position:absolute;left:10%;top:14%;width:70px;height:1px;opacity:0;transform:rotate(16deg);
  background:linear-gradient(90deg,#fff0,#ffffffd9,#fff0);animation:shootingStar 11s ease-in-out infinite}
.fishing-fish-shadow{position:absolute;width:34px;height:10px;border-radius:50% 50% 45% 45%/72% 72% 40% 40%;background:#04121a85;opacity:.55}
.shadow-one{left:10%;top:32%;animation:fishSwim 11s linear infinite}
.shadow-two{left:48%;top:60%;width:26px;animation:fishSwim 14s linear infinite 2.5s}
.shadow-three{left:74%;top:46%;width:46px;animation:fishSwim 17s linear infinite 5.5s}
.fishing-splash{position:absolute;left:57%;bottom:47%;width:44px;height:16px}
.fishing-splash i{position:absolute;inset:0;border:1px solid #d6f0e460;border-radius:50%;opacity:0}
.fishing-outcome.is-rare{border-color:#d9b77a99;box-shadow:0 8px 22px #0005,0 0 30px -6px #d9b77a66}
.fishing-outcome.is-legendary{border-color:#f0a06ab0;box-shadow:0 8px 22px #0005,0 0 38px -4px #f0a06a80}
@keyframes fishSwim{0%{transform:translateX(-26px) scaleX(1)}46%{transform:translateX(140px) scaleX(1)}50%{transform:translateX(140px) scaleX(-1)}96%{transform:translateX(-26px) scaleX(-1)}100%{transform:translateX(-26px) scaleX(1)}}
@keyframes bobberFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(5px)}}
@keyframes reelPull{to{transform:translateY(-7px)}}
@keyframes splashRing{0%{transform:scale(.35);opacity:.95}100%{transform:scale(2.6);opacity:0}}
@keyframes shootingStar{0%,90%{opacity:0;transform:translate(0,0) rotate(16deg)}92%{opacity:.9}100%{opacity:0;transform:translate(160px,48px) rotate(16deg)}}
.farming-seeds{position:absolute;left:50%;top:52%;width:60px;height:14px;margin-left:-30px}
.farming-seeds i{position:absolute;width:5px;height:5px;border-radius:50%;background:#c8b98a;opacity:0;box-shadow:0 0 6px #c8b98a80}
.farming-seeds i:nth-child(1){left:6px;top:6px}.farming-seeds i:nth-child(2){left:26px;top:2px}.farming-seeds i:nth-child(3){left:46px;top:7px}
.farming-scene[data-phase="seed"] .farming-seeds i{animation:seedDrop 1s ease-out}
.farming-scene[data-phase="seed"] .farming-seeds i:nth-child(2){animation-delay:.15s}
.farming-scene[data-phase="seed"] .farming-seeds i:nth-child(3){animation-delay:.3s}
.farming-sprout{transition:transform .8s cubic-bezier(.3,1.4,.5,1),opacity .5s ease}
.farming-scene[data-phase="ready"] .farming-sprout,.farming-scene[data-phase="till"] .farming-sprout{opacity:0;transform:scale(.35) translateY(6px)}
.farming-scene[data-phase="seed"] .farming-sprout{opacity:.55;transform:scale(.6) translateY(2px)}
.farming-scene[data-phase="grow"] .farming-sprout{opacity:1;transform:scale(1.35) translateY(-4px)}
.farming-scene[data-phase="care"] .farming-sprout{opacity:1;transform:scale(1.5) rotate(-5deg)}
.farming-scene[data-phase="ripe"] .farming-sprout{opacity:1;transform:scale(1.75) translateY(-6px)}
.farming-scene[data-phase="till"] .farming-field .soil-row{animation:soilTurn .55s ease-out}
.farming-scene[data-phase="till"] .farming-field .soil-row:nth-child(2){animation-delay:.12s}
.farming-scene[data-phase="till"] .farming-field .soil-row:nth-child(3){animation-delay:.24s}
@keyframes soilTurn{0%{transform:translateY(0) scaleX(1)}50%{transform:translateY(3px) scaleX(1.06)}100%{transform:translateY(0) scaleX(1)}}
@keyframes seedDrop{0%{opacity:0;transform:translateY(-16px)}60%{opacity:1}100%{opacity:.85;transform:translateY(0)}}

/* ===================== 社区灶台：菜谱与自由搭配 ===================== */
.kitchen-head .game-balance{margin-bottom:8px}
.kitchen-tabs{display:flex;gap:6px;margin:2px 0 14px;padding:4px;border:1px solid #2b3e4b;border-radius:11px;background:#0d1a25}
.kitchen-tabs button{flex:1;padding:9px;border:0;border-radius:8px;background:transparent;color:#9db0b7;font-size:10.5px;letter-spacing:.4px;transition:.18s}
.kitchen-tabs button.selected{background:#1d3441;color:#eaf3f1;box-shadow:inset 0 0 0 1px #3c5768}
.kitchen-pane[hidden]{display:none}
.kitchen-recipe{border-radius:10px}
.kitchen-recipe.is-cookable{border-color:#5f7f6b;box-shadow:inset 0 0 0 1px #5f7f6b4d}
.kitchen-ingredients{display:flex;gap:8px;flex-wrap:wrap}
.kitchen-ingredients span{color:#c7d3cf}
.kitchen-ingredients span.short{color:#e08a7c}
.kitchen-ingredients span.enough{color:#9ed3a8}
.kitchen-effect{color:#dcbe86}
.mix-pot{display:flex;flex-direction:column;align-items:center;gap:10px;padding:16px 12px;border:1px dashed #37515f;border-radius:14px;background:radial-gradient(120% 90% at 50% 0%,#162b3a,#0e1c27)}
.mix-pot-bowl{display:flex;flex-direction:column;align-items:center;line-height:1.2}
.mix-pot-emoji{font-size:44px;filter:drop-shadow(0 10px 14px #0008)}
.mix-pot-bowl b{font:600 20px var(--serif);color:#e8d6a6}
.mix-pot-bowl small{color:#8fa3aa;font-size:9px}
.mix-pot-list{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;min-height:26px}
.mix-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 8px;border:1px solid #3d5766;border-radius:999px;background:#16293a;color:#d7e4e2;font-size:9.5px}
.mix-chip b{color:#e4c98d}
.mix-chip button{width:16px;height:16px;padding:0;border:0;border-radius:50%;background:#2b4053;color:#cfdde0;font-size:11px;line-height:1}
.mix-empty{color:#7f949c;font-size:9.5px}
.mix-shelf{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:7px;margin:12px 0}
.mix-ingredient{display:flex;flex-direction:column;gap:3px;padding:9px;border:1px solid #2f4756;border-radius:9px;background:#14232f;color:#dbe6e4;text-align:left;transition:.16s}
.mix-ingredient:hover{border-color:#6f9c85;background:#1a2f39;transform:translateY(-1px)}
.mix-ingredient b{font-size:10.5px}
.mix-ingredient small{color:#8ba0a8;font-size:9px}
.mix-shelf .rarity,.night-wallet .rarity,.game-item-row .rarity{font-style:normal;color:#d9b77a;margin-right:5px;letter-spacing:1px;font-size:8px}
.rarity-3{color:#e0a86a}
.rarity-4{color:#ef9a72}
.mix-hint{margin:2px 0 10px;line-height:1.8}
.mix-actions{display:flex;gap:8px;justify-content:flex-end}
.mix-actions button{padding:9px 16px;border-radius:8px;font-size:10.5px}
.mix-actions #mix-cook{border:0;background:#758f68;color:#f7f5e8}
.mix-actions #mix-cook:disabled{opacity:.45;cursor:not-allowed}
@media(max-width:520px){.mix-shelf{grid-template-columns:repeat(auto-fill,minmax(92px,1fr))}.night-city-card{border-radius:16px}}

/* ===================== 街头乱逛 ===================== */
.stroll-scene{position:relative;min-height:280px;overflow:hidden;border:1px solid #2c4257;border-radius:12px;background:linear-gradient(#0c1a2a 0%,#14263a 52%,#101d29 53%,#0a141d 100%);isolation:isolate}
.stroll-sky{position:absolute;inset:0}
.stroll-moon{position:absolute;right:16%;top:14%;width:32px;height:32px;border-radius:50%;background:#f2e2b4;box-shadow:0 0 28px #f0dc9f77}
.stroll-star{position:absolute;color:#dfe3d3;opacity:.8}
.stroll-star.s1{left:14%;top:18%}.stroll-star.s2{left:42%;top:10%;font-size:18px}.stroll-star.s3{left:70%;top:22%}
.stroll-buildings{position:absolute;left:0;right:0;bottom:38%;height:44%;display:flex;align-items:flex-end;gap:6px;padding:0 8px}
.stroll-buildings i{flex:1;height:60%;border-radius:4px 4px 0 0;background:linear-gradient(#1b3145,#132434);box-shadow:inset 0 0 0 1px #ffffff08;position:relative}
.stroll-buildings i:nth-child(2){height:84%}.stroll-buildings i:nth-child(3){height:52%}.stroll-buildings i:nth-child(4){height:72%}.stroll-buildings i:nth-child(5){height:64%}
.stroll-buildings i:before{content:'';position:absolute;inset:12% 18%;background-image:radial-gradient(#e9d9a1 22%,transparent 24%);background-size:14px 18px;opacity:.5}
.stroll-street{position:absolute;left:0;right:0;bottom:0;height:40%;background:linear-gradient(#16283a,#0b1620);border-top:1px solid #ffffff12}
.stroll-street:after{content:'';position:absolute;left:0;right:0;top:46%;height:2px;background:repeating-linear-gradient(90deg,#e8dfb966 0 18px,transparent 18px 40px)}
.stroll-lamp{position:absolute;bottom:34%;width:2px;height:56px;background:#3f5a67}
.stroll-lamp:after{content:'';position:absolute;left:-7px;top:-8px;width:16px;height:10px;border-radius:4px;background:#f0d79a;box-shadow:0 0 22px #f0d79a99}
.lamp-one{left:16%}.lamp-two{right:18%}
.stroll-walker{position:absolute;bottom:12%;font-size:20px;filter:drop-shadow(0 6px 8px #0008)}
.walker-one{animation:strollWalk 12s linear infinite}
.walker-two{animation:strollWalk 17s linear infinite 3s}
.walker-three{bottom:26%;font-size:16px;opacity:.7;animation:strollWalk 21s linear infinite 7s}
.stroll-scene[data-phase="walk"] .stroll-walker{animation-duration:5s}
.stroll-copy{position:absolute;z-index:3;left:0;right:0;bottom:14px;display:flex;flex-direction:column;align-items:center;gap:5px;text-shadow:0 2px 10px #0009}
.stroll-copy b{color:#f0e7d2;font:600 14px var(--serif);letter-spacing:1px}
.stroll-copy span{color:#a9bcc6;font-size:9.5px}
.stroll-event{position:relative;z-index:4;display:flex;gap:12px;margin:14px 0 0;padding:14px;border:1px solid #ffffff1a;border-radius:12px;background:linear-gradient(140deg,#15293a,#101d29);box-shadow:0 16px 34px -26px #000}
.stroll-event[hidden]{display:none}
.stroll-event-icon{font-size:32px;line-height:1;filter:drop-shadow(0 6px 10px #0008)}
.stroll-event small{display:block;color:#8fb0a3;font-size:8.5px;letter-spacing:2px;margin-bottom:4px}
.stroll-event b{display:block;color:#f4ecd6;font:600 15px var(--serif);margin-bottom:6px}
.stroll-event p{margin:0 0 8px;color:#bfd0d4;font-size:11px;line-height:1.8}
.stroll-event em{font-style:normal;color:#dfc27c;font-size:9.5px}
.stroll-actions{display:flex;gap:8px;justify-content:flex-end;margin:14px 0 4px}
.stroll-actions #stroll-go{padding:10px 20px;border:0;border-radius:9px;background:#758f68;color:#f7f5e8;font-size:11px;letter-spacing:1px}
.stroll-actions #stroll-go:disabled{opacity:.55;cursor:wait}
@keyframes strollWalk{0%{left:-8%}100%{left:104%}}

/* ===================== 皓月学堂 ===================== */
.academy-section{margin:16px 0}
.academy-section h3{margin:0 0 10px;font:600 14px var(--serif);letter-spacing:1.5px;color:#dfe8e3}
.academy-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:9px}
.academy-card{display:flex;flex-direction:column;gap:7px;padding:13px;border:1px solid #2d4453;border-radius:12px;background:linear-gradient(160deg,#152634,#101d28);cursor:pointer;transition:.18s}
.academy-card:hover{transform:translateY(-2px);border-color:#6f9c85;box-shadow:0 18px 32px -24px #000}
.academy-card.is-passed{border-color:#8fae7b;box-shadow:inset 0 0 0 1px #8fae7b3d}
.academy-card-top{display:flex;align-items:center;justify-content:space-between;color:#8aa79c;font-size:8.5px}
.academy-badge{padding:2px 7px;border-radius:999px;background:#243b4a;color:#bfd6cf;letter-spacing:1px}
.academy-card b{color:#f2ebd8;font:600 14px var(--serif)}
.academy-card p{margin:0;color:#a7b9be;font-size:10px;line-height:1.7;flex:1}
.academy-card-foot{display:flex;flex-wrap:wrap;gap:8px;color:#8fa3aa;font-size:9px}
.academy-stars{color:#e6c77e;letter-spacing:2px;margin-left:auto}
.academy-records{display:flex;flex-wrap:wrap;gap:7px;margin:6px 0 12px}
.academy-records span{padding:5px 10px;border:1px solid #2f4756;border-radius:999px;background:#132330;color:#b9c9ce;font-size:9px}
.academy-lesson.is-learned{border-color:#4f6b58;background:#152a26}
.academy-fact{color:#d9bb85}
.academy-exam-entry{margin-top:14px;padding:14px;border:1px solid #2f4756;border-radius:12px;background:#0f1e2a;display:flex;flex-direction:column;gap:10px;align-items:flex-start}
.academy-exam-entry button{align-self:flex-end;padding:10px 22px;border:0;border-radius:9px;background:#c8a05a;color:#1d1508;font-size:11px;font-weight:700;letter-spacing:1px}
.exam-stage{display:flex;flex-direction:column;gap:12px}
.exam-hud{display:flex;align-items:center;gap:12px;color:#a9bcc6;font-size:10px}
.exam-hud b{color:#f0e4c4;font-variant-numeric:tabular-nums}
.exam-music{margin-left:auto;padding:5px 11px;border:1px solid #3d5766;border-radius:999px;background:#15293a;color:#cfe0dd;font-size:9px}
.exam-timer{height:5px;border-radius:999px;background:#1c2f3d;overflow:hidden}
.exam-timer i{display:block;height:100%;width:100%;background:linear-gradient(90deg,#7fd6a6,#e0c477);transition:width 15s linear}
.exam-card{padding:16px;border:1px solid #2d4756;border-radius:14px;background:linear-gradient(160deg,#142636,#0f1c27)}
.exam-prompt{margin:0 0 14px;color:#f4ecd9;font:600 15px/1.75 var(--serif);min-height:52px}
.exam-options{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.exam-options button{display:flex;align-items:center;gap:9px;padding:11px;border:1px solid #35505f;border-radius:10px;background:#16293a;color:#dbe7e5;text-align:left;font-size:10.5px;transition:.14s}
.exam-options button:hover:not(:disabled){border-color:#7fb39a;transform:translateY(-1px)}
.exam-options button b{display:grid;place-items:center;width:22px;height:22px;flex:0 0 22px;border-radius:50%;background:#243c4d;color:#f0e3bd;font-size:10px}
.exam-options button.is-correct{border-color:#6fc08f;background:#16321f;box-shadow:inset 0 0 0 1px #6fc08f}
.exam-options button.is-wrong{border-color:#c8746a;background:#33191a}
.exam-options button:disabled{cursor:default;opacity:.92}
.exam-flash{display:flex;align-items:center;gap:10px;padding:10px 13px;border-radius:10px;font-size:10.5px}
.exam-flash[hidden]{display:none}
.exam-flash.is-correct{background:#16321f;color:#a9e2be;border:1px solid #4f8a68}
.exam-flash.is-wrong{background:#33191a;color:#f0b2a8;border:1px solid #9d5b52}
.exam-flash b{font-size:12px}
.exam-result{display:flex;flex-direction:column;gap:10px;align-items:center;text-align:center}
.exam-rank{font:700 34px var(--serif);letter-spacing:6px;color:#f0d79a;text-shadow:0 6px 24px #0009}
.exam-stars{color:#e9cd84;font-size:24px;letter-spacing:6px}
.exam-score{margin:0;color:#cfe0dd;font-size:11px}
.exam-score b{color:#f2dfaa;font-size:16px}
.exam-review{width:100%;text-align:left;margin-top:6px}
.exam-review .game-item-row.is-correct{border-color:#4f7a5e}
.exam-review .game-item-row.is-wrong{border-color:#8a5148}
.exam-result-actions{display:flex;gap:8px;margin-top:6px}
.exam-result-actions #exam-again{padding:9px 18px;border:0;border-radius:8px;background:#758f68;color:#f7f5e8;font-size:10.5px}
@media(max-width:520px){.exam-options{grid-template-columns:1fr}.academy-grid{grid-template-columns:1fr}}

/* ===================== 皓月商城 / 皓月卖场 ===================== */
.moon-shop-tabs{display:flex;gap:6px;margin:0 0 14px;padding:4px;border:1px solid #2b3e4b;border-radius:11px;background:#0d1a25}
.moon-shop-tabs button{flex:1;padding:9px;border:0;border-radius:8px;background:transparent;color:#9db0b7;font-size:10.5px;letter-spacing:.4px;transition:.18s}
.moon-shop-tabs button.selected{background:#1d3441;color:#eaf3f1;box-shadow:inset 0 0 0 1px #3c5768}
.moon-shop-intro{margin:0 0 14px;color:#93a7ae;font-size:10px;line-height:1.75}
.moon-shop-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:11px}
.moon-shop-card{display:flex;flex-direction:column;overflow:hidden;border:1px solid #2d4352;border-radius:12px;background:linear-gradient(165deg,#152634,#101d28);transition:.18s}
.moon-shop-card:hover{transform:translateY(-2px);border-color:#6f9c85;box-shadow:0 18px 34px -24px #000}
.moon-shop-card.is-highlight{border-color:#a98c4d;box-shadow:inset 0 0 0 1px #a98c4d55}
.moon-shop-media{position:relative;height:104px;display:grid;place-items:center;background:radial-gradient(circle at 50% 30%,#20384a,#101b27 72%)}
.moon-shop-media img{width:100%;height:100%;object-fit:cover}
.moon-shop-placeholder{font-size:40px;filter:drop-shadow(0 8px 14px #0007)}
.moon-shop-ribbon{position:absolute;left:9px;top:9px;padding:3px 8px;border-radius:999px;background:#c8a05a;color:#221806;font-size:8.5px;letter-spacing:.5px}
.moon-shop-info{display:flex;flex-direction:column;gap:7px;padding:12px}
.moon-shop-title{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.moon-shop-title b{color:#f2ebd8;font:600 13px var(--serif)}
.moon-shop-title small{color:#8fa3aa;font-size:8.5px;white-space:nowrap}
.moon-shop-info p{margin:0;flex:1;color:#a7b9be;font-size:9.5px;line-height:1.7}
.moon-shop-foot{display:flex;align-items:center;justify-content:space-between;color:#8fa3aa;font-size:9px}
.moon-shop-price{color:#dfc27c;font-size:11px;font-weight:650}
.moon-shop-info button{padding:9px;border:0;border-radius:8px;background:#758f68;color:#f7f5e8;font-size:10px;letter-spacing:.5px}
.moon-shop-info button:disabled{border:1px solid #3d5260;background:#172634;color:#7f929a;cursor:not-allowed}
@media(max-width:520px){.moon-shop-grid{grid-template-columns:1fr}}

/* 底部玩法入口变多后，让图例自动换行，窄屏也不会挤在一起 */
.night-map-legend{height:auto;min-height:44px;flex-wrap:wrap;padding:9px 19px;gap:9px 12px}
@media(max-width:800px){.night-map-legend{padding:9px 12px}.night-map-legend button{margin-left:0}}

/* 地图加载失败时的提示与重试 */
.map-error-note{display:flex;flex-direction:column;align-items:center;gap:10px;max-width:320px;padding:18px;text-align:center}
.map-error-note b{color:#f2e2bd;font-size:13px}
.map-error-note span{color:#9fb2b8;font-size:10.5px;line-height:1.75}
.map-error-note button{padding:9px 20px;border:1px solid #6f9c85;border-radius:999px;background:#1b3a34;color:#e2f4e8;font-size:11px;cursor:pointer;transition:.18s}
.map-error-note button:hover{background:#245047}
.map-slow-hint{position:absolute;z-index:650;left:50%;bottom:36px;transform:translateX(-50%);display:flex;align-items:center;gap:10px;max-width:88%;padding:7px 12px;border:1px solid #3d5260;border-radius:999px;background:#0c1623e6;color:#c2d2d3;font-size:10px;box-shadow:0 8px 20px #040a11aa}
.map-slow-hint button{padding:4px 12px;border:1px solid #6f9c85;border-radius:999px;background:#1b3a34;color:#e2f4e8;font-size:10px;cursor:pointer;white-space:nowrap}
.map-slow-hint button:hover{background:#245047}

/* 天气徽标与白天/夜间地图外观 */
.night-weather{display:flex;align-items:center;gap:6px;padding:7px 10px;border:1px solid #314756;border-radius:6px;background:#142431;color:#d7e3e2;font-size:9px;cursor:pointer;white-space:nowrap;transition:.18s}
.night-weather b{color:#e6f0ee;font-weight:650}
.night-weather i{font-style:normal;color:#8fbca9}
.night-weather:hover{border-color:#4d6b7a;background:#1a2f3f}
.night-map.map-mode-day{background:#e6edee}
.night-map.map-mode-day .night-map-canvas{background:#e6edee}
.night-map.map-mode-day .map-loading-overlay{background:#e6edee;color:#4c5f66}
.night-map.map-mode-day .map-scale{background:#ffffffd9;color:#5a6a70}

/* ===================== 地图日夜跟随：白天整套浅色皮肤 ===================== */
.night-city-card.map-mode-day{border-color:#dbe3d8;
  background:
    radial-gradient(880px 420px at 82% -24%, #ffe0ad59 0%, transparent 62%),
    radial-gradient(640px 340px at 2% 114%, #c3e0cfa6 0%, transparent 60%),
    linear-gradient(160deg,#fdfcf6 0%,#f2f6ee 46%,#fbf9f2 100%);
  box-shadow:0 40px 90px -44px #6d7f6e99, inset 0 1px 0 #fff}
.night-city-card.map-mode-day:after{background:radial-gradient(125% 95% at 50% 128%, #0000 58%, #7f918026 100%)}
.night-city-card.map-mode-day .night-city-top{background:radial-gradient(760px 260px at 88% -40%, #ffe4b56b 0, transparent 58%),linear-gradient(110deg,#fdfcf7,#f4f8f0)}
.night-city-card.map-mode-day .night-city-welcome .eyebrow{color:#5d8a70}
.night-city-card.map-mode-day .night-greeting{background:linear-gradient(100deg,#2b4034,#3c6a50 58%,#6f9269);-webkit-background-clip:text;background-clip:text;color:transparent}
.night-city-card.map-mode-day .night-city-welcome>p:last-child{color:#5e6e68}
.night-city-card.map-mode-day .night-city-meta{color:#6b7b75}
.night-city-card.map-mode-day .night-city-meta>span,
.night-city-card.map-mode-day .night-city-meta .night-wallet,
.night-city-card.map-mode-day .night-city-meta .night-fishing-limit,
.night-city-card.map-mode-day .night-city-meta .night-energy{border-color:#00000012;background:#ffffffb8;color:#4f5f59;box-shadow:0 8px 20px -16px #40563f80}
.night-city-card.map-mode-day .night-city-meta>span:hover{border-color:#7fae9366;background:#fff;transform:translateY(-1px)}
.night-city-card.map-mode-day .night-city-name{color:#2f453a}
.night-city-card.map-mode-day .night-city-name i{background:#4fa87a;box-shadow:0 0 9px #4fa87a99}
.night-city-card.map-mode-day .night-city-meta b{color:#2f6b52}
.night-city-card.map-mode-day .night-energy i{background:#4fa87a;box-shadow:0 0 9px #4fa87a99}
.night-city-card.map-mode-day .night-energy.is-low i{background:#d9964c;box-shadow:0 0 9px #d9964c99}
.night-city-card.map-mode-day .night-energy.is-low b{color:#b8762f}
.night-city-card.map-mode-day #locate-me{border-color:#00000015;background:#ffffffe6;color:#3c5347}
.night-city-card.map-mode-day #locate-me:hover{background:#fff;color:#243d31}
.night-city-card.map-mode-day .night-weather{border-color:#00000015;background:#ffffffe6;color:#3c5347}
.night-city-card.map-mode-day .night-weather b{color:#2f6b52}
.night-city-card.map-mode-day .night-weather i{color:#6d8a79}
.night-city-card.map-mode-day .night-weather:hover{border-color:#7fae9366;background:#fff}
.night-city-card.map-mode-day .night-map-layout{background:#edf1e9}
.night-city-card.map-mode-day .night-map{border-color:#00000012;box-shadow:inset 0 0 60px #6b7a6a14}
.night-city-card.map-mode-day .map-scale{color:#5a6a70}
.night-city-card.map-mode-day .map-slow-hint{background:#ffffffee;color:#4c5f66;border-color:#00000014}
.night-city-card.map-mode-day .map-slow-hint button{border-color:#0000001a;background:#eef3ec;color:#3c5347}
.night-city-card.map-mode-day .map-empty-note{background:#ffffffee;color:#4c5f66;border-color:#00000014}
.night-city-card.map-mode-day .map-empty-note small{color:#6d7d77}
.night-city-card.map-mode-day .landmark-panel{border-color:#00000010;background:linear-gradient(180deg,#ffffffee,#f3f7f1eb);box-shadow:inset 0 1px 0 #fff,0 22px 46px -38px #4a5c4a80;color:#3b4a44}
.night-city-card.map-mode-day .landmark-panel-kicker{color:#6f8a80}
.night-city-card.map-mode-day .landmark-panel-kicker span:first-child{color:#5d8a70}
.night-city-card.map-mode-day .place-live{color:#43856a}
.night-city-card.map-mode-day .place-live i{background:#4fa87a;box-shadow:0 0 9px #4fa87a99}
.night-city-card.map-mode-day .landmark-region{color:#71827b}
.night-city-card.map-mode-day .landmark-panel h2{color:#2b3b33}
.night-city-card.map-mode-day .landmark-description{color:#5f6f68}
.night-city-card.map-mode-day .landmark-community-note{background:#f2f4ea;color:#8a6f34}
.night-city-card.map-mode-day .landmark-community-note span{color:#6b7b74}
.night-city-card.map-mode-day .landmark-task-title{color:#33443b}
.night-city-card.map-mode-day .landmark-task-title small{color:#77877f}
.night-city-card.map-mode-day .landmark-task{border-color:#dde5da;background:#f7faf4;color:#2f4038}
.night-city-card.map-mode-day .landmark-task:hover,
.night-city-card.map-mode-day .landmark-task.selected{border-color:#a9c7af;background:#eef4ea}
.night-city-card.map-mode-day .landmark-task small{color:#6f8078}
.night-city-card.map-mode-day .task-arrow{color:#6f9a80}
.night-city-card.map-mode-day .landmark-panel-footer>span{color:#71827b}
.night-city-card.map-mode-day .landmark-panel-footer button{background:#3f7d5c;color:#f4fbf5}
.night-city-card.map-mode-day .no-landmark-task{color:#71827b}
.night-city-card.map-mode-day .night-map-legend{border-color:#00000010;background:#ffffffc2;color:#5d6e67}
.night-city-card.map-mode-day .night-map-legend>span{color:#5d6e67}
.night-city-card.map-mode-day .night-map-legend button{border-color:#00000014;background:#f3f7f1;color:#3f5548}
.night-city-card.map-mode-day .night-map-legend button:hover{background:#e8f0e6;color:#243d31;border-color:#8fb79b}
.night-city-card.map-mode-day .legend-glow{background:#4fa87a;box-shadow:0 0 8px #4fa87a99}

/* 顶部信息条：整颗药丸不折行，放不下时整体换行，避免文字被挤断 */
.night-city-meta{flex-wrap:wrap;justify-content:flex-end;row-gap:7px;max-width:860px}
.night-city-meta>span,.night-city-meta .night-wallet,.night-city-meta .night-fishing-limit,.night-city-meta .night-energy{white-space:nowrap}
.night-city-meta .night-wallet,.night-city-meta .night-fishing-limit,.night-city-meta .night-energy,.night-city-meta>span{line-height:1.2}
@media(max-width:1180px){.night-city-top{flex-direction:column;align-items:flex-start;gap:14px}.night-city-meta{max-width:100%;justify-content:flex-start}}

/* 没有 WebGL 的浏览器：高德底图样式失效，夜间用滤镜压暗（只作用于底图图层，标记不受影响） */
.night-map.map-mode-night.map-no-webgl .amap-layers{filter:invert(1) hue-rotate(185deg) brightness(.9) saturate(.85)}
.night-map.map-mode-night.map-no-webgl{background:#0d1a26}

/* =======================================================================
   小游戏弹窗改版：白天浅色皮肤 / 更大的舞台 / 不再互相遮挡 / 用户点击开局
   ======================================================================= */

/* ---- 1. 弹窗尺寸：小游戏用宽屏，舞台上大图 ---- */
.game-dialog.game-dialog-wide{width:min(960px,calc(100vw - 26px));max-height:min(95vh,920px)}
.game-dialog.game-dialog-wide .game-dialog-body{max-height:calc(95vh - 74px);padding:14px 16px 16px}

/* ---- 2. 白天浅色皮肤（跟随首页的时间/天气皮肤）---- */
.game-dialog.game-dialog-day{border-color:#dfe7dc;background:#fcfcf8;color:#2d3a33;box-shadow:0 24px 80px #2b3a331f}
.game-dialog.game-dialog-day::backdrop{background:#8fa08e3d}
.game-dialog.game-dialog-day .game-dialog-head{border-bottom-color:#e7ede4}
.game-dialog.game-dialog-day .game-dialog-head .eyebrow{color:#6f8a80}
.game-dialog.game-dialog-day .game-dialog-head h2{color:#26382f}
.game-dialog.game-dialog-day .game-dialog-head>button{border-color:#d8e2d5;background:#f2f7ef;color:#4e6459}
.game-dialog.game-dialog-day .game-balance{color:#5d6f67}
.game-dialog.game-dialog-day .game-balance b{color:#8a6f34}
.game-dialog.game-dialog-day .game-item-row{border-color:#e3eae0;background:#f7faf4}
.game-dialog.game-dialog-day .game-item-row small{color:#6f8078}
.game-dialog.game-dialog-day .game-item-row>span{color:#8a6f34}
.game-dialog.game-dialog-day .game-item-row button{background:#3f7d5c;color:#f4fbf5}
.game-dialog.game-dialog-day .game-item-row button.secondary-game-button{border-color:#cddbd1;background:#eff5ec;color:#3f5548}
.game-dialog.game-dialog-day .game-empty{color:#6f8078}
.game-dialog.game-dialog-day .mix-pot{border-color:#cfdccc;background:radial-gradient(120% 90% at 50% 0%,#f1f7ee,#e6efe4)}
.game-dialog.game-dialog-day .mix-pot-bowl b{color:#8a6f34}
.game-dialog.game-dialog-day .mix-pot-bowl small{color:#6f8078}
.game-dialog.game-dialog-day .mix-chip{border-color:#d9e3d6;background:#f2f7ef;color:#3c4c44}
.game-dialog.game-dialog-day .mix-chip b{color:#8a6f34}
.game-dialog.game-dialog-day .mix-chip button{background:#e2eae0;color:#4c5f56}
.game-dialog.game-dialog-day .mix-empty{color:#6f8078}
.game-dialog.game-dialog-day .mix-ingredient{border-color:#e0e8dd;background:#f7faf4;color:#33423a}
.game-dialog.game-dialog-day .mix-ingredient:hover{border-color:#a9c7af;background:#eef4ea}
.game-dialog.game-dialog-day .mix-ingredient small{color:#6f8078}
.game-dialog.game-dialog-day .academy-section h3{color:#2c3d34}
.game-dialog.game-dialog-day .academy-card{border-color:#e0e8dd;background:linear-gradient(160deg,#fbfdf9,#f2f7ef)}
.game-dialog.game-dialog-day .academy-card b{color:#2b3b33}
.game-dialog.game-dialog-day .academy-card p{color:#5f6f68}
.game-dialog.game-dialog-day .academy-card-top,.game-dialog.game-dialog-day .academy-card-foot{color:#6f8078}
.game-dialog.game-dialog-day .academy-badge{background:#e6efe3;color:#43604f}
.game-dialog.game-dialog-day .academy-records span{border-color:#dde5da;background:#f4f8f1;color:#4c5f56}
.game-dialog.game-dialog-day .academy-lesson.is-learned{border-color:#b9d0bc;background:#eef5ea}
.game-dialog.game-dialog-day .academy-fact{color:#8a6f34}
.game-dialog.game-dialog-day .academy-exam-entry{border-color:#e0e8dd;background:#f7faf4}
.game-dialog.game-dialog-day .moon-shop-tabs{border-color:#e2e9df;background:#f1f6ef}
.game-dialog.game-dialog-day .moon-shop-tabs button{color:#5f6f68}
.game-dialog.game-dialog-day .moon-shop-tabs button.selected{background:#fff;color:#26382f;box-shadow:inset 0 0 0 1px #cfe0d2}
.game-dialog.game-dialog-day .moon-shop-intro{color:#5d6f67}
.game-dialog.game-dialog-day .moon-shop-card{border-color:#e2e9df;background:linear-gradient(165deg,#fbfdf9,#f2f7ef)}
.game-dialog.game-dialog-day .moon-shop-media{background:radial-gradient(circle at 50% 30%,#eef5ec,#e2ece2 72%)}
.game-dialog.game-dialog-day .moon-shop-title b{color:#2b3b33}
.game-dialog.game-dialog-day .moon-shop-title small,.game-dialog.game-dialog-day .moon-shop-foot{color:#6f8078}
.game-dialog.game-dialog-day .moon-shop-info p{color:#5f6f68}
.game-dialog.game-dialog-day .moon-shop-price{color:#8a6f34}
.game-dialog.game-dialog-day .moon-shop-info button:disabled{border-color:#dde5da;background:#eef3ec;color:#8a9a92}
.game-dialog.game-dialog-day .stroll-event{border-color:#e2e9df;background:linear-gradient(140deg,#fbfdf9,#f1f6ef)}
.game-dialog.game-dialog-day .stroll-event b{color:#2b3b33}
.game-dialog.game-dialog-day .stroll-event p{color:#55655e}
.game-dialog.game-dialog-day .stroll-event em{color:#8a6f34}
.game-dialog.game-dialog-day .stroll-event small{color:#4f8568}
.game-dialog.game-dialog-day .stroll-actions #stroll-go,.game-dialog.game-dialog-day .mix-actions #mix-cook,.game-dialog.game-dialog-day .moon-shop-info button{background:#3f7d5c;color:#f4fbf5}
.game-dialog.game-dialog-day .landmark-community-note{background:#f4f6ea}
.game-dialog.game-dialog-day .game-suggestion-form input,.game-dialog.game-dialog-day .game-suggestion-form textarea,
.game-dialog.game-dialog-day .suggestion-coordinate-row input{border-color:#dde5da;background:#fff;color:#2d3a33}
.game-dialog.game-dialog-day .suggestion-coord-hint{color:#6f8078}

/* ---- 3. 舞台：把动画放大，底部信息收进一条 HUD，不再互相压字 ---- */
.fishing-scene,.farming-scene{display:flex;flex-direction:column;min-height:0;height:auto}
.scene-stage{position:relative;height:clamp(300px,46vh,470px);min-height:0;overflow:hidden;border-radius:9px;--scene-play-band:0px}
.scene-stage:has(> .scene-play:not([hidden])){--scene-play-band:104px}
.scene-stage:has(> .scene-play:not([hidden])) > .scene-hud{padding-top:14px}
.scene-tools{border-top:1px solid #2b4350}
.scene-subtitle{left:14px;right:auto;top:12px;bottom:auto;padding:4px 10px;border-radius:999px;
  background:#04101ac2;color:#dbe8e4;font-size:9.5px;letter-spacing:.6px;text-align:left}
.scene-hud{position:absolute;z-index:5;left:0;right:0;bottom:0;display:flex;flex-direction:column;gap:8px;
  padding:22px 18px calc(12px + var(--scene-play-band,0px));background:linear-gradient(transparent,#061019e6 46%,#061019f2)}
.fishing-copy,.farming-copy{position:static;left:auto;right:auto;bottom:auto;align-items:flex-start;gap:3px;text-align:left}
.fishing-copy b,.farming-copy b{font-size:15px;line-height:1.35}
.fishing-copy span,.farming-copy span{font-size:10px}
.fishing-hint,.farming-hint{min-height:14px}
.fishing-meter,.farming-meter{position:static;left:auto;right:auto;bottom:auto;height:4px;border-radius:2px}
.fishing-outcome,.farming-outcome{position:absolute;z-index:9;left:50%;top:46%;transform:translate(-50%,-50%);
  margin:0;max-width:min(92%,540px);padding:14px 18px;border-radius:12px;background:#0a1822f2;box-shadow:0 18px 40px #0007;backdrop-filter:blur(4px)}
.fishing-outcome b,.farming-outcome b{font-size:14px}
.fishing-outcome small,.farming-outcome small{font-size:10px;line-height:1.6}
.scene-play{z-index:9;top:auto;bottom:12px;transform:translateX(-50%);width:min(420px,92%);padding:9px 11px;gap:7px}
.fishing-stamp{top:26%}

/* ---- 4. 开局面板：等用户自己按下开始 ---- */
.scene-start{position:absolute;z-index:12;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:10px;padding:20px;text-align:center;background:#04101ac9;backdrop-filter:blur(3px)}
.scene-start[hidden]{display:none}
.scene-start b{color:#f4ecda;font:600 22px var(--serif);letter-spacing:1.5px}
.scene-start small{color:#a9c0bb;font-size:11px}
.scene-start button{margin-top:6px;padding:12px 34px;border:0;border-radius:999px;background:#c8a05a;color:#1d1508;
  font-size:14px;font-weight:700;letter-spacing:2px;box-shadow:0 14px 30px -12px #c8a05a99;transition:.18s}
.scene-start button:hover{transform:translateY(-1px);background:#d6ae63}

/* ---- 5. 白天场景配色：不再一律是黑夜 ---- */
.fishing-scene.day-scene{border-color:#aacdd7;background:linear-gradient(#bfe4f4 0%,#dcf0f8 57%,#8fcbd9 58%,#54a8bd 100%)}
.fishing-scene.day-scene .fishing-sky{background:radial-gradient(ellipse at 74% 108%,#ffe08a5c,transparent 52%)}
.fishing-scene.day-scene .fishing-moon{background:#ffd76b;box-shadow:0 0 32px #ffd76b8f}
.fishing-scene.day-scene .fishing-star,.fishing-scene.day-scene .fishing-shoot{opacity:0}
.fishing-scene.day-scene .fishing-shore{background:linear-gradient(170deg,#93bd72,#5f8f4e 70%)}
.fishing-scene.day-scene .fishing-water{background:repeating-linear-gradient(174deg,transparent 0 19px,#ffffff30 20px,#ffffff14 22px,transparent 24px 39px),linear-gradient(#7cc6d8,#3f8fa8)}
.fishing-scene.day-scene .fishing-person i{background:#f2d6b8}
.fishing-scene.day-scene .fishing-person b{background:#3f6f9c}
.fishing-scene.day-scene .fishing-ripple{border-top-color:#ffffff96}
.fishing-scene.day-scene .fishing-stamp{color:#08333f}
.fishing-scene.day-scene .scene-backdrop img{opacity:.72}
.fishing-scene.day-scene .scene-photo-veil{background:linear-gradient(180deg,#ffffff5c,#eef7fb2e 42%,#06101912)}
.farming-scene.day-scene{border-color:#b6d3ae;background:linear-gradient(#bfe6f6,#dff0e2 58%,#cfe3bf)}
.farming-scene.day-scene .farming-sky{background:radial-gradient(ellipse at 82% 12%,#ffe9a566 0,transparent 55%)}
.farming-scene.day-scene .farming-sun{background:radial-gradient(#fff8d6,#ffcf5e);box-shadow:0 0 62px #ffd76b70}
.farming-scene.day-scene .farming-field{background:linear-gradient(#8fbe6c,#5f8f4a)}
.farming-scene.day-scene .soil-row{background:linear-gradient(#6b4b31,#4d3624);box-shadow:0 7px 0 #3a29190070}
.farming-scene.day-scene .farming-cloud{background:#ffffffcc;box-shadow:26px 6px 0 -3px #ffffffb8}
.farming-scene.day-scene .farming-leaf{background:#4f8a3d}
.farming-scene.day-scene .scene-backdrop img{opacity:.72}
.farming-scene.day-scene .scene-photo-veil{background:linear-gradient(180deg,#ffffff5c,#eef7fb2e 42%,#06101912)}
.stroll-scene.day-scene{border-color:#c6d5dd;background:linear-gradient(#cfe8f6 0%,#e3f0f6 52%,#dbe7d8 53%,#c3d5bd 100%)}
.stroll-scene.day-scene .stroll-moon{background:#ffd76b;box-shadow:0 0 30px #ffd76b8f}
.stroll-scene.day-scene .stroll-star{opacity:0}
.stroll-scene.day-scene .stroll-buildings i{background:linear-gradient(#cbd9e6,#aabecd)}
.stroll-scene.day-scene .stroll-street{background:linear-gradient(#c9d2cd,#a9b3ac);border-top-color:#ffffff88}
.stroll-scene.day-scene .stroll-lamp:after{background:#ffe9a8;box-shadow:0 0 18px #ffe9a866}

/* ---- 5b. 白天场景：开局面板 / HUD / 工具条也一起变亮，文字不再压暗 ---- */
.game-dialog.game-dialog-day .scene-start{background:#f4f8f1cc;backdrop-filter:blur(3px)}
.game-dialog.game-dialog-day .scene-start b{color:#26382f}
.game-dialog.game-dialog-day .scene-start small{color:#5f7a6f}
.game-dialog.game-dialog-day .scene-start button{background:#3f7d5c;color:#f4fbf5;box-shadow:0 14px 30px -14px #3f7d5c99}
.game-dialog.game-dialog-day .scene-start button:hover{background:#4b8f6a}
.game-dialog.game-dialog-day .scene-hud{background:linear-gradient(transparent,#fffffff0 34%,#ffffff 58%)}
.game-dialog.game-dialog-day .fishing-copy b,.game-dialog.game-dialog-day .farming-copy b{color:#233a30}
.game-dialog.game-dialog-day .fishing-copy span,.game-dialog.game-dialog-day .farming-copy span{color:#5b7a6c}
.game-dialog.game-dialog-day .fishing-meter,.game-dialog.game-dialog-day .farming-meter{background:#2e4a3f26}
.game-dialog.game-dialog-day .fishing-outcome,.game-dialog.game-dialog-day .farming-outcome{border-color:#cfe0d2;background:#fffffff2;box-shadow:0 18px 40px #2b3a3322}
.game-dialog.game-dialog-day .fishing-outcome b,.game-dialog.game-dialog-day .farming-outcome b{color:#7a5f22}
.game-dialog.game-dialog-day .fishing-outcome small,.game-dialog.game-dialog-day .farming-outcome small{color:#5f7a6f}
.game-dialog.game-dialog-day .scene-play{border-color:#dbe6d8;background:#fffffff0;box-shadow:0 12px 30px #2b3a331a}
.game-dialog.game-dialog-day .scene-choice{color:#3f5548}
.game-dialog.game-dialog-day .rhythm-track{background:#2e4a3f26}
.game-dialog.game-dialog-day .scene-tools{border-top-color:#e3eae0;background:#f7faf4}
.game-dialog.game-dialog-day .scene-credit{color:#6f8078}
.game-dialog.game-dialog-day .scene-source-note{color:#3f8568}
.game-dialog.game-dialog-day .scene-upload{border-color:#cddbd1;background:#eff5ec;color:#3f5548}
.game-dialog.game-dialog-day .scene-subtitle{background:#ffffffdc;color:#33513f}
.game-dialog.game-dialog-day .fishing-stamp{color:#2a4a3c}

/* ---- 5c. 舞台再放大一档；未开始时先收起底部信息，避免和开局面板叠字 ---- */
/* 舞台跟随窗口高度伸缩；展开「玩法说明」时再按可用高度撑开，说明卡不会被切掉 */
.scene-stage{height:clamp(330px,56vh,620px)}
.scene-stage:has(> .scene-intro:not([hidden])){height:min(calc(92vh - 158px),660px)}
.scene-hud{transition:opacity .35s ease}
.fishing-scene[data-phase="ready"] .scene-hud,.farming-scene[data-phase="ready"] .scene-hud{opacity:0}
/* 结算时把底部状态条淡出，避免和结算面板叠字 */
.fishing-scene[data-phase="result"] .scene-hud,.fishing-scene[data-phase="miss"] .scene-hud,
.farming-scene[data-phase="result"] .scene-hud,.farming-scene[data-phase="miss"] .scene-hud,
.ringtoss-scene[data-phase="result"] .scene-hud,.ringtoss-scene[data-phase="miss"] .scene-hud,
.shuttlecock-scene[data-phase="result"] .scene-hud,.shuttlecock-scene[data-phase="miss"] .scene-hud,
.hopscotch-scene[data-phase="result"] .scene-hud,.hopscotch-scene[data-phase="miss"] .scene-hud{opacity:0}
.scene-subtitle{z-index:13}
.stroll-scene{min-height:clamp(300px,44vh,430px)}

/* ---- 5d. 街头乱逛：白天配色下的文字与街景 ---- */
.game-dialog.game-dialog-day .stroll-copy{text-shadow:none}
.game-dialog.game-dialog-day .stroll-copy b{color:#26382f}
.game-dialog.game-dialog-day .stroll-copy span{color:#5b7a6c}
.game-dialog.game-dialog-day .stroll-buildings i:before{opacity:.32}
.game-dialog.game-dialog-day .stroll-street:after{background:repeating-linear-gradient(90deg,#ffffffb0 0 18px,transparent 18px 40px)}
.game-dialog.game-dialog-day .stroll-walker{filter:drop-shadow(0 6px 8px #2b3a3333)}

/* ---- 5e. 皓月学堂考试：白天浅色皮肤 ---- */
.game-dialog.game-dialog-day .exam-hud{color:#5f7a6f}
.game-dialog.game-dialog-day .exam-hud b{color:#7a5f22}
.game-dialog.game-dialog-day .exam-music{border-color:#d8e2d5;background:#eef4ea;color:#3f5548}
.game-dialog.game-dialog-day .exam-timer{background:#e2eae0}
.game-dialog.game-dialog-day .exam-card{border-color:#e0e8dd;background:linear-gradient(160deg,#fbfdf9,#f2f7ef)}
.game-dialog.game-dialog-day .exam-prompt{color:#26382f}
.game-dialog.game-dialog-day .exam-options button{border-color:#dde5da;background:#f7faf4;color:#33423a}
.game-dialog.game-dialog-day .exam-options button:hover:not(:disabled){border-color:#a9c7af;background:#eef4ea}
.game-dialog.game-dialog-day .exam-options button b{background:#e6efe3;color:#7a5f22}
.game-dialog.game-dialog-day .exam-options button.is-correct{border-color:#6fc08f;background:#e6f4ea;box-shadow:inset 0 0 0 1px #6fc08f}
.game-dialog.game-dialog-day .exam-options button.is-wrong{border-color:#d59a90;background:#fbeaea}
.game-dialog.game-dialog-day .exam-flash.is-correct{background:#e6f4ea;color:#2f6b4b;border-color:#8fc7a5}
.game-dialog.game-dialog-day .exam-flash.is-wrong{background:#fbeaea;color:#8f463c;border-color:#d59a90}
.game-dialog.game-dialog-day .exam-rank{color:#a9762a;text-shadow:none}
.game-dialog.game-dialog-day .exam-stars{color:#e0a12f}
.game-dialog.game-dialog-day .exam-score{color:#5f6f68}
.game-dialog.game-dialog-day .exam-score b{color:#8a6f34}
.game-dialog.game-dialog-day .exam-review .game-item-row.is-correct{border-color:#a9c7af}
.game-dialog.game-dialog-day .exam-review .game-item-row.is-wrong{border-color:#d59a90}
.game-dialog.game-dialog-day .exam-result-actions #exam-again{background:#3f7d5c;color:#f4fbf5}

/* ---- 5f. 白天场景：天空自己发亮，不再透出夜间底色 ---- */
.fishing-scene.day-scene .scene-backdrop{background:transparent}
.fishing-scene.day-scene .fishing-sky{background:radial-gradient(ellipse at 74% 108%,#ffe08a5c,transparent 52%),linear-gradient(180deg,#bfe4f4,#d9eff8 82%,#e6f5fa)}
.farming-scene.day-scene .scene-backdrop{background:transparent}
.farming-scene.day-scene .farming-sky{background:radial-gradient(ellipse at 82% 12%,#ffe9a566 0,transparent 55%),linear-gradient(180deg,#bfe6f6,#dff0e2)}
.stroll-scene.day-scene .stroll-sky{background:linear-gradient(180deg,#cfe8f6,#e3f0f6)}

/* ---- 5g. 社区灶台切换页签：白天浅色 ---- */
.game-dialog.game-dialog-day .kitchen-tabs{border-color:#e2e9df;background:#f1f6ef}
.game-dialog.game-dialog-day .kitchen-tabs button{color:#5f6f68}
.game-dialog.game-dialog-day .kitchen-tabs button.selected{background:#fff;color:#26382f;box-shadow:inset 0 0 0 1px #cfe0d2}

/* ---- 6. 窄屏兜底 ---- */
@media(max-width:680px){
  .game-dialog.game-dialog-wide{width:calc(100vw - 16px)}
  .scene-stage{height:clamp(240px,42vh,340px)}
  .scene-stage:has(> .scene-intro:not([hidden])){height:min(88vh,520px)}
  .fishing-copy b,.farming-copy b{font-size:13px}
  .scene-start b{font-size:17px}
  .scene-start button{padding:10px 24px;font-size:12px}
  /* 窄屏：操作条改成压在顶部（那里只有天空/墙面），底部留给状态字和进度条，
     中间的游戏画面留出尽可能多的空间 */
  .scene-play{top:8px;bottom:auto;width:min(360px,94%)}
  .scene-stage:has(> .scene-play:not([hidden])){height:clamp(300px,56vh,430px);--scene-play-band:34px}
  .scene-stage:has(> .scene-play:not([hidden])) > .scene-hud{padding-top:22px}
  .scene-stage:has(> .scene-play:not([hidden])) .scene-subtitle{display:none}
  .scene-stage:has(> .scene-play:not([hidden])) .scene-progress{top:auto;bottom:6px;left:14px;right:14px;max-width:none}
}

/* =======================================================================
   提交城市地标：地图悬浮提示 / 表单排版 / 预览小地图
   ======================================================================= */
.map-suggest-hint{position:absolute;z-index:6;left:12px;top:12px;padding:6px 12px;border:1px solid #ffffff33;
  border-radius:999px;background:#0c1a24e0;color:#e8f0ec;font-size:10px;letter-spacing:.4px;cursor:pointer;
  box-shadow:0 8px 20px -10px #000c;backdrop-filter:blur(3px);transition:background .18s,transform .18s}
.map-suggest-hint[hidden]{display:none}
.map-suggest-hint:hover{background:#12303c;transform:translateY(-1px)}
.night-city-card.map-mode-day .map-suggest-hint{border-color:#00000014;background:#ffffffe8;color:#2f4a3d;box-shadow:0 8px 20px -10px #2b3a3340}
.night-city-card.map-mode-day .map-suggest-hint:hover{background:#fff}

.suggestion-lead{margin:0 0 14px;color:#9bb0b6;font-size:11px;line-height:1.8}
.game-dialog.game-dialog-day .suggestion-lead{color:#5d6f67}
.game-suggestion-form{display:flex;flex-direction:column;gap:11px}
.suggestion-field{display:flex;flex-direction:column;gap:6px;color:#93a7ae;font-size:10px}
.game-dialog.game-dialog-day .suggestion-field{color:#5f7a6f}
.suggestion-field span{letter-spacing:.6px}
.suggestion-field input,.suggestion-field textarea{width:100%;box-sizing:border-box;padding:10px 12px;border:1px solid #35505f;border-radius:8px;
  background:#16293a;color:#e3eceb;font:12px/1.6 var(--sans);outline:none;transition:border-color .16s,box-shadow .16s}
.suggestion-field textarea{min-height:74px;resize:vertical}
.suggestion-field input:focus,.suggestion-field textarea:focus{border-color:#7fb39a;box-shadow:0 0 0 3px #7fb39a26}
.suggestion-coordinate-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.suggestion-map-card{margin-top:2px;overflow:hidden;border:1px solid #2d4352;border-radius:12px;background:#0e1c27}
.game-dialog.game-dialog-day .suggestion-map-card{border-color:#e2e9df;background:#f4f8f1}
.suggestion-mini-map{width:100%;height:190px}
.suggestion-map-fallback{margin:0;padding:30px 14px;text-align:center;color:#93a7ae;font-size:10px;line-height:1.8}
.suggestion-map-note{margin:0;padding:8px 12px;border-top:1px solid #2d4352;color:#8fa3aa;font-size:9px;line-height:1.6}
.game-dialog.game-dialog-day .suggestion-map-note{border-top-color:#e2e9df;color:#6f8078}
.suggestion-actions{display:flex;gap:9px;justify-content:flex-end;margin-top:2px}
.suggestion-actions .secondary-game-button{padding:10px 16px;border:1px solid #526679;border-radius:8px;background:#1b2b38;color:#b9c7cc;font-size:10.5px}
.game-dialog.game-dialog-day .suggestion-actions .secondary-game-button{border-color:#cddbd1;background:#eff5ec;color:#3f5548}
.suggestion-submit{padding:10px 24px;border:0;border-radius:8px;background:#c8a05a;color:#1d1508;font-size:11px;font-weight:700;letter-spacing:1px}
.game-dialog.game-dialog-day .suggestion-submit{background:#3f7d5c;color:#f4fbf5}
.suggestion-submit:disabled{opacity:.5}
@media(max-width:520px){.suggestion-coordinate-row{grid-template-columns:1fr}.suggestion-mini-map{height:150px}}

/* =======================================================================
   弹窗滚动：头部固定、内容区自己滚，标题再长也不会把底部顶出屏幕
   ======================================================================= */
.game-dialog[open]{display:flex;flex-direction:column;max-height:min(88vh,760px)}
.game-dialog[open].game-dialog-wide{max-height:min(93vh,880px)}
.game-dialog-head{flex:0 0 auto}
.game-dialog-body{flex:1 1 auto;min-height:0;max-height:none;overflow-y:auto;overscroll-behavior:contain;padding-bottom:24px}
.game-dialog[open].game-dialog-wide .game-dialog-body{max-height:none}

/* =======================================================================
   提交地标：选填照片 + 地图上的照片悬浮预览
   ======================================================================= */
.suggestion-image-field{display:flex;flex-direction:column;gap:7px;padding:11px 12px;border:1px dashed #3a5567;border-radius:10px;background:#12202c}
.game-dialog.game-dialog-day .suggestion-image-field{border-color:#d3e0d5;background:#f6faf4}
.suggestion-image-head{display:flex;align-items:center;gap:7px;color:#a8bcc2;font-size:10.5px;letter-spacing:.6px}
.game-dialog.game-dialog-day .suggestion-image-head{color:#4f6a5c}
.suggestion-image-head em{padding:1px 6px;border:1px solid #43596a;border-radius:999px;color:#8298a2;font-size:8.5px;font-style:normal}
.game-dialog.game-dialog-day .suggestion-image-head em{border-color:#cddcd2;color:#7b9184}
.suggestion-image-hint{margin:0;color:#8ba0a8;font-size:9.5px;line-height:1.7}
.game-dialog.game-dialog-day .suggestion-image-hint{color:#6d8479}
.suggestion-image-picker{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.suggestion-image-picker .secondary-game-button{padding:7px 14px;border:1px solid #4b6273;border-radius:8px;background:#1b2b38;color:#c2d0d5;font-size:10px}
.game-dialog.game-dialog-day .suggestion-image-picker .secondary-game-button{border-color:#cddbd1;background:#eff5ec;color:#3f5548}
.suggestion-image-name{color:#7f939c;font-size:9.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.game-dialog.game-dialog-day .suggestion-image-name{color:#7d8f86}
.suggestion-image-preview{position:relative;overflow:hidden;border:1px solid #2f4655;border-radius:10px;background:#0c1721}
.suggestion-image-preview img{display:block;width:100%;max-height:170px;object-fit:cover}
.suggestion-image-remove{position:absolute;right:8px;bottom:8px;padding:5px 11px;border:1px solid #ffffff2e;border-radius:999px;background:#0b1520cc;color:#dfe8ea;font-size:9.5px;cursor:pointer}
.suggestion-image-remove:hover{background:#8a3f3f;border-color:#c46b6b}

.landmark-hover-preview{position:absolute;z-index:8;width:190px;pointer-events:none;transform:translate(-50%,calc(-100% - 16px));border:1px solid #ffffff2b;border-radius:12px;overflow:hidden;background:#0c1824f2;box-shadow:0 18px 38px -16px #000000d9}
.landmark-hover-preview[hidden]{display:none}
.landmark-hover-preview img{display:block;width:100%;height:118px;object-fit:cover;background:#132433}
.landmark-hover-preview b{display:block;padding:8px 11px;color:#eef2ee;font-size:11px;font-weight:600;letter-spacing:.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.night-city-card.map-mode-day .landmark-hover-preview{border-color:#00000018;background:#fffffff2;box-shadow:0 18px 38px -18px #38463c66}
.night-city-card.map-mode-day .landmark-hover-preview b{color:#2f4438}

/* =======================================================================
   个人中心：头像、资料、密码、实名认证
   ======================================================================= */
.avatar-photo{object-fit:cover;border-radius:50%;background:#d8e2d9;display:block}
.me-center{display:flex;flex-direction:column;gap:14px}
.me-hero{display:flex;align-items:center;gap:14px;padding:14px;border:1px solid #2c4252;border-radius:14px;background:linear-gradient(135deg,#16283a,#111e2b)}
.game-dialog.game-dialog-day .me-hero{border-color:#e2e9df;background:linear-gradient(135deg,#f2f7ee,#fbfdf8)}
.me-avatar{flex:none;width:64px;height:64px;border-radius:50%;overflow:hidden;display:grid;place-items:center;background:#2f5f74;color:#eaf6f4;font:600 24px var(--serif)}
.game-dialog.game-dialog-day .me-avatar{background:#dcece0;color:#3f7d5c}
.me-avatar-img{width:100%;height:100%;font-size:24px;border-radius:0}
img.me-avatar-img{object-fit:cover}
.me-hero-info{display:flex;flex-direction:column;gap:4px;min-width:0}
.me-hero-info b{font:600 16px var(--serif);letter-spacing:.5px}
.me-hero-info small{color:#8ba0a8;font-size:10px}
.game-dialog.game-dialog-day .me-hero-info small{color:#6d8479}
.me-badge{align-self:flex-start;margin-top:2px;padding:2px 9px;border:1px solid #3d5566;border-radius:999px;color:#8fa6b0;font-size:9px}
.me-badge.is-verified{border-color:#4f7d5f;background:#1d3a2b;color:#93d3ac}
.game-dialog.game-dialog-day .me-badge{border-color:#d6e2d8;color:#7b9184}
.game-dialog.game-dialog-day .me-badge.is-verified{border-color:#b9dcc4;background:#eaf6ee;color:#3f7d5c}
.me-tabs{display:flex;gap:6px;flex-wrap:wrap}
.me-tabs button{padding:8px 15px;border:1px solid #33495a;border-radius:999px;background:transparent;color:#9db0b8;font-size:10.5px;cursor:pointer}
.me-tabs button.is-active{border-color:#7fb39a;background:#1d3a2b;color:#dff3e6}
.game-dialog.game-dialog-day .me-tabs button{border-color:#dde5da;color:#6d8479}
.game-dialog.game-dialog-day .me-tabs button.is-active{border-color:#8fbfa1;background:#eaf6ee;color:#356b4c}
.me-panel{min-height:180px}
.me-form{display:flex;flex-direction:column;gap:11px}
.me-field{display:flex;flex-direction:column;gap:6px;font-size:10.5px;color:#93a7ae}
.game-dialog.game-dialog-day .me-field{color:#5f7a6f}
.me-field input,.me-field select{padding:10px 12px;border:1px solid #35505f;border-radius:9px;background:#0f1d29;color:#e8eef1;font-size:12px}
.game-dialog.game-dialog-day .me-field input,.game-dialog.game-dialog-day .me-field select{border-color:#dde5da;background:#fff;color:#2d3a33}
.me-field input:focus,.me-field select:focus{outline:none;border-color:#7fb39a;box-shadow:0 0 0 3px #7fb39a26}
.me-field-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.me-actions{display:flex;justify-content:flex-end;gap:9px;margin-top:4px}
.me-hint{margin:0;font-size:10px;line-height:1.8;color:#8ba0a8}
.game-dialog.game-dialog-day .me-hint{color:#6d8479}
.me-footer{display:flex;justify-content:flex-end;padding-top:12px;border-top:1px solid #22323f}
.game-dialog.game-dialog-day .me-footer{border-top-color:#e6ece2}
.me-logout{padding:9px 17px;border:1px solid #7a4034;border-radius:10px;background:#2a1a17;color:#e8a99b;font-size:10.5px;letter-spacing:.4px;cursor:pointer}
.me-logout:hover{background:#3b231e}
.game-dialog.game-dialog-day .me-logout{border-color:#e4c3ba;background:#fdf2ef;color:#a9503f}
.game-dialog.game-dialog-day .me-logout:hover{background:#fbe7e2}
.me-account{display:grid;grid-template-columns:auto 1fr;gap:6px 12px;padding:11px 12px;border:1px dashed #33495a;border-radius:10px;font-size:10px;color:#8ba0a8}
.game-dialog.game-dialog-day .me-account{border-color:#dde5da;color:#6d8479}
.me-account b{color:#dfe8ea;font-weight:600}
.game-dialog.game-dialog-day .me-account b{color:#33443a}
.me-avatar-panel{display:flex;flex-direction:column;align-items:center;gap:12px;padding:8px 0}
.me-avatar-preview{width:110px;height:110px;border-radius:50%;overflow:hidden;display:grid;place-items:center;background:#2f5f74;color:#eaf6f4;font:600 40px var(--serif);box-shadow:0 0 0 6px #ffffff0d}
.game-dialog.game-dialog-day .me-avatar-preview{background:#dcece0;color:#3f7d5c;box-shadow:0 0 0 6px #ffffff}
.me-avatar-preview .me-avatar-img{width:100%;height:100%;font-size:40px;border-radius:0}
.me-avatar-actions{display:flex;gap:9px;flex-wrap:wrap;justify-content:center}
.me-avatar-actions .secondary-game-button{padding:10px 16px;border:1px solid #526679;border-radius:9px;background:#1b2b38;color:#b9c7cc;font-size:10.5px}
.game-dialog.game-dialog-day .me-avatar-actions .secondary-game-button{border-color:#cddbd1;background:#eff5ec;color:#3f5548}
.me-verified{display:flex;flex-direction:column;align-items:center;gap:5px;padding:14px;margin-bottom:14px;border:1px solid #4f7d5f;border-radius:12px;background:#1a3125;text-align:center}
.game-dialog.game-dialog-day .me-verified{border-color:#b9dcc4;background:#eef8f1}
.me-verified-mark{width:34px;height:34px;display:grid;place-items:center;border-radius:50%;background:#2f6b4a;color:#eafaf0;font-size:17px}
.game-dialog.game-dialog-day .me-verified-mark{background:#3f7d5c;color:#f4fbf5}
.me-verified p{margin:0;font-size:11px;color:#a8c4b2}
.game-dialog.game-dialog-day .me-verified p{color:#4f6a5c}
.me-verify-lead{padding:13px 14px;margin-bottom:14px;border:1px solid #33495a;border-radius:12px;background:#12202c}
.game-dialog.game-dialog-day .me-verify-lead{border-color:#e2e9df;background:#f6faf4}
.me-verify-lead b{font-size:12px}
.me-verify-lead p{margin:7px 0 0;font-size:10.5px;line-height:1.9;color:#8ba0a8}
.game-dialog.game-dialog-day .me-verify-lead p{color:#6d8479}

/* =======================================================================
   小游戏：一局结束留在原地继续
   ======================================================================= */
.scene-continue{display:flex;gap:9px;justify-content:center;flex-wrap:wrap;margin-top:12px;position:relative;z-index:3}
.scene-again{padding:10px 22px;border:0;border-radius:999px;background:#c8a05a;color:#1d1508;font-size:11.5px;font-weight:700;letter-spacing:1px;cursor:pointer}
.scene-again:disabled{background:#526679;color:#c6d3d8;opacity:.75;cursor:default}
.scene-continue .secondary-game-button{padding:10px 18px;border:1px solid #526679;border-radius:999px;background:#1b2b38;color:#b9c7cc;font-size:11px}
.scene-reward-done{display:inline-block;padding:6px 12px;border-radius:999px;background:#1d3a2b;color:#a9dcbd;font-size:10.5px}
.day-scene .scene-reward-done{background:#eaf6ee;color:#3f7d5c}
.day-scene .scene-again{background:#3f7d5c;color:#f4fbf5}
.day-scene .scene-continue .secondary-game-button{border-color:#cddbd1;background:#eff5ec;color:#3f5548}

/* =======================================================================
   城市聊天室
   ======================================================================= */
.chat-room{display:flex;flex-direction:column;gap:10px}
.chat-room-main{display:grid;grid-template-columns:minmax(0,1fr) 158px;gap:10px;height:min(46vh,352px)}
.chat-stream{overflow-y:auto;overflow-anchor:none;padding:12px;border:1px solid #2c4252;border-radius:12px;background:#0d1a25;display:flex;flex-direction:column;gap:8px;overscroll-behavior:contain}
.game-dialog.game-dialog-day .chat-stream{border-color:#e2e9df;background:#f7faf5}
.chat-welcome,.chat-empty{margin:0;color:#8ba0a8;font-size:10.5px;text-align:center;padding:8px 0}
.game-dialog.game-dialog-day .chat-welcome,.game-dialog.game-dialog-day .chat-empty{color:#7d8f86}
.chat-line{display:grid;grid-template-columns:auto 1fr auto;align-items:baseline;gap:9px;padding:7px 9px;border-radius:10px;background:#12212e}
.game-dialog.game-dialog-day .chat-line{background:#eef4ec}
.chat-line.is-mine{background:#17342a}
.game-dialog.game-dialog-day .chat-line.is-mine{background:#e3f1e7}
.chat-who{display:flex;align-items:center;gap:6px;white-space:nowrap}
.chat-who b{font-size:10.5px;font-weight:600;color:#9fd0c0}
.game-dialog.game-dialog-day .chat-who b{color:#3f7d5c}
.chat-line.is-mine .chat-who b{color:#e2c98f}
.game-dialog.game-dialog-day .chat-line.is-mine .chat-who b{color:#a3762f}
.chat-avatar{width:22px;height:22px;font-size:10px;border-radius:50%;display:grid;place-items:center;background:#2f5f74;color:#eaf6f4;flex:none;overflow:hidden}
img.chat-avatar{object-fit:cover}
.chat-text{font-size:11.5px;line-height:1.75;color:#dde7e9;word-break:break-word}
.game-dialog.game-dialog-day .chat-text{color:#33443a}
.chat-line time{color:#6d828c;font-size:9px}
.game-dialog.game-dialog-day .chat-line time{color:#9aa8a0}
.chat-people{display:flex;flex-direction:column;gap:8px;padding:12px 10px;border:1px solid #2c4252;border-radius:12px;background:#12202c;overflow-y:auto}
.game-dialog.game-dialog-day .chat-people{border-color:#e2e9df;background:#f6faf4}
.chat-people h4{margin:0;font-size:10.5px;color:#8ba0a8;font-weight:600;letter-spacing:.5px}
.game-dialog.game-dialog-day .chat-people h4{color:#6d8479}
.chat-people h4 b{color:#9fd0c0}
.chat-people ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px}
.chat-people li{display:flex;align-items:center;gap:7px;font-size:10.5px;color:#c6d3d8}
.game-dialog.game-dialog-day .chat-people li{color:#46584c}
.chat-people li.is-me{color:#e2c98f}
.game-dialog.game-dialog-day .chat-people li.is-me{color:#a3762f}
.chat-people li em{margin-left:auto;font-style:normal;font-size:9px;color:#7f939c}
.chat-online-empty{color:#7f939c;font-size:10px}
.chat-form{display:flex;gap:9px}
.chat-form input{flex:1;min-width:0;padding:11px 13px;border:1px solid #35505f;border-radius:10px;background:#0f1d29;color:#e8eef1;font-size:12px}
.game-dialog.game-dialog-day .chat-form input{border-color:#dde5da;background:#fff;color:#2d3a33}
.chat-form input:focus{outline:none;border-color:#7fb39a;box-shadow:0 0 0 3px #7fb39a26}
.chat-form button{padding:0 22px;border:0;border-radius:10px;background:#c8a05a;color:#1d1508;font-size:11.5px;font-weight:700;cursor:pointer}
.game-dialog.game-dialog-day .chat-form button{background:#3f7d5c;color:#f4fbf5}
.chat-form button:disabled{opacity:.6;cursor:default}
.chat-note{margin:0;font-size:9.5px;color:#7f939c;line-height:1.7}
.game-dialog.game-dialog-day .chat-note{color:#7d8f86}
@media(max-width:640px){
  .chat-room-main{grid-template-columns:1fr;height:min(52vh,420px)}
  .chat-people{max-height:96px}
  .me-field-row{grid-template-columns:1fr}
}

/* =======================================================================
   消息中心：居民私信 + 系统消息
   ======================================================================= */
.community-page .notification-dot{position:absolute;top:-4px;right:-6px;min-width:16px;height:16px;padding:0 4px;display:grid;place-items:center;background:#c97757;color:#fff;font-size:9px;font-weight:600;line-height:1;border-radius:999px;border:2px solid #fffefa}
.community-page .notification-dot[hidden]{display:none}
.msg-center{display:flex;flex-direction:column;gap:12px}
.msg-tabs{display:flex;gap:6px;flex-wrap:wrap}
.msg-tabs button{display:flex;align-items:center;gap:6px;padding:8px 15px;border:1px solid #33495a;border-radius:999px;background:transparent;color:#9db0b8;font-size:10.5px;cursor:pointer}
.msg-tabs button.is-active{border-color:#7fb39a;background:#1d3a2b;color:#dff3e6}
.game-dialog.game-dialog-day .msg-tabs button{border-color:#dde5da;color:#6d8479}
.game-dialog.game-dialog-day .msg-tabs button.is-active{border-color:#8fbfa1;background:#eaf6ee;color:#356b4c}
.msg-tab-count{padding:1px 6px;border-radius:999px;background:#c97757;color:#fff;font-size:9px}
.msg-tab-count[hidden]{display:none}
.msg-panel{min-height:320px}
.msg-empty{margin:0;padding:16px 4px;color:#8ba0a8;font-size:10.5px;line-height:1.8;list-style:none}
.game-dialog.game-dialog-day .msg-empty{color:#6d8479}
.msg-layout{display:grid;grid-template-columns:250px 1fr;gap:12px;min-height:330px}
.msg-side{display:flex;flex-direction:column;gap:8px;min-width:0}
.msg-find{display:flex;gap:6px}
.msg-find input{flex:1;min-width:0;padding:9px 11px;border:1px solid #35505f;border-radius:9px;background:#0f1d29;color:#e8eef1;font-size:11px}
.game-dialog.game-dialog-day .msg-find input{border-color:#dde5da;background:#fff;color:#2d3a33}
.msg-find input:focus{outline:none;border-color:#7fb39a}
.msg-find button{padding:0 13px;border:1px solid #526679;border-radius:9px;background:#1b2b38;color:#b9c7cc;font-size:10.5px}
.game-dialog.game-dialog-day .msg-find button{border-color:#cddbd1;background:#eff5ec;color:#3f5548}
.msg-find-result{display:flex;flex-direction:column;gap:4px;max-height:150px;overflow-y:auto;padding:8px;border:1px dashed #33495a;border-radius:10px}
.game-dialog.game-dialog-day .msg-find-result{border-color:#dde5da}
.msg-find-result[hidden]{display:none}
.msg-contact{display:flex;align-items:center;gap:8px;width:100%;padding:6px 7px;border:0;border-radius:8px;background:transparent;text-align:left;cursor:pointer;color:inherit}
.msg-contact:hover{background:#ffffff0f}
.game-dialog.game-dialog-day .msg-contact:hover{background:#eef4ea}
.msg-contact span{display:flex;flex-direction:column;gap:3px;min-width:0}
.msg-contact b{font-size:10.5px}
.msg-contact small{font-size:9px;color:#8ba0a8}
.msg-conversations{display:flex;flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;overflow-y:auto;max-height:300px}
.msg-conversations button{display:flex;align-items:center;gap:8px;width:100%;padding:8px;border:1px solid transparent;border-radius:10px;background:transparent;text-align:left;cursor:pointer;color:inherit}
.msg-conversations button:hover{background:#ffffff0f}
.msg-conversations button.is-active{border-color:#7fb39a;background:#1d3a2b}
.game-dialog.game-dialog-day .msg-conversations button:hover{background:#eef4ea}
.game-dialog.game-dialog-day .msg-conversations button.is-active{border-color:#8fbfa1;background:#eaf6ee}
.msg-avatar{width:30px;height:30px;flex:none;border-radius:50%;display:grid;place-items:center;background:#2f5f74;color:#eaf6f4;font:600 12px var(--serif)}
img.msg-avatar{object-fit:cover}
.game-dialog.game-dialog-day .msg-avatar{background:#dcece0;color:#3f7d5c}
.msg-conv-copy{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.msg-conv-copy b{font-size:10.5px}
.msg-conv-copy small{font-size:9px;color:#8ba0a8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.game-dialog.game-dialog-day .msg-conv-copy small{color:#6d8479}
.msg-conv-side{display:flex;flex-direction:column;align-items:flex-end;gap:4px}
.msg-conv-side time{font-size:8.5px;color:#7d929b;white-space:nowrap}
.msg-unread{min-width:16px;height:16px;padding:0 4px;border-radius:999px;background:#c97757;color:#fff;font-size:9px;font-style:normal;display:grid;place-items:center}
.msg-thread{display:flex;flex-direction:column;gap:8px;min-width:0;border:1px solid #2c4252;border-radius:12px;padding:10px}
.game-dialog.game-dialog-day .msg-thread{border-color:#e2e9df}
.msg-thread-head{display:flex;align-items:center;gap:8px}
.msg-thread-head b{font-size:11.5px}
.msg-stream{display:flex;flex-direction:column;gap:9px;height:236px;overflow-y:auto;padding:4px 2px}
.msg-line{display:flex;flex-direction:column;gap:3px;max-width:78%}
.msg-line.is-mine{align-self:flex-end;align-items:flex-end}
.msg-bubble{padding:8px 11px;border-radius:12px;background:#1b2b38;color:#dbe5e9;font-size:11px;line-height:1.75;word-break:break-word}
.game-dialog.game-dialog-day .msg-bubble{background:#eef2ea;color:#33443a}
.msg-line.is-mine .msg-bubble{background:#2f6b4a;color:#eefaf1}
.game-dialog.game-dialog-day .msg-line.is-mine .msg-bubble{background:#3f7d5c;color:#f4fbf5}
.msg-line time{font-size:8.5px;color:#7d929b}
.msg-form{display:flex;gap:7px}
.msg-form input{flex:1;min-width:0;padding:9px 11px;border:1px solid #35505f;border-radius:9px;background:#0f1d29;color:#e8eef1;font-size:11px}
.game-dialog.game-dialog-day .msg-form input{border-color:#dde5da;background:#fff;color:#2d3a33}
.msg-form input:focus{outline:none;border-color:#7fb39a}
.msg-form button{padding:0 16px;border:0;border-radius:9px;background:#3f7d5c;color:#f5fbf6;font-size:11px}
.msg-system{display:flex;flex-direction:column;gap:10px}
.msg-system-head{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:10px;color:#8ba0a8}
.game-dialog.game-dialog-day .msg-system-head{color:#6d8479}
.msg-system-head button{padding:7px 12px;border:1px solid #526679;border-radius:9px;background:#1b2b38;color:#b9c7cc;font-size:10px}
.game-dialog.game-dialog-day .msg-system-head button{border-color:#cddbd1;background:#eff5ec;color:#3f5548}
.msg-notices{display:flex;flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;max-height:360px;overflow-y:auto}
.msg-notice{display:flex;gap:10px;padding:11px 12px;border:1px solid #2c4252;border-radius:12px}
.game-dialog.game-dialog-day .msg-notice{border-color:#e2e9df}
.msg-notice.is-unread{border-color:#7fb39a;background:#16281f}
.game-dialog.game-dialog-day .msg-notice.is-unread{border-color:#a8d3b6;background:#f2faf4}
.msg-notice-mark{flex:none;width:28px;height:28px;border-radius:9px;display:grid;place-items:center;background:#2f5f74;color:#eaf6f4;font:600 13px var(--serif)}
.game-dialog.game-dialog-day .msg-notice-mark{background:#dcece0;color:#3f7d5c}
.msg-notice-body{display:flex;flex-direction:column;gap:5px;min-width:0}
.msg-notice-top{display:flex;align-items:baseline;gap:10px}
.msg-notice-top b{font-size:11.5px}
.msg-notice-top time{font-size:8.5px;color:#7d929b;margin-left:auto;white-space:nowrap}
.msg-notice-tag{align-self:flex-start;padding:1px 8px;border:1px solid #3d5566;border-radius:999px;font-size:8.5px;color:#8fa6b0}
.game-dialog.game-dialog-day .msg-notice-tag{border-color:#d6e2d8;color:#7b9184}
.msg-notice-body p{margin:0;font-size:10.5px;line-height:1.85;color:#c3d0d5}
.game-dialog.game-dialog-day .msg-notice-body p{color:#4f6157}
.msg-notice-link{align-self:flex-start;font-size:10px;color:#8fc0a2}
.game-dialog.game-dialog-day .msg-notice-link{color:#3f7d5c}

/* =======================================================================
   第 8 轮：富文本动态 / 好友 / 私信图片与撤回
   ======================================================================= */
.side-title>span{font-size:9px;color:#9a9d91}

/* ---- 城里新鲜事：富文本编辑器 ---- */
.rich-composer{margin:10px 0 17px;padding:14px 15px 12px;background:var(--card);border:1px solid var(--line)}
.rich-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding-bottom:9px;border-bottom:1px dashed #e6e3d8}
.rich-toolbar button{min-width:30px;height:28px;padding:0 9px;border:1px solid #e2ded1;border-radius:7px;background:#fbfaf3;color:#5c6a5e;font-size:11px;line-height:1;display:inline-flex;align-items:center;gap:4px;cursor:pointer}
.rich-toolbar button:hover{border-color:#9fb69a;color:#3f5c49;background:#f2f6ee}
.rich-sep{width:1px;height:20px;margin:0 4px;background:#e6e3d8}
.rich-surface{min-height:118px;max-height:340px;margin:12px 0 6px;padding:11px 12px;border:1px solid var(--line);border-radius:8px;background:#fff;font:13px/1.8 var(--sans);outline:none;overflow-y:auto;word-break:break-word}
.rich-surface:focus{border-color:#91a18b;box-shadow:0 0 0 3px #91a18b1f}
.rich-surface:empty:before{content:attr(data-placeholder);color:#b6b9ae;pointer-events:none}
.rich-surface img{max-width:100%;border-radius:10px;display:block;margin:8px 0;box-shadow:0 6px 18px #36443614}
.rich-surface h2,.post-rich h2{font:600 17px var(--serif);margin:10px 0 6px}
.rich-surface h3,.post-rich h3{font:600 14px var(--serif);margin:9px 0 5px}
.rich-surface blockquote,.post-rich blockquote{margin:8px 0;padding:6px 12px;border-left:3px solid #cbd6c4;background:#f6f7f1;color:#5c6a5e}
.rich-surface ul,.rich-surface ol,.post-rich ul,.post-rich ol{margin:8px 0;padding-left:22px}
.rich-surface a,.post-rich a{color:#4b7f5f;text-decoration:underline}
.rich-composer .composer-form-actions{flex-wrap:wrap}
.rich-target{display:flex;align-items:center;gap:7px;margin-right:auto;font-size:10.5px;color:var(--muted)}
.rich-target select{padding:6px 9px;border:1px solid var(--line);background:#fff;color:var(--ink);font-size:11px}
.rich-composer .composer-form-actions .rich-counter{margin-right:0;color:var(--muted);font-size:10px}
.post-rich img{max-width:100%;border-radius:10px;display:block;margin:8px 0}
.post-rich h2,.post-rich h3,.post-rich ul,.post-rich ol{margin-block:8px}
.post-rich blockquote{margin-block:8px}

/* ---- 好友 ---- */
.community-page .people-card .friend-row{width:100%;border:0;background:none;text-align:left;padding:6px;border-radius:8px;cursor:pointer}
.community-page .people-card .friend-row:hover{background:#f4f6ef}
.community-page .people-card .find-friends{align-items:center;gap:6px}
.friend-head{display:inline-flex;align-items:center;gap:6px;font-size:9px;color:#9a9d91}
.friend-request-dot{min-width:16px;height:16px;padding:0 4px;display:inline-grid;place-items:center;border-radius:999px;background:#c97757;color:#fff;font-size:9px;font-weight:600;font-style:normal}
.friend-on-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#7fae76;margin-left:3px}
.friend-center{display:flex;flex-direction:column;gap:12px}
.friend-panel{min-height:300px}
.friend-find{display:flex;gap:6px}
.friend-find input{flex:1;min-width:0;padding:9px 11px;border:1px solid #35505f;border-radius:9px;background:#0f1d29;color:#e8eef1;font-size:11px}
.game-dialog-day .friend-find input{border-color:#dde5da;background:#fff;color:#2d3a33}
.friend-find input:focus{outline:none;border-color:#7fb39a}
.friend-find button{padding:0 14px;border:1px solid #526679;border-radius:9px;background:#1b2b38;color:#b9c7cc;font-size:10.5px;cursor:pointer}
.game-dialog-day .friend-find button{border-color:#cddbd1;background:#eff5ec;color:#3f5548}
.friend-list{display:flex;flex-direction:column;gap:4px;margin:10px 0 0;padding:0;list-style:none;max-height:320px;overflow-y:auto}
.friend-entry{display:flex;align-items:center;gap:9px;width:100%;padding:9px;border:1px solid transparent;border-radius:10px;background:transparent;color:inherit;text-align:left;cursor:pointer}
.friend-entry:hover{background:#ffffff0f}
.game-dialog-day .friend-entry:hover{background:#eef4ea}
.friend-candidate{display:flex;align-items:center;gap:8px;padding:6px 7px;border-radius:8px}
.friend-candidate .msg-conv-copy{flex:1}
.friend-tag{padding:2px 9px;border:1px solid #3d5566;border-radius:999px;font-size:9px;color:#9fb2ba;white-space:nowrap}
.game-dialog-day .friend-tag{border-color:#d6e2d8;color:#7b9184}
.friend-tag.is-friend{border-color:#4d7a5f;background:#1d3a2b;color:#bfe6cb}
.game-dialog-day .friend-tag.is-friend{border-color:#a8d3b6;background:#eaf6ee;color:#356b4c}
.friend-mini{padding:5px 11px;border:0;border-radius:8px;background:#c8a05a;color:#1d1508;font-size:10px;font-weight:600;white-space:nowrap;cursor:pointer}
.friend-mini.is-primary{background:#3f7d5c;color:#f4fbf5}
.friend-mini.is-danger{background:#a9503f;color:#ffeae4}
.friend-mini.is-ghost{border:1px solid #526679;background:transparent;color:#b9c7cc;font-weight:500}
.game-dialog-day .friend-mini.is-ghost{border-color:#cddbd1;color:#5f7268;background:#f6f8f2}
.friend-mini:disabled{opacity:.55;cursor:default}
.friend-requests{display:flex;flex-direction:column;gap:14px}
.friend-requests section h4{margin:0 0 8px;font:600 11.5px var(--serif);color:#9fb2ba}
.game-dialog-day .friend-requests section h4{color:#5f7268}
.friend-requests section h4 b{color:#e0a37f}
.friend-requests ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.friend-request{display:flex;align-items:center;gap:9px;padding:9px 10px;border:1px solid #2c4252;border-radius:10px}
.game-dialog-day .friend-request{border-color:#e2e9df}
.friend-request .msg-conv-copy{flex:1}
.friend-request-actions{display:flex;gap:5px}
.friend-card{display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 4px 4px;text-align:center}
.friend-card-avatar{width:74px;height:74px;display:grid;place-items:center;border-radius:50%;font:600 30px var(--serif)}
img.friend-card-avatar{object-fit:cover}
.friend-card h3{margin:4px 0 0;font:600 18px var(--serif)}
.friend-card-note{margin:0;font-size:10.5px;color:#8ba0a8;line-height:1.8}
.game-dialog-day .friend-card-note{color:#6d8479}
.friend-card-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:8px}
.friend-card-back{margin-top:10px;border:0;background:none;color:#8ba0a8;font-size:10px;cursor:pointer}

/* ---- 私信：图片与撤回 ---- */
.msg-thread-relation{margin-left:auto;display:inline-flex;align-items:center}
.msg-line-foot{display:flex;align-items:center;gap:8px}
.msg-line.is-mine .msg-line-foot{flex-direction:row-reverse}
.msg-recall{border:0;background:none;color:#8ba0a8;font-size:8.5px;padding:0;cursor:pointer}
.msg-recall:hover{color:#d98a68}
.msg-recall-note{align-self:center;padding:4px 12px;border-radius:999px;background:#ffffff12;color:#8ba0a8;font-size:9px}
.game-dialog-day .msg-recall-note{background:#ecefe8;color:#7d8f86}
.msg-photo img{max-width:230px;max-height:230px;border-radius:12px;display:block;background:#ffffff10;cursor:zoom-in}
.msg-photo-failed{display:inline-block;padding:8px 12px;border-radius:10px;background:#ffffff12;color:#8ba0a8;font-size:9.5px}
.msg-image-btn{width:34px;height:34px;flex:none;border:1px solid #35505f;border-radius:9px;background:#0f1d29;color:#b9c7cc;font-size:13px;cursor:pointer}
.msg-image-btn:hover{border-color:#7fb39a;color:#dff3e6}
.game-dialog-day .msg-image-btn{border-color:#dde5da;background:#fff;color:#5f7268}
.game-dialog-day .msg-image-btn:hover{border-color:#8fbfa1;color:#356b4c}
.msg-contact-row{display:flex;align-items:center;gap:6px}
.msg-contact-row .msg-contact{flex:1;min-width:0}
@media(max-width:640px){
  .rich-toolbar button{padding:0 7px;font-size:10px}
  .msg-photo img{max-width:170px;max-height:170px}
}

/* 个人中心：管理员入口 */
.me-admin{display:flex;flex-direction:column;gap:12px}
.me-admin-note{margin:0;font-size:11px;line-height:1.9;color:#93a7b0}
.game-dialog-day .me-admin-note{color:#5f7268}
.me-admin-enter{align-self:flex-start;padding:10px 18px;border-radius:10px;background:#3f7d5c;color:#f4fbf5;font-size:11.5px;font-weight:600;text-decoration:none}
.me-admin-enter:hover{filter:brightness(1.06)}
.me-admin-list{margin:0;padding-left:18px;color:#93a7b0;font-size:10.5px;line-height:2}
.game-dialog-day .me-admin-list{color:#5f7268}

/* 多城市：地图切换条 */
.map-city-switch{position:relative;z-index:2;display:flex;flex-wrap:wrap;align-items:center;gap:7px;padding:10px 2px 2px}
.map-city-switch[hidden]{display:none}
.map-city-label{font-size:9px;letter-spacing:1.6px;color:#8ba1a8;text-transform:uppercase}
.map-city-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 13px;border:1px solid #33495a;border-radius:999px;background:#14242f;color:#a9bcc1;font-size:10.5px;cursor:pointer;transition:border-color .18s,background .18s}
.map-city-chip:hover{border-color:#7fb39a;color:#dff3e6}
.map-city-chip.is-active{border-color:#7fb39a;background:#1d3a2b;color:#dff3e6;font-weight:600}
.map-city-chip i{font-style:normal;font-size:8.5px;padding:1px 6px;border-radius:999px;background:#ffffff14;color:#8fc0a2}
.map-mode-day .map-city-chip{border-color:#dbe4d6;background:#f7faf4;color:#5c6a5e}
.map-mode-day .map-city-chip:hover{border-color:#8fbfa1;color:#356b4c}
.map-mode-day .map-city-chip.is-active{border-color:#8fbfa1;background:#eaf6ee;color:#2f6b4a}
.map-mode-day .map-city-chip i{background:#e2efe4;color:#3f7d5c}
.map-mode-day .map-city-label{color:#7d8f86}

/* 空城提示：不再压在地图正中，改成贴底部的小横幅，并带关闭按钮 */
.map-empty-note{left:50%;right:auto;top:auto;bottom:16px;transform:translateX(-50%);z-index:400;max-width:min(360px,calc(100% - 32px));padding:11px 38px 11px 15px;text-align:left}
.map-empty-note span{display:block;font-weight:600}
.map-empty-note small{display:block;margin-top:3px}
.map-empty-close{position:absolute;right:7px;top:7px;width:22px;height:22px;padding:0;border:1px solid #40576a;border-radius:50%;background:#1a2c3a;color:#c3d2d6;font-size:14px;line-height:1;cursor:pointer}
.map-empty-close:hover{background:#26414f;color:#fff}
.map-mode-day .map-empty-close{border-color:#d5ded3;background:#f2f6ef;color:#5c6a5e}
.map-mode-day .map-empty-close:hover{background:#e4ecdf;color:#2f4a3a}
.map-empty-note{transition:opacity .4s ease,transform .4s ease}
.map-empty-note.is-fading{opacity:0;transform:translateX(-50%) translateY(6px)}

/* 地图工具：缩放滑杆 + 最大化/恢复 */
.map-tools{position:absolute;right:12px;top:50%;transform:translateY(-50%);z-index:450;display:flex;flex-direction:column;align-items:center;gap:7px;padding:9px 7px;border:1px solid #ffffff17;border-radius:13px;background:#0c1623d9;box-shadow:0 10px 26px #00000038;backdrop-filter:blur(6px)}
.map-tool{width:26px;height:26px;padding:0;border:1px solid #ffffff1f;border-radius:7px;background:#152232;color:#cdd9dc;font-size:13px;line-height:1;cursor:pointer;transition:background .15s,border-color .15s,color .15s}
.map-tool:hover{border-color:#9fd9c357;background:#1b4152;color:#fff}
.map-zoom-slider{writing-mode:vertical-lr;direction:rtl;width:24px;height:118px;margin:0;padding:0;background:transparent;accent-color:#8fc0a2;cursor:pointer}
.map-tools-divider{width:16px;height:1px;background:#ffffff1f}
.map-tools.is-stacked{gap:9px;padding:11px 8px}
.map-tools.is-stacked .map-zoom-slider{height:180px}
.map-mode-day .map-tools{border-color:#00000014;background:#f6faf3e6;box-shadow:0 10px 26px #45543f1f}
.map-mode-day .map-tool{border-color:#d5ded3;background:#fff;color:#41564c}
.map-mode-day .map-tool:hover{border-color:#8fbfa1;background:#eaf6ee;color:#2f6b4a}
.map-mode-day .map-tools-divider{background:#00000014}

/* 最大化：整块“地图 + 地标面板”铺满窗口，背景压暗 */
.night-map-layout.is-map-expanded{position:fixed;inset:14px;z-index:950;border-radius:16px;overflow:hidden;background:#0e1926;grid-template-columns:minmax(0,1fr) 320px;box-shadow:0 0 0 100vmax #060b11c4,0 30px 80px #0000008c}
.night-map-layout.is-map-expanded .night-map{height:100%}
.night-map-layout.is-map-expanded .landmark-panel{overflow:auto}
.night-map-layout.is-map-expanded .map-tools{right:auto;left:12px;top:12px;transform:none;flex-direction:row}
.night-map-layout.is-map-expanded .map-zoom-slider{writing-mode:horizontal-tb;direction:ltr;width:132px;height:24px}
@media(max-width:640px){.night-map-layout.is-map-expanded{inset:0;border-radius:0;grid-template-columns:minmax(0,1fr)}.night-map-layout.is-map-expanded .landmark-panel{display:none}}

/* 地标照片与详情预览 */
.landmark-hover-preview{pointer-events:auto;cursor:pointer}
.landmark-hover-hint{display:block;padding:0 11px 9px;color:#9fc7b4;font-size:8px;letter-spacing:.4px}
.night-city-card.map-mode-day .landmark-hover-hint{color:#5d8a70}
.landmark-photo{position:relative;display:block;width:100%;margin:14px 0 0;padding:0;border:1px solid #2c4351;border-radius:10px;overflow:hidden;background:#0f1c28;cursor:pointer;line-height:0}
.landmark-photo[hidden]{display:none}
.landmark-photo img{display:block;width:100%;height:112px;object-fit:cover;transition:transform .35s ease}
.landmark-photo:hover img{transform:scale(1.04)}
.landmark-photo-hint{position:absolute;right:8px;bottom:8px;padding:3px 8px;border-radius:999px;background:#0c1623cc;color:#dbe6e7;font-size:9px;line-height:1.6}
.landmark-description.is-clickable{cursor:pointer}
.landmark-description.is-clickable::after{content:'点击查看完整介绍 ↗';display:block;margin-top:4px;color:#7fa08e;font-size:8px;letter-spacing:.4px}
.landmark-description.is-clickable:hover{color:#dee9e3}
.map-mode-day .landmark-photo{border-color:#dde5d8;background:#fff}
.map-mode-day .landmark-photo-hint{background:#ffffffe0;color:#4c5f66}
.map-mode-day .landmark-description.is-clickable::after{color:#5d8a70}
.map-mode-day .landmark-description.is-clickable:hover{color:#2b3b33}

.landmark-preview{width:min(680px,calc(100vw - 30px));max-height:min(88vh,780px);padding:0;border:1px solid #d9e2d6;border-radius:18px;background:#fbfaf4;color:#33413a;overflow:hidden;box-shadow:0 30px 80px -28px #2c3a2e66;font-family:var(--sans,inherit)}
.landmark-preview::backdrop{background:#0f1a1580;backdrop-filter:blur(4px)}
.landmark-preview--night{border-color:#2b4256;background:#101c28;color:#e7eef0;box-shadow:0 30px 80px -26px #000}
.landmark-preview-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding:18px 20px 12px;border-bottom:1px solid #e7ece2}
.landmark-preview--night .landmark-preview-head{border-color:#22384a}
.landmark-preview-head .eyebrow{margin:0 0 4px;color:#7b9b8a;font-size:8px;letter-spacing:2px}
.landmark-preview-head h2{margin:0;font:600 20px var(--serif);letter-spacing:.6px}
.landmark-preview-region{margin:4px 0 0;color:#7c8d84;font-size:10px}
.landmark-preview--night .landmark-preview-region{color:#8fa4ae}
.landmark-preview-head>button{flex:none;width:32px;height:32px;border:1px solid #d8e0d3;border-radius:50%;background:#f1f5ee;color:#4a5b50;font-size:19px;line-height:1;cursor:pointer}
.landmark-preview-head>button:hover{background:#e6efe2}
.landmark-preview--night .landmark-preview-head>button{border-color:#3a5766;background:#162836;color:#c2d0d5}
.landmark-preview--night .landmark-preview-head>button:hover{background:#1e3444}
.landmark-preview-body{padding:16px 20px 20px;overflow:auto;max-height:calc(88vh - 104px)}
.landmark-preview-photo{margin:0 0 14px;border-radius:12px;overflow:hidden;background:#0b151f}
.landmark-preview-photo[hidden]{display:none}
.landmark-preview-photo img{display:block;width:100%;max-height:52vh;object-fit:contain;background:#0b151f}
.landmark-preview-photo figcaption{padding:7px 12px;color:#8fa4ae;font-size:9px}
.landmark-preview-empty{margin:0 0 14px;padding:18px;border:1px dashed #cfdac9;border-radius:12px;color:#7d8f84;font-size:11px;text-align:center}
.landmark-preview-empty[hidden]{display:none}
.landmark-preview--night .landmark-preview-empty{border-color:#33505f;color:#93a7b0}
.landmark-preview-desc{margin:0;font-size:12.5px;line-height:1.95;white-space:pre-wrap}
.landmark-preview-meta{margin:12px 0 0;color:#86988e;font-size:10px}
.landmark-preview--night .landmark-preview-meta{color:#82969f}

/* 聊天室：当前城市标签 */
.chat-city-tag{display:inline-block;padding:1px 7px;margin-right:2px;border-radius:999px;background:#1b3a44;color:#9fd0b6;font-size:9.5px;font-weight:600}
.game-dialog-day .chat-city-tag{background:#e6f2e7;color:#3f7d5c}

/* ===== 聊天室 2.0：左右气泡 / 图片 / 语音 / 表情 / 管理员踢人 ===== */
.game-dialog .chat-room-main{grid-template-columns:minmax(0,1fr) 168px;height:min(50vh,392px)}
.chat-side{display:flex;flex-direction:column;gap:10px;min-width:0;min-height:0}
.chat-side .chat-people{flex:1 1 auto;min-height:0}
.chat-kicked{flex:0 0 auto;max-height:150px}
.game-dialog .chat-room .chat-stream{gap:10px;padding:14px 12px}
.game-dialog .chat-room .chat-line{display:flex;align-items:flex-start;gap:8px;padding:0;background:none;border-radius:0}
.game-dialog.game-dialog-day .chat-room .chat-line{background:none}
.game-dialog .chat-room .chat-line.is-mine{flex-direction:row-reverse}
.chat-face{flex:none;padding-top:2px}
.chat-bubble{max-width:min(80%,520px);display:flex;flex-direction:column;gap:5px;padding:8px 11px;border-radius:13px;border:1px solid #24384a;background:#12212e}
.game-dialog.game-dialog-day .chat-bubble{border-color:#dfe7dc;background:#fff}
.chat-line.is-mine .chat-bubble{border-color:#2c5545;background:#17342a}
.game-dialog.game-dialog-day .chat-line.is-mine .chat-bubble{border-color:#cbe3d1;background:#e6f3ea}
.chat-line .chat-who{display:flex;align-items:baseline;gap:7px}
.chat-line.is-mine .chat-who{flex-direction:row-reverse}
.chat-bubble .chat-text{font-size:11.5px;line-height:1.75;word-break:break-word}
.chat-text.is-emoji{font-size:26px;line-height:1.3}
.chat-photo{display:block;max-width:230px;max-height:210px;border-radius:9px;background:#0b151f;cursor:pointer}
.chat-media-failed{font-size:10px;color:#b4544a}
.chat-audio{display:flex;align-items:center;gap:9px;padding:7px 12px 7px 8px;border:1px solid #2f4a5b;border-radius:999px;background:#0f2230;color:#cfe2e4;font-size:11px;cursor:pointer;transition:.16s}
.game-dialog.game-dialog-day .chat-audio{border-color:#d6e2d5;background:#f2f8f0;color:#3a5145}
.chat-audio:hover{border-color:#7fb39a}
.chat-audio.is-playing{border-color:#8fd0ac;background:#173a2e}
.chat-audio.is-loading{opacity:.6}
.chat-audio-play{width:20px;height:20px;display:grid;place-items:center;border-radius:50%;background:#3f7d5c;color:#f2fbf5;font-size:9px}
.chat-audio-wave{display:flex;align-items:center;gap:2px;height:14px}
.chat-audio-wave i{width:2px;height:6px;border-radius:2px;background:#6d94a4}
.chat-line.is-mine .chat-audio-wave i{background:#8fd0ac}
.chat-audio.is-playing .chat-audio-wave i{animation:chatWave .9s ease-in-out infinite}
.chat-audio-wave i:nth-child(2n){height:11px}
.chat-audio-wave i:nth-child(3n){height:8px}
@keyframes chatWave{0%,100%{transform:scaleY(.6)}50%{transform:scaleY(1.35)}}
.chat-tools{display:flex;gap:5px}
.chat-tools button{width:34px;height:38px;padding:0;border:1px solid #35505f;border-radius:10px;background:#12222f;color:#c3d3d6;font-size:14px;line-height:1;cursor:pointer}
.game-dialog.game-dialog-day .chat-tools button{border-color:#dde5da;background:#fff;color:#4c6055}
.chat-tools button:hover{border-color:#7fb39a;color:#eaf6ef}
.chat-tools button:disabled{opacity:.45;cursor:default}
.chat-tools #chat-voice.is-recording{border-color:#c97757;background:#3a1f1c;color:#ffd9cd}
.chat-emoji{display:grid;grid-template-columns:repeat(10,1fr);gap:4px;padding:9px;max-height:158px;overflow:auto;border:1px solid #2c4252;border-radius:12px;background:#101d29}
.game-dialog.game-dialog-day .chat-emoji{border-color:#e2e9df;background:#f7faf5}
.chat-emoji[hidden]{display:none}
.chat-emoji button{padding:3px 0;border:0;border-radius:7px;background:none;font-size:17px;line-height:1.3;cursor:pointer}
.chat-emoji button:hover{background:#1c3341}
.game-dialog.game-dialog-day .chat-emoji button:hover{background:#e6f0e4}
.chat-recording{display:flex;align-items:center;gap:8px;padding:8px 12px;border:1px solid #6b3a30;border-radius:10px;background:#2a1411;color:#f0c3b5;font-size:10.5px}
.chat-recording[hidden]{display:none}
.chat-rec-dot{width:8px;height:8px;border-radius:50%;background:#e0684b;animation:chatRec 1s infinite}
@keyframes chatRec{0%,100%{opacity:1}50%{opacity:.25}}
.chat-recording small{margin-left:auto;color:#c08f83}
.chat-notice{margin:0;padding:8px 12px;border:1px solid #6b3a30;border-radius:10px;background:#2a1411;color:#f0c3b5;font-size:10.5px}
.chat-notice[hidden]{display:none}
.chat-people li .chat-kick{margin-left:auto;padding:3px 8px;border:1px solid #6b3a30;border-radius:999px;background:#2a1411;color:#f0b8a6;font-size:9px;cursor:pointer}
.chat-people li .chat-kick:hover{background:#40201a;color:#ffd6c8}
.chat-people li .chat-unkick{padding:3px 8px;border:1px solid #35505f;border-radius:999px;background:#12222f;color:#a9c2c8;font-size:9px;cursor:pointer}
.chat-member-name{display:flex;align-items:center;gap:5px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chat-badge{padding:1px 5px;border-radius:999px;background:#3d4a6b;color:#d9e2ff;font-size:8px;font-style:normal;flex:none}
.chat-me{margin-left:auto;font-style:normal;font-size:9px;color:#7f939c}
.chat-people li .chat-member-name + .chat-kick{margin-left:auto}

/* ===================== 地图城市下拉（城市多了也不会溢出） ===================== */
.map-city-switch{display:flex;align-items:center;gap:9px;padding:7px 11px;border:1px solid #2c4252;border-radius:10px;background:#101d27;width:fit-content}
.map-city-label{font-size:10px;color:#8ea3ad;white-space:nowrap}
.map-city-select-wrap{position:relative;display:inline-flex;align-items:center}
.map-city-select{appearance:none;-webkit-appearance:none;min-width:132px;max-width:230px;height:28px;padding:0 26px 0 11px;border:1px solid #33495a;border-radius:999px;background:#14242f;color:#dff3e6;font-size:11px;cursor:pointer;outline:none}
.map-city-select:hover{border-color:#7fb39a}
.map-city-select:focus-visible{border-color:#8fbfa1;box-shadow:0 0 0 2px #7fb39a33}
.map-city-select option{background:#132029;color:#dff3e6}
.map-city-caret{position:absolute;right:9px;pointer-events:none;color:#8fc0a2;font-size:11px;font-style:normal}
.map-mode-day .map-city-switch{border-color:#dbe4d6;background:#f7faf4}
.map-mode-day .map-city-label{color:#7d8a7c}
.map-mode-day .map-city-select{border-color:#dbe4d6;background:#f7faf4;color:#356b4c}
.map-mode-day .map-city-select option{background:#fff;color:#2f6b4a}
.map-mode-day .map-city-caret{color:#4b7d5f}

/* =======================================================================
   街头小游戏：套圈 / 踢毽子 / 跳房子
   共用：开局面板上的街坊纪录、结算面板、可互动的力度条与连击读数
   ======================================================================= */
.street-outcome{position:relative;z-index:6;display:flex;align-items:center;flex-wrap:wrap;gap:9px;
  width:max-content;max-width:90%;margin:190px auto 14px;padding:9px 13px;border:1px solid #d3bd7b66;
  border-radius:9px;background:#10232cef;box-shadow:0 8px 22px #0005}
.street-outcome[hidden]{display:none}
.street-outcome b,.street-outcome small{display:block}
.street-outcome b{font-size:11px;color:#f2dfaa}
.street-outcome small{margin-top:3px;color:#a9c0bb;font-size:9px}
.street-record{display:block;margin-top:2px;color:#cbbd96;font-size:10px;letter-spacing:.4px}
.ring-flying,.ring-landed{width:24px;height:24px;border:4px solid #ecdfc2;border-radius:50%;
  box-shadow:0 3px 8px #00000055;background:transparent}
.game-dialog.game-dialog-day .street-record{color:#7c7a63}
.street-board{margin:7px 0 1px;padding:8px 11px;border:1px solid #ffffff17;border-radius:9px;background:#ffffff0d;text-align:left;min-width:236px}
.street-board[hidden]{display:none}
.street-board>b{display:block;font-size:10px;letter-spacing:.6px;color:#e6d5a7}
.street-board>small{display:block;margin-top:4px;font-size:9px;color:#a9c0bb}
.street-board ul{margin:6px 0 0;padding:0;list-style:none}
.street-board li{display:flex;align-items:baseline;gap:6px;padding:3px 0;font-size:10px;color:#cfdcd6}
.street-board li+li{border-top:1px dashed #ffffff14}
.street-board li.is-me{color:#f6e6b4}
.street-board .board-rank{flex:none;width:15px;text-align:center}
.street-board .board-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.street-board li b{font:700 11px var(--serif);color:#f2dfaa}
.street-board li small{font-size:9px;color:#93a8a2}
.game-dialog.game-dialog-day .street-board{border-color:#2e4a3f26;background:#2e4a3f0f}
.game-dialog.game-dialog-day .street-board>b{color:#6d6a4d}
.game-dialog.game-dialog-day .street-board>small,.game-dialog.game-dialog-day .street-board li small{color:#6f8378}
.game-dialog.game-dialog-day .street-board li{color:#3d5248}
.game-dialog.game-dialog-day .street-board li.is-me{color:#7a5f24}
.game-dialog.game-dialog-day .street-board li+li{border-top-color:#2e4a3f1f}
.game-dialog.game-dialog-day .street-board li b{color:#8a6a24}
.street-outcome{flex-wrap:wrap}
.street-reward-icon{font-size:25px}
.street-play{gap:8px}
.ring-choice-hint{align-self:flex-start;color:#e7d5a9;font-size:10px;letter-spacing:.08em}
.street-track{position:relative;height:11px;border-radius:7px;background:#ffffff17;overflow:hidden}
.street-track .ring-aim{position:absolute;top:-3px;left:50%;width:8px;height:20px;margin-left:-4px;border-radius:4px;
  background:#ffd98a;box-shadow:0 0 12px #ffd98acc}
.street-power{position:relative;height:9px;border-radius:5px;background:#ffffff14;overflow:hidden}
.street-power i{position:relative;z-index:1;display:block;width:0;height:100%;border-radius:5px;background:linear-gradient(90deg,#8fc7a0,#e3bf72,#d98d6a)}
.street-power .ring-power-zone{position:absolute;z-index:2;top:0;bottom:0;left:0;width:0;border-inline:1px solid #bfe9a9;
  background:#8fcf8355;box-shadow:0 0 8px #8fcf8355;pointer-events:none}
.game-dialog.game-dialog-day .street-track{background:#2e4a3f26}
.game-dialog.game-dialog-day .street-power{background:#2e4a3f1f}
.combo-readout{display:flex;align-items:baseline;gap:8px;color:#cfe0d2;font-size:10px}
.combo-readout b{font:700 20px var(--serif);color:#f0e2b4}
.game-dialog.game-dialog-day .combo-readout{color:#4d6156}

/* ---- 套圈摊：红白棚子、灯笼和一排小奖品 ---- */
.ringtoss-scene{position:relative;min-height:310px;overflow:hidden;border:1px solid #4a3a33;border-radius:10px;
  background:linear-gradient(#1d2536 0%,#2c3346 46%,#4a4038 47%,#2b2620 100%);isolation:isolate}
.ringtoss-scene{background:linear-gradient(#1b2334 0%,#2a3145 44%,#4d4239 45%,#2c2620 100%)}
.ring-sky{position:absolute;inset:0 0 54%;overflow:hidden;background:radial-gradient(ellipse at 78% 116%,#e0a2732e,transparent 52%)}
.ring-cloud{position:absolute;left:14%;top:22%;width:74px;height:16px;border-radius:999px;background:#c9d3e41f;box-shadow:34px 7px 0 -3px #c9d3e418;animation:ringDrift 22s ease-in-out infinite alternate}
.ring-lantern{position:absolute;top:0;width:20px;height:26px;border-radius:50% 50% 42% 42%;background:linear-gradient(#e4715d,#b23f33);box-shadow:0 0 22px #e4715d80}
.ring-lantern:before{content:'';position:absolute;left:6px;top:-9px;width:8px;height:9px;background:#6d5a49}
.lantern-one{left:22%;animation:lanternSway 4.6s ease-in-out infinite alternate}
.lantern-two{right:24%;animation:lanternSway 5.4s ease-in-out .8s infinite alternate}
.ring-stall{position:absolute;left:8%;right:8%;bottom:26%;height:44%}
.ring-awning{position:absolute;left:0;right:0;top:0;height:34%;border-radius:8px 8px 2px 2px;
  background:repeating-linear-gradient(90deg,#c95f4f 0 22px,#f0e6d2 22px 44px);box-shadow:0 8px 20px #00000055}
.ring-awning:after{content:'';position:absolute;left:0;right:0;bottom:-9px;height:11px;
  background:repeating-linear-gradient(90deg,#c95f4f 0 22px,#f0e6d2 22px 44px);
  clip-path:polygon(0 0,100% 0,100% 35%,94% 100%,88% 35%,82% 100%,76% 35%,70% 100%,64% 35%,58% 100%,52% 35%,46% 100%,40% 35%,34% 100%,28% 35%,22% 100%,16% 35%,10% 100%,4% 35%,0 100%)}
.ring-bunting{position:absolute;left:-2%;right:-2%;top:-13px;height:16px;border-top:2px solid #d8cbb0;
  background:repeating-linear-gradient(90deg,transparent 0 16px,#e2c47a 16px 24px,transparent 24px 40px)}
.ring-shelf{position:absolute;left:6%;right:6%;bottom:12%;display:flex;align-items:flex-end;justify-content:space-between;gap:8px}
.ring-shelf:before{content:'';position:absolute;inset:auto -2% -9px;height:8px;border-radius:3px;background:linear-gradient(#c49c62,#735334);box-shadow:0 4px 10px #0008}
.ring-prize{position:relative;z-index:1;min-width:86px;display:flex;flex-direction:column;align-items:center;gap:5px;padding:9px 13px 7px;border:1px solid #eeddb47a;border-radius:12px 12px 7px 7px;
  background:linear-gradient(145deg,#fff4d7d9,#d4b988d9);font-size:30px;line-height:1;filter:drop-shadow(0 6px 8px #00000066);transition:transform .2s,box-shadow .2s,border-color .2s;cursor:pointer}
.ring-prize small{color:#483923;font:600 9px var(--sans);letter-spacing:.06em;white-space:nowrap}
.ring-prize:hover:not(:disabled),.ring-prize.is-target{transform:translateY(-9px) scale(1.06);border-color:#ffe8a2;box-shadow:0 0 0 3px #ffdf8855,0 7px 22px #ffd67b55}
.ring-prize:disabled{opacity:.82;cursor:default}
.ring-prize.is-hit{animation:ringPrizeHit .6s ease-out}
.ring-prize.is-missed{opacity:.45}
.ring-counter{position:absolute;left:0;right:0;bottom:0;height:12%;border-radius:3px;background:linear-gradient(#7a5f45,#4b3a2b)}
.ringtoss-scene:before{content:'';position:absolute;z-index:0;left:0;right:0;bottom:0;height:28%;background:repeating-linear-gradient(168deg,#ffffff09 0 1px,transparent 1px 29px),linear-gradient(90deg,#4a3e3455,transparent 28%,#4a3e3455);pointer-events:none}
.ringtoss-scene:after{content:'';position:absolute;z-index:1;left:50%;bottom:8%;width:min(42%,270px);height:16%;border:2px solid #e7d9be78;border-radius:50%;background:radial-gradient(ellipse,#d4ad7040,transparent 70%);transform:translateX(-50%);pointer-events:none}
.ringtoss-scene[data-phase="power"] .ring-prize.is-target{animation:prizeCalling .65s ease-in-out infinite alternate}
.ringtoss-scene[data-phase="throw"]:after{opacity:.4}
.ringtoss-scene[data-phase="power"] .ring-power-zone{animation:powerZoneGlow .75s ease-in-out infinite alternate}
.ring-flying,.ring-landed{position:absolute;z-index:6;left:12%;bottom:33%;font-size:26px;opacity:0;transform:rotate(-18deg)}
.ringtoss-scene[data-phase="throw"] .ring-flying{opacity:1;animation:ringFly .95s cubic-bezier(.3,.7,.4,1) forwards}
.ringtoss-scene[data-phase="landed"] .ring-landed{opacity:1;transform:translate(var(--land-x,40%),-26px) rotate(0)}
.ringtoss-scene[data-slot="0"] .ring-landed{--land-x:12vw}
.ringtoss-scene[data-slot="1"] .ring-landed{--land-x:36vw}
.ringtoss-scene[data-slot="2"] .ring-landed{--land-x:60vw}
.ringtoss-scene[data-slot="0"] .ring-flying{--fly-x:12vw}
.ringtoss-scene[data-slot="1"] .ring-flying{--fly-x:36vw}
.ringtoss-scene[data-slot="2"] .ring-flying{--fly-x:60vw}
.ring-meter{position:absolute;z-index:4;left:24%;right:24%;bottom:5px;height:2px;background:#d7e2d62b}
.ring-meter i{display:block;width:0;height:100%;background:#d9bd7d}
.ringtoss-scene[data-phase="aim"] .ring-meter i{width:38%;transition:width 1.7s linear}
.ringtoss-scene[data-phase="power"] .ring-meter i{width:82%;transition:width 1.35s linear}
.ringtoss-scene[data-phase="landed"] .ring-meter i,.ringtoss-scene[data-phase="result"] .ring-meter i{width:100%;transition:width .5s linear}
@keyframes ringDrift{to{transform:translateX(26px)}}
@keyframes lanternSway{from{transform:rotate(-7deg)}to{transform:rotate(7deg)}}
@keyframes ringFly{0%{opacity:1;left:12%;bottom:33%}
  55%{left:var(--fly-x,36vw);bottom:62%}
  100%{opacity:1;left:var(--fly-x,36vw);bottom:34%}}
@keyframes ringPrizeHit{0%{transform:translateY(-6px) scale(1.14)}45%{transform:translateY(-16px) scale(1.3)}100%{transform:translateY(-6px) scale(1.14)}}
@keyframes prizeCalling{to{filter:drop-shadow(0 0 16px #ffe39a);transform:translateY(-13px) scale(1.1)}}
@keyframes powerZoneGlow{to{background:#a9e98c99;box-shadow:0 0 13px #9fe47799}}

/* ---- 踢毽子：老巷子、墙上的标语和一个上下翻飞的毽子 ---- */
.shuttlecock-scene{position:relative;min-height:310px;overflow:hidden;border:1px solid #443c33;border-radius:10px;
  background:linear-gradient(#1b2430 0%,#2a3038 40%,#3d3630 62%,#241f1b 100%);isolation:isolate}
.alley-wall{position:absolute;left:0;right:0;top:0;height:52%;background:linear-gradient(#3b3a3a,#4a443c 78%,#3a332c)}
.alley-wall:before{content:'';position:absolute;inset:0;opacity:.22;
  background:repeating-linear-gradient(90deg,#00000000 0 62px,#0000002e 62px 64px),repeating-linear-gradient(0deg,#00000000 0 30px,#00000026 30px 32px)}
.alley-wall:after{content:'';position:absolute;left:0;right:0;bottom:0;height:38%;
  background:linear-gradient(transparent,#2b2620b8)}
.alley-slogan{position:absolute;right:9%;top:26%;padding:4px 9px;border:1px solid #d8cfae40;border-radius:3px;
  color:#d9cba6;font:600 11px var(--serif);letter-spacing:4px;background:#5a4a3a33}
.alley-lamp{position:absolute;left:8%;top:8%;width:14px;height:14px;border-radius:50% 50% 40% 40%;background:#f0d79a;box-shadow:0 0 26px #f0d79a99}
.alley-window{position:absolute;top:20%;width:38px;height:30px;border:2px solid #6d6355;background:#1e2836}
.window-one{left:24%}
.window-two{left:42%;top:15%}
.alley-ground{position:absolute;left:0;right:0;bottom:0;height:44%;background:linear-gradient(#4c453c,#2f2a24)}
.alley-ground:before{content:'';position:absolute;inset:0;opacity:.35;background:repeating-linear-gradient(0deg,transparent 0 25px,#17141040 25px 27px),repeating-linear-gradient(90deg,transparent 0 58px,#17141035 58px 60px)}
.alley-ground:after{content:'';position:absolute;left:4%;right:4%;bottom:8%;height:44%;border:1px solid #ded4b22e;border-radius:50%;background:radial-gradient(ellipse,#d7be8521,transparent 68%);pointer-events:none}
.alley-tile{position:absolute;height:2px;background:#ffffff1c}
.tile-one{left:8%;right:52%;top:34%}
.tile-two{left:56%;right:6%;top:58%}
.kick-zone{position:absolute;left:0;right:0;bottom:6%;height:26%;border-top:1px dashed #9fd6ae66;
  background:linear-gradient(transparent,#9fd6ae29);box-shadow:inset 0 -24px 30px -22px #9fe0aa99}
.kick-zone:after{content:'好球区';position:absolute;right:12px;top:5px;color:#d7f0dcad;font:600 10px var(--sans);letter-spacing:2px}
.shuttlecock-scene.is-kick .kick-zone{background:linear-gradient(transparent,#9fd6ae4d)}
.kick-kid{position:absolute;left:38%;bottom:24%;width:44px;height:78px}
.kick-head{position:absolute;left:12px;top:0;width:17px;height:17px;border-radius:50%;background:#f0d3b2;box-shadow:0 -3px 0 #2c2620}
.kick-body{position:absolute;left:8px;top:16px;width:24px;height:34px;border-radius:9px 9px 4px 4px;background:#4a6b8a}
.kick-leg{position:absolute;left:14px;top:47px;width:6px;height:31px;border-radius:3px;background:#39506a;transform-origin:top}
.shuttlecock-scene.is-kick .kick-leg{transform:rotate(-26deg)}
.shuttlecock{position:absolute;z-index:5;left:52%;bottom:calc(26% + 128px);font-size:0;
  transform:translate(var(--shuttle-drift,0px),calc(var(--shuttle-pos,0) * 128px)) rotate(calc(var(--shuttle-pos,0) * 26deg));transition:transform .05s linear}
.shuttle-base{display:block;width:17px;height:11px;border-radius:50%;background:radial-gradient(#f2e3c0,#c9a463);box-shadow:0 2px 6px #00000066}
.shuttle-feather{position:absolute;left:5px;top:-15px;width:7px;height:16px;border-radius:50% 50% 30% 30%;
  background:linear-gradient(#f3ead6,#cdb894)}
.shuttlecock.is-kickable .shuttle-base{box-shadow:0 0 16px #ffe9a8cc}
.shuttlecock.is-kickable .shuttle-feather{animation:shuttleSpin .5s ease-in-out infinite alternate}
.shuttlecock.is-kickable{filter:drop-shadow(0 0 10px #ffe9a888)}
.kick-flash{position:absolute;z-index:6;left:50%;bottom:34%;color:#ffe9a8;opacity:0}
.shuttlecock-scene.is-kick .kick-flash{animation:kickFlash .45s ease-out}
@keyframes shuttleSpin{to{transform:rotate(16deg)}}
@keyframes kickFlash{0%{opacity:1;transform:translate(-10px,0) scale(.7)}100%{opacity:0;transform:translate(-34px,-26px) scale(1.3)}}

/* ---- 跳房子：水泥地和粉笔画的格子 ---- */
.hopscotch-scene{position:relative;min-height:310px;overflow:hidden;border:1px solid #4b4740;border-radius:10px;
  background:linear-gradient(#1f2734 0%,#2b3140 36%,#57514a 37%,#3a352f 100%);isolation:isolate}
.hop-wall{position:absolute;left:0;right:0;top:0;height:36%;background:linear-gradient(#3f4148,#565048)}
.hop-window{position:absolute;left:12%;top:22%;width:52px;height:38px;border:3px solid #6f6a5f;background:#20293a}
.hop-pipe{position:absolute;right:16%;top:0;width:8px;height:100%;background:linear-gradient(90deg,#6b6257,#4a443c)}
.hop-ground{position:absolute;left:0;right:0;bottom:0;height:64%;background:linear-gradient(#6a635a,#413b34)}
.hop-ground:before{content:'';position:absolute;inset:0;opacity:.35;background:radial-gradient(#ffffff1a 1px,transparent 1px) 0 0/16px 16px}
.hop-board{position:absolute;left:34%;top:auto;bottom:max(92px,25%);transform:translateX(-50%);display:grid;
  grid-template-columns:repeat(3,clamp(42px,6vh,58px));grid-auto-rows:clamp(29px,4vh,38px);gap:6px 9px;filter:drop-shadow(0 8px 8px #17130f44)}
.hop-board:before{content:'';position:absolute;z-index:-1;inset:-6px;border:2px dashed #f5edd1a1;border-radius:48% 48% 10px 10px;transform:rotate(-1deg)}
.hop-cell{display:grid;place-items:center;border:2px dashed #f2eadcc9;border-radius:5px;background:#fffefa1a;
  color:#f2eadc;font:600 15px var(--serif);text-shadow:0 2px 4px #25211bcc;transition:transform .14s,background .14s,border-color .14s;cursor:pointer}
.hop-cell:hover{border-color:#ffe9a8cc}
.hop-cell-1{grid-area:1/2}
.hop-cell-2{grid-area:2/1}
.hop-cell-3{grid-area:2/3}
.hop-cell-4{grid-area:3/2}
.hop-cell-5{grid-area:4/1}
.hop-cell-6{grid-area:4/3}
.hop-cell-7{grid-area:5/1}
.hop-cell-8{grid-area:5/2}
.hop-cell.is-flash{border-color:#ffe9a8;background:#ffe9a840;transform:scale(1.08)}
.hop-cell.is-correct{border-color:#a7e3a7;background:#8fd6a455;box-shadow:inset 0 0 18px #a5ef9f44,0 0 12px #a5ef9f55}
.hop-cell.is-wrong{border-color:#e59a86;background:#e59a8636;animation:hopWrong .3s ease-in-out}
.hop-bag{position:absolute;left:calc(50% + 62px);bottom:12%;font-size:19px;filter:drop-shadow(0 5px 6px #00000066);transition:left .18s ease-out,top .18s ease-out;pointer-events:none}
.hop-bag.is-jumping{animation:shoeHop .24s ease-out}
.hopscotch-scene[data-phase="watch"] .hop-cell{pointer-events:none}
@keyframes shoeHop{0%{translate:0 0}45%{translate:0 -15px}100%{translate:0 0}}
@keyframes hopWrong{0%,100%{transform:translateX(0)}25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}

/* 跳房子：格子摆左边、操作条摆右边，互不遮挡，整块都落在底部信息带之上 */
.hopscotch-scene .scene-play{left:auto;right:16px;top:auto;bottom:12px;transform:none;width:min(320px,40%)}
.hopscotch-scene .scene-stage:has(> .scene-play:not([hidden])){--scene-play-band:0px}
.ringtoss-scene .scene-backdrop,.shuttlecock-scene .scene-backdrop,.hopscotch-scene .scene-backdrop{background:transparent}
/* 窄屏：格子在下、操作条在上，两块都躲开底部信息带 */
@media(max-width:680px){
  .hopscotch-scene .hop-board{left:50%;top:auto;bottom:90px;transform:translateX(-50%);
    grid-template-columns:repeat(3,36px);grid-auto-rows:25px;gap:4px 8px}
  .ring-shelf{left:3%;right:3%;gap:3px}
  .ring-prize{min-width:0;flex:1;padding:7px 5px;font-size:27px}
  .ring-prize small{font-size:8px}
  .hopscotch-scene .scene-play{left:50%;right:auto;top:8px;bottom:auto;transform:translateX(-50%);width:min(360px,96%)}
  .hopscotch-scene .scene-subtitle{display:none}
  /* 跳房子窄屏：格子让开顶部操作条和底部状态字 */
  .hopscotch-scene .scene-stage:has(> .scene-play:not([hidden])){--scene-play-band:34px}
  .hopscotch-scene .scene-stage:has(> .scene-play:not([hidden])) .hop-board{bottom:124px}
}
.day-scene.ringtoss-scene .scene-backdrop img,.day-scene.shuttlecock-scene .scene-backdrop img,.day-scene.hopscotch-scene .scene-backdrop img{opacity:.72}
/* ---- 白天：摊位和巷子一起亮起来 ---- */
.day-scene.ringtoss-scene,.ringtoss-scene.day-scene{background:linear-gradient(#a9d6ea 0%,#cfe6ee 44%,#b8a184 45%,#8d7a63 100%)}
.day-scene .ring-sky{background:radial-gradient(ellipse at 80% 112%,#ffe08a66,transparent 56%)}
.day-scene .ring-cloud{background:#ffffffcc}
.day-scene .ring-lantern{background:linear-gradient(#f08a72,#c8503c);box-shadow:0 0 18px #f08a7255}
.day-scene .ring-prize{border-color:#987a4a66;background:linear-gradient(145deg,#fff8e6,#e8d5ae);box-shadow:0 4px 12px #45331c33}
.day-scene .ring-choice-hint{color:#526449}
.game-dialog.game-dialog-day .street-power .ring-power-zone{border-color:#47784a;background:#77bf6b66}
.day-scene.ringtoss-scene{color:#2d3a33}
.day-scene .shuttlecock-scene,.shuttlecock-scene.day-scene{background:linear-gradient(#cfe4f2 0%,#e6efe0 40%,#cbb89c 62%,#9c8b74 100%)}
.day-scene .alley-wall{background:linear-gradient(#ded8c9,#cdc4b0 80%,#bcb19b)}
.day-scene .alley-wall:after{background:linear-gradient(transparent,#8f8570a8)}
.day-scene .alley-ground{background:linear-gradient(#c2b49c,#9c8d75)}
.day-scene .alley-ground:before{opacity:.22;background:repeating-linear-gradient(0deg,transparent 0 25px,#655b4c44 25px 27px),repeating-linear-gradient(90deg,transparent 0 58px,#655b4c33 58px 60px)}
.day-scene .alley-slogan{color:#8a5a4a;border-color:#8a5a4a55;background:#ffffff4d}
.day-scene .alley-window{background:#2f4a63;border-color:#a89c86}
.day-scene .hopscotch-scene,.hopscotch-scene.day-scene{background:linear-gradient(#cfe4f2 0%,#e2e8e0 36%,#cdc3b4 37%,#a99c8a 100%)}
.day-scene .hop-wall{background:linear-gradient(#ded7c6,#c8bfab)}
.day-scene .hop-ground{background:linear-gradient(#d6cbb6,#b3a48d)}
.day-scene .hop-cell{border-color:#5d6b5c;color:#3d4a3d;background:#ffffff26}
.day-scene .hop-cell{text-shadow:none}
.day-scene .hop-board:before{border-color:#fff8e8d6}
.day-scene .hop-cell.is-flash{border-color:#c98a2f;background:#ffd98a70}
.day-scene .hop-cell.is-correct{border-color:#3f7d5c;background:#8fd6a470}
.game-dialog.game-dialog-day .kick-zone:after{color:#315b42}
.day-scene .hop-bag{filter:drop-shadow(0 4px 5px #00000033)}

/* ---- 地标玩法图标 ---- */
.toss-icon{background:#3d3140;color:#d9b06e}
.shuttle-icon{background:#2f3b46;color:#9fd6ae}
.hop-icon{background:#3a3529;color:#e0c98a}

/* ---- 自定义小游戏：管理员上传的网页小游戏跑在沙箱 iframe 里 ---- */
.custom-scene{position:relative;min-height:430px;overflow:hidden;border:1px solid #ded8c6;border-radius:12px;background:#f4f1e7}
.custom-scene.night-scene{border-color:#3b4a55;background:#101c25}
.custom-scene .scene-backdrop{background:transparent}
.custom-stage{position:relative;min-height:430px;padding:14px}
.custom-frame{display:block;width:100%;height:min(56vh,440px);border:0;border-radius:10px;background:#fff}
.custom-frame[hidden]{display:none}
.custom-hud{position:absolute;left:26px;right:26px;top:26px;z-index:6;display:flex;justify-content:space-between;align-items:center;gap:12px;
  padding:9px 13px;border-radius:9px;background:#0f1c24e6;color:#e8f0ea;font-size:11px;letter-spacing:.4px}
.custom-hud[hidden]{display:none}
.custom-hud span{color:#f0e2b4;font-variant-numeric:tabular-nums}
.custom-note{display:block;margin-top:7px;color:#8d968f;font-size:10px;font-style:normal;letter-spacing:.3px}
.game-dialog.game-dialog-day .custom-note{color:#6f8378}
.custom-scene .street-outcome{margin:22px auto 10px}
.custom-scene .scene-start{background:#f6f3eaee}
.custom-scene.night-scene .scene-start{background:#0d1a22e6}
/* 音效开关：和关闭按钮并排 */
.game-dialog-head-actions{display:flex;align-items:center;gap:7px}
#sfx-toggle{font-size:15px;line-height:1}

/* =======================================================================
   视觉升级（2026）：游戏弹窗 / 聊天室 / 卡片质感
   ======================================================================= */
.game-dialog{border-radius:16px;box-shadow:0 28px 90px #02060ce0}
.game-dialog.game-dialog-day{border-color:var(--line);background:#fffdf7;color:var(--ink);box-shadow:0 30px 90px -40px #1f2a2466}
.game-dialog.game-dialog-day::backdrop{background:#8fa08e40;backdrop-filter:blur(2px)}
.game-dialog-head{padding:14px 18px;align-items:center}
.game-dialog.game-dialog-day .game-dialog-head{border-bottom-color:var(--line)}
.game-dialog-head h2,.game-dialog.game-dialog-day .game-dialog-head h2{font-family:var(--serif);font-weight:700;letter-spacing:.02em}
.game-dialog-head .eyebrow{letter-spacing:2.4px}
.game-dialog-body{padding:16px 18px 26px}
.game-item-row{border-radius:12px;transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease}
.game-dialog.game-dialog-day .game-item-row{background:#fbfcf7;border-color:#e9ece0}
.game-dialog.game-dialog-day .game-item-row:hover{border-color:#cfdcc8;box-shadow:0 10px 26px -18px #1f2a2459}
.game-item-row b{letter-spacing:.01em}
.game-item-row button{border-radius:999px;padding:7px 15px;font-weight:600;letter-spacing:.02em}
.game-dialog.game-dialog-day .game-item-row button{background:var(--green-dark)}
.game-dialog.game-dialog-day .game-item-row button.secondary-game-button{background:#f1f6ee;border-color:#d6e2cf;color:#3a5344}
.game-item-row button:disabled{opacity:.55;box-shadow:none}

/* 聊天室 */
.chat-stream{border-radius:14px}
.game-dialog.game-dialog-day .chat-stream{background:#f8faf4;border-color:var(--line)}
.chat-line{border-radius:12px}
.chat-bubble{border-radius:14px;line-height:1.72}
.game-dialog.game-dialog-day .chat-bubble{background:#fff;border-color:#e6eadd;box-shadow:0 6px 18px -14px #1f2a2447}
.game-dialog.game-dialog-day .chat-line.is-mine .chat-bubble{background:#e6f0e4;border-color:#d3e2cd}
.chat-form input{border-radius:999px}
.chat-send,.chat-tools button{border-radius:999px}
.game-dialog.game-dialog-day .chat-send{background:var(--green-dark);color:#f4fbf5}

/* 游戏场景 HUD 与动作按钮 */
.street-actions button,.street-action,.custom-hud,.exam-music{border-radius:999px}
.game-dialog.game-dialog-day .street-actions button{background:var(--green-dark)}
.exam-card,.exam-result{border-radius:14px}

/* 音效 / 关闭按钮：保持弹窗右上角的圆形样式（原本是 head>button，现在包了一层） */
.game-dialog-head-actions button{display:grid;place-items:center;width:31px;height:31px;padding:0;border:1px solid #3d5260;border-radius:50%;background:#172634;color:#bbcacd;font-size:19px;line-height:1}
.game-dialog-head-actions button:hover{border-color:#557082;color:#eaf2f1}
.game-dialog-head-actions #sfx-toggle{font-size:15px}
.game-dialog.game-dialog-day .game-dialog-head-actions button{border-color:#d8e2d5;background:#f2f7ef;color:#4e6459}
.game-dialog.game-dialog-day .game-dialog-head-actions button:hover{border-color:#b9cdb6;color:#2e4a39;background:#eaf2e6}

/* 背景音乐开关：和音效、关闭按钮并排 */
#bgm-toggle.is-off{opacity:.42;text-decoration:line-through}

/* ===================== 地图高度跟随右侧玩法列表自适应，且永不超出屏幕 ===================== */
.night-city-card{--map-view-cap:min(calc(100vh - 152px),780px)}
.night-map-layout{align-items:stretch;max-height:var(--map-view-cap);overflow:hidden}
.night-map{height:auto;min-height:402px;max-height:var(--map-view-cap)}
.landmark-panel{min-height:402px;max-height:var(--map-view-cap);padding-bottom:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scrollbar-width:thin}
.landmark-panel::-webkit-scrollbar{width:6px}
.landmark-panel::-webkit-scrollbar-thumb{border-radius:999px;background:#ffffff2e}
.landmark-panel::-webkit-scrollbar-track{background:transparent}
.night-city-card.map-mode-day .landmark-panel::-webkit-scrollbar-thumb{background:#00000022}
/* 底部操作条常驻：无论玩法多少，「开始玩法 / 打卡」永远停在面板底部可点 */
.landmark-panel-footer{position:sticky;bottom:0;z-index:3;padding:12px 0 15px;background:#0e1d2b;border-top:1px solid #2a3f50;box-shadow:0 -16px 26px -20px #000000e0}
.night-city-card.map-mode-day .landmark-panel-footer{background:#f2f6ef;border-top-color:#e0e8db;box-shadow:0 -16px 26px -22px #4a5c4a40}
.night-map-layout.is-map-expanded{max-height:none;overflow:visible}
.night-map-layout.is-map-expanded .landmark-panel{max-height:none;padding-bottom:17px}
@media(max-width:800px){.night-map-layout{max-height:none;overflow:visible}.night-map{height:325px;min-height:325px;max-height:none}.landmark-panel{min-height:0;max-height:none;overflow:visible;padding-bottom:0}.landmark-panel-footer{position:static}}

/* ===================== 我的城市：等级名额与移除 ===================== */
.side-title #city-quota{border:1px solid #e6e2d2;border-radius:999px;padding:2px 9px;background:#f6f4ea;color:#8a8567;font-size:9px;letter-spacing:.4px}
.city-row-wrap{display:flex;align-items:center;gap:2px}
.city-row-wrap .city-row{flex:1;min-width:0}
.city-remove{flex:none;width:27px;height:27px;border:0;border-radius:8px;background:transparent;color:#b0b3a8;font-size:11px;line-height:1;opacity:.5;transition:.16s}
.city-remove:hover{opacity:1;background:#f3e3dd;color:#a9503f}
.city-remove:disabled{opacity:.25;cursor:default}

/* ===================== 城里新鲜事：分页 ===================== */
.feed-pagination{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-top:14px;padding:11px 15px;border:1px solid #eae8df;border-radius:14px;background:#fffefa;box-shadow:0 16px 34px -30px #364436;color:#8b948a;font-size:10.5px}
.feed-page-summary{letter-spacing:.3px}
.feed-page-size{display:flex;align-items:center;gap:6px}
.feed-page-size select{padding:5px 8px;border:1px solid #e2ddd0;border-radius:8px;background:#fbfaf4;color:#4f5f57;font-size:10.5px}
.feed-page-nav{display:flex;gap:7px}
.feed-page-nav button{padding:6px 14px;border:1px solid #dfe3d8;border-radius:999px;background:#f4f6ef;color:#41584a;font-size:10.5px;transition:.16s}
.feed-page-nav button:hover:not(:disabled){background:#e8efe2;border-color:#b9ccb4}
.feed-page-nav button:disabled{opacity:.45;cursor:not-allowed}
.post-card.search-hit{animation:searchHit 2.2s ease-out}
@keyframes searchHit{0%,55%{box-shadow:0 0 0 2px #b58e5066,0 20px 40px -28px #364436;background:#fffdf3}100%{box-shadow:none}}

/* ===================== 找人 / 找话题 + 城里的老故事 ===================== */
.game-dialog{--gd-fg:#e8eeee;--gd-muted:#9aadb1;--gd-line:#2b3e4b;--gd-panel:#142330;--gd-accent:#b58e50;--gd-accent-fg:#fff8e8;--gd-input:#0d1a24}
.game-dialog.game-dialog-day{--gd-fg:#2d3a33;--gd-muted:#6f8078;--gd-line:#e3eae0;--gd-panel:#f7faf4;--gd-accent:#3f7d5c;--gd-accent-fg:#f4fbf5;--gd-input:#ffffff}

.search-hub,.memory-wall{display:flex;flex-direction:column;gap:13px}
.search-hub-form{display:flex;gap:9px}
.search-hub-form input{flex:1;min-width:0;padding:11px 14px;border:1px solid var(--gd-line);border-radius:11px;background:var(--gd-input);color:var(--gd-fg);font-size:12.5px}
.search-hub-form input:focus{outline:none;border-color:#7fb39a;box-shadow:0 0 0 3px #7fb39a26}
.search-hub-form button{padding:0 20px;border:0;border-radius:11px;background:var(--gd-accent);color:var(--gd-accent-fg);font-size:12px;font-weight:600}
.search-hub-hint,.memory-wall-lead{margin:0;color:var(--gd-muted);font-size:10.5px;line-height:1.9}
.search-hub-results{display:flex;flex-direction:column;gap:16px}
.search-block h3{margin:0 0 8px;color:var(--gd-fg);font:600 13px var(--serif);letter-spacing:.5px}
.search-people,.search-topics{display:flex;flex-direction:column;gap:7px}
.search-hub-empty{margin:0;padding:16px;text-align:center;color:var(--gd-muted);font-size:11px;border:1px dashed var(--gd-line);border-radius:10px}
.search-person{display:flex;align-items:center;gap:10px;padding:9px 11px;border:1px solid var(--gd-line);border-radius:11px;background:var(--gd-panel)}
.search-person .avatar{width:34px;height:34px;font-size:14px}
.search-person-info{display:flex;flex-direction:column;gap:3px;min-width:0}
.search-person-info b{color:var(--gd-fg);font-size:12px}
.search-person-info small{color:var(--gd-muted);font-size:9.5px}
.search-person button{margin-left:auto;flex:none;padding:7px 14px;border:0;border-radius:999px;background:var(--gd-accent);color:var(--gd-accent-fg);font-size:10.5px}
.search-person button:disabled{background:transparent;border:1px solid var(--gd-line);color:var(--gd-muted);cursor:default}
.search-topic{display:flex;flex-direction:column;gap:5px;padding:11px 13px;border:1px solid var(--gd-line);border-radius:11px;background:var(--gd-panel);text-align:left;transition:.16s}
.search-topic:hover{border-color:var(--gd-accent);transform:translateY(-1px)}
.search-topic b{color:var(--gd-fg);font-size:11.5px;font-weight:600;line-height:1.6}
.search-topic small{color:var(--gd-muted);font-size:9.5px}

.memory-compose{display:flex;flex-direction:column;gap:9px;padding:13px;border:1px solid var(--gd-line);border-radius:13px;background:var(--gd-panel)}
.memory-compose textarea{width:100%;box-sizing:border-box;min-height:88px;resize:vertical;padding:11px 13px;border:1px solid var(--gd-line);border-radius:10px;background:var(--gd-input);color:var(--gd-fg);font:12.5px/1.8 var(--sans)}
.memory-compose textarea:focus{outline:none;border-color:#7fb39a;box-shadow:0 0 0 3px #7fb39a26}
.memory-attach{display:flex;align-items:center;gap:7px;color:var(--gd-muted);font-size:10.5px}
.memory-compose button{align-self:flex-end;padding:9px 22px;border:0;border-radius:999px;background:var(--gd-accent);color:var(--gd-accent-fg);font-size:11.5px;font-weight:600}
.memory-list{display:flex;flex-direction:column;gap:9px}
.memory-item{padding:12px 14px;border:1px solid var(--gd-line);border-radius:12px;background:var(--gd-panel)}
.memory-item-head{display:flex;align-items:center;gap:9px;margin-bottom:7px}
.memory-item-head .avatar{width:28px;height:28px;font-size:12px}
.memory-item-head>div{display:flex;flex-direction:column;gap:2px;min-width:0}
.memory-item-head b{color:var(--gd-fg);font-size:11.5px}
.memory-item-head small{color:var(--gd-muted);font-size:9px}
.memory-item p{margin:0;color:var(--gd-fg);font-size:12px;line-height:1.95;white-space:pre-wrap}
.memory-empty{margin:0;padding:18px;text-align:center;color:var(--gd-muted);font-size:11px;border:1px dashed var(--gd-line);border-radius:12px}
.memory-more{align-self:center;padding:8px 20px;border:1px solid var(--gd-line);border-radius:999px;background:transparent;color:var(--gd-muted);font-size:10.5px}
.memory-more:hover{border-color:var(--gd-accent);color:var(--gd-fg)}
.side-title #city-quota.is-over{border-color:#e6c9bd;background:#fbeee7;color:#b4643f}
.memory-delete{margin-left:auto;flex:none;width:24px;height:24px;border:0;border-radius:7px;background:transparent;color:var(--gd-muted);font-size:10px;line-height:1;opacity:.5;transition:.16s}
.memory-delete:hover{opacity:1;background:#a9503f22;color:#d07a63}

/* =======================================================================
   小游戏：开局玩法说明卡（目标 / 步骤 / 示意图）
   ======================================================================= */
.scene-intro{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;
  scrollbar-width:thin;overflow:auto;overscroll-behavior:contain;padding:12px 12px 14px;background:#04101ad4}
.scene-intro .intro-card{margin-block:auto}
.game-dialog.game-dialog-day .scene-intro{background:#eef4ece0}
.intro-card{width:min(600px,96%);display:flex;flex-direction:column;gap:8px;padding:14px 16px;
  border:1px solid #ffffff21;border-radius:14px;background:#0b1a24f5;box-shadow:0 24px 52px #0009;text-align:left}
.game-dialog.game-dialog-day .intro-card{background:#fffefaf7;border-color:#e4eae0;box-shadow:0 24px 52px #2b3a3326}
.intro-kicker{align-self:flex-start;padding:3px 10px;border-radius:999px;background:#c8a05a;color:#1d1508;
  font-size:9px;font-weight:700;letter-spacing:3px}
.intro-head b{display:block;margin-top:8px;font:600 19px var(--serif);letter-spacing:1px;color:#f4ecda}
.intro-head small{display:block;margin-top:4px;color:#9db3ae;font-size:11px}
.game-dialog.game-dialog-day .intro-head b{color:#26382f}
.game-dialog.game-dialog-day .intro-head small{color:#6d8479}
.intro-body{display:flex;gap:14px;align-items:center;flex-wrap:wrap}
.intro-art{flex:1 1 230px;min-width:186px;padding:6px 9px 5px;border:1px solid #ffffff16;border-radius:10px;background:#ffffff0d}
.game-dialog.game-dialog-day .intro-art{background:#f2f7f0;border-color:#e6ece2}
.intro-art svg{display:block;width:100%;height:auto}
.intro-art span{display:block;margin-top:3px;color:#8fa7a2;font-size:9.5px;text-align:center}
.game-dialog.game-dialog-day .intro-art span{color:#6d8479}
.intro-steps{flex:1 1 200px;margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px}
.intro-steps li{display:flex;gap:8px;align-items:flex-start;color:#cfdedb;font-size:11px;line-height:1.5}
.intro-steps li i{flex:0 0 auto;width:17px;height:17px;margin-top:1px;border-radius:50%;background:#c8a05a;color:#1d1508;
  font:700 10px/17px var(--serif);text-align:center;font-style:normal}
.game-dialog.game-dialog-day .intro-steps li{color:#3f5548}
.intro-goal{margin:0;color:#f0e2b8;font-size:11.5px;line-height:1.6}
.game-dialog.game-dialog-day .intro-goal{color:#7a5f22}
.intro-cost{margin:0;color:#8ea39e;font-size:10px}
.game-dialog.game-dialog-day .intro-cost{color:#7b8f86}
/* 开局难度档：三档卡片，选中的那档高亮 */
.intro-picks{display:flex;gap:8px;flex-wrap:wrap}
.intro-pick{flex:1 1 150px;min-width:140px;display:flex;flex-direction:column;gap:2px;padding:8px 10px;
  border:1px solid #ffffff1f;border-radius:10px;background:#ffffff0d;cursor:pointer;transition:.16s}
.intro-pick:hover{background:#ffffff16;border-color:#ffffff33}
.intro-pick input{display:none}
.intro-pick b{color:#e8dfc6;font-size:12px;letter-spacing:.6px}
.intro-pick small{color:#8fa7a2;font-size:9.5px;line-height:1.4}
.intro-pick.is-picked{border-color:#c8a05a;background:#c8a05a1f;box-shadow:inset 0 0 0 1px #c8a05a55}
.intro-pick.is-picked b{color:#f0d79b}
.intro-pick.is-picked small{color:#c6b98f}
.game-dialog.game-dialog-day .intro-pick{background:#f4f7f2;border-color:#e3e9e0}
.game-dialog.game-dialog-day .intro-pick:hover{background:#eef3ec}
.game-dialog.game-dialog-day .intro-pick b{color:#2f4a3c}
.game-dialog.game-dialog-day .intro-pick small{color:#6d8479}
.game-dialog.game-dialog-day .intro-pick.is-picked{border-color:#3f7d5c;background:#3f7d5c14;box-shadow:inset 0 0 0 1px #3f7d5c44}
.game-dialog.game-dialog-day .intro-pick.is-picked b{color:#2c5c44}
.game-dialog.game-dialog-day .intro-pick.is-picked small{color:#5c7a6a}
/* 说明卡上的「可能得到什么」 */
.intro-spoils{margin:0;padding:7px 10px;border-radius:9px;background:#ffffff0d;border:1px solid #ffffff14;
  color:#a9c0bb;font-size:10.5px;line-height:1.5}
.game-dialog.game-dialog-day .intro-spoils{background:#f2f7f0;border-color:#e6ece2;color:#54705f}
.intro-card .street-record{display:block;color:#8fc7a0;font-size:10px}
.intro-card .street-board{margin:0}
/* 开始按钮做成一条常驻底栏：内容再长也点得到，又不会压住上面的文字 */
.intro-footer{position:sticky;bottom:0;z-index:3;align-self:stretch;margin:0 -16px -14px;padding:9px 16px 12px;
  display:flex;flex-direction:column;align-items:center;gap:7px;background:linear-gradient(transparent,#0b1a24 30%)}
.intro-scroll-hint{padding:3px 12px;border-radius:999px;background:#c8a05a;color:#1d1508;font-size:9.5px;letter-spacing:1px;
  animation:hintBob 1.4s ease-in-out infinite}
.intro-scroll-hint[hidden]{display:none}
@keyframes hintBob{0%,100%{transform:translateY(0)}50%{transform:translateY(3px)}}
.game-dialog.game-dialog-day .intro-footer{background:linear-gradient(transparent,#fffefa 32%)}
.scene-intro button[data-scene-start]{padding:12px 42px;
  border:0;border-radius:999px;background:#c8a05a;color:#1d1508;font:700 13px/1 var(--serif);letter-spacing:3px;cursor:pointer;
  box-shadow:0 10px 26px #0000004d;transition:.18s}
.scene-intro button[data-scene-start]:hover{background:#d8ae63;transform:translateY(-1px)}
.game-dialog.game-dialog-day .scene-intro button[data-scene-start]{background:#3f7d5c;color:#f4fbf5;box-shadow:0 10px 26px #2b3a331f}

/* 示意图配色：白天 / 夜晚各一套 */
.guide-svg .ga-track{fill:#5d707b}
.guide-svg .ga-zone{fill:#7fd8a5}
.guide-svg .ga-pointer{fill:#ffd76b}
.guide-svg .ga-water{fill:#2b5566}
.guide-svg .ga-line{fill:none;stroke:#9fc0c9;stroke-width:1}
.guide-svg .ga-bob{fill:#e2705a}
.guide-svg .ga-rod{fill:none;stroke:#c9a978;stroke-width:2.4;stroke-linecap:round}
.guide-svg .ga-arc{fill:none;stroke:#b9c9c4;stroke-width:1.6;stroke-dasharray:5 5}
.guide-svg .ga-floor,.guide-svg .ga-soil{fill:#3d5545}
.guide-svg .ga-seed{fill:#d9c48a}
.guide-svg .ga-sprout{fill:none;stroke:#7fd8a5;stroke-width:2.6;stroke-linecap:round}
.guide-svg .ga-fruit{fill:#e2705a}
.guide-svg .ga-prize{fill:#8a6a45}
.guide-svg .ga-ring{fill:none;stroke:#e0b463;stroke-width:3.4}
.guide-svg .ga-shuttle{fill:#c8a05a}
.guide-svg .ga-boot{fill:#c8a05a}
.guide-svg .ga-grid{fill:#ffffff14;stroke:#ffffff2e;stroke-width:1}
.guide-svg .ga-grid.ga-zone{fill:#7fd8a54d;stroke:#7fd8a5}
.game-dialog.game-dialog-day .guide-svg .ga-track{fill:#c3cfc8}
.game-dialog.game-dialog-day .guide-svg .ga-water{fill:#bfe0ec}
.game-dialog.game-dialog-day .guide-svg .ga-line{stroke:#8fb6c4}
.game-dialog.game-dialog-day .guide-svg .ga-floor,
.game-dialog.game-dialog-day .guide-svg .ga-soil{fill:#cfe0c4}
.game-dialog.game-dialog-day .guide-svg .ga-grid{fill:#e8eee5;stroke:#d3ddd0}
.game-dialog.game-dialog-day .guide-svg .ga-grid.ga-zone{fill:#bfe6cd;stroke:#5f9e78}
.game-dialog.game-dialog-day .guide-svg .ga-arc{stroke:#b6bdb3}

/* 场景顶部进度条：第几轮 / 成绩如何 */
.scene-progress{position:absolute;z-index:13;right:14px;top:12px;max-width:min(58%,430px);display:flex;align-items:center;
  gap:9px;padding:6px 12px;border-radius:999px;background:#04101ad0;color:#dfe9e5;font-size:10.5px;backdrop-filter:blur(3px)}
.scene-progress[hidden]{display:none}
.scene-progress b{color:#f0e2b8;font-weight:600;white-space:nowrap}
.scene-progress .progress-track{flex:1;min-width:56px;height:5px;border-radius:3px;background:#ffffff26;overflow:hidden}
.scene-progress .progress-track i{display:block;height:100%;width:0;border-radius:3px;background:#7fd8a5;transition:width .3s ease}
.scene-progress em{font-style:normal;color:#a9c0bb;white-space:nowrap}
.game-dialog.game-dialog-day .scene-progress{background:#ffffffdb;color:#3f5548}
.game-dialog.game-dialog-day .scene-progress b{color:#7a5f22}
.game-dialog.game-dialog-day .scene-progress em{color:#6d8479}
.game-dialog.game-dialog-day .scene-progress .progress-track{background:#dfe7dc}

/* 结算面板里的本局成绩 */
.scene-perf{display:block;margin-top:4px;color:#8fc7a0 !important;font-size:10px !important}
.game-dialog.game-dialog-day .scene-perf{color:#3f7d5c !important}

/* Interactive fishing spots and care feedback for the neighborhood mini-games. */
.fishing-cast-spots{position:absolute;z-index:5;inset:8% 5% auto;display:flex;justify-content:space-around;align-items:center;gap:8px}
.fishing-cast-spots[hidden]{display:none}
.fishing-cast-spots button{display:flex;flex-direction:column;align-items:center;gap:4px;min-width:74px;padding:7px 10px;border:1px solid #d8f2e6a8;border-radius:12px;background:#0c2838d9;color:#e8f6e9;font-family:inherit;font-size:11px;font-weight:600;box-shadow:0 5px 16px #061a2480;cursor:pointer;transition:transform .18s ease,background .18s ease}
.fishing-cast-spots button span{font-size:17px;color:#b9ebdb;text-shadow:0 0 10px #c5fff2}
.fishing-cast-spots button:hover,.fishing-cast-spots button:focus-visible{transform:translateY(-4px) scale(1.04);background:#23556adf;outline:2px solid #f4d995}
.fishing-scene[data-phase="target"] .fishing-line,.fishing-scene[data-phase="target"] .fishing-bobber{opacity:0}
.fishing-scene[data-phase="target"] .fishing-cast-spots{animation:spotArrive .35s ease-out both}
.fishing-scene[data-spot="shore"] .fishing-line,.fishing-scene[data-spot="shore"] .fishing-bobber{left:34%}
.fishing-scene[data-spot="open"] .fishing-line,.fishing-scene[data-spot="open"] .fishing-bobber{left:59%}
.fishing-scene[data-spot="deep"] .fishing-line,.fishing-scene[data-spot="deep"] .fishing-bobber{left:78%}
.fishing-scene.day-scene .fishing-cast-spots button{background:#14546cdb;color:#fff}
.farming-weeds{position:absolute;inset:28% 8% 22%;z-index:2;pointer-events:none}
.farming-weeds i{position:absolute;bottom:0;width:5px;height:20px;border-radius:100% 0;background:#9aaa58;opacity:0;transform:scaleY(0);transform-origin:bottom}
.farming-weeds i:before,.farming-weeds i:after{content:"";position:absolute;width:12px;height:4px;border-radius:100% 0;background:inherit}
.farming-weeds i:before{left:-8px;top:7px;transform:rotate(-25deg)}
.farming-weeds i:after{left:1px;top:12px;transform:rotate(28deg)}
.farming-weeds i:nth-child(1){left:18%}.farming-weeds i:nth-child(2){left:76%;height:24px}.farming-weeds i:nth-child(3){left:88%;height:15px}
.farming-scene[data-phase="grow"] .farming-weeds i,.farming-scene[data-phase="water"] .farming-weeds i{opacity:.72;transform:scaleY(1);transition:transform .35s ease}
.farming-scene[data-phase="weed"] .farming-weeds i{opacity:0;transform:scaleY(0);transition:transform .28s ease,opacity .3s ease}
.farming-scene[data-phase="water"] .farming-field:after{content:"💧";position:absolute;z-index:4;left:50%;top:8%;font-size:20px;animation:waterDrop .7s ease-in infinite}
.farming-scene[data-phase="water"] .farming-sprout{filter:drop-shadow(0 0 9px #a8e7ff)}
.farming-scene[data-phase="weed"] .farming-field .soil-row{filter:brightness(1.18);transition:filter .35s ease}
@keyframes spotArrive{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
@keyframes waterDrop{0%{opacity:0;transform:translate(-16px,-10px) scale(.75)}45%{opacity:1}100%{opacity:0;transform:translate(17px,38px) scale(1.1)}}
@media(max-width:520px){.fishing-cast-spots{inset:5% 2% auto;gap:4px}.fishing-cast-spots button{min-width:0;padding:6px 8px;font-size:10px}}

/* 弹玻璃球：旧院落沙地、粉笔圈和可拖拽弹珠对局 */
.marble-scene{position:relative;overflow:hidden;border:1px solid #80684c;border-radius:14px;background:#302c25;isolation:isolate}
.marble-shell{position:relative;min-height:390px;padding:16px;background:radial-gradient(ellipse at 50% 42%,#786044 0,#4d4235 68%,#292821 100%)}
.marble-shell>.scene-subtitle{position:relative;z-index:2;display:block;margin:0 0 10px;color:#e6d7bb;font-size:11px}
.marble-scene .scene-intro{position:relative;z-index:4;max-height:74vh}
.marble-scene .intro-card{max-width:650px}
.marble-scene .intro-art{background:linear-gradient(145deg,#d8bd8e,#9b8058)}
.marble-scene .intro-art:after{content:'◉  ◌  ◉';display:block;color:#395b63;font:30px Georgia,serif;letter-spacing:10px}
.marble-scene .intro-art svg{display:none}
[data-marble-game]{position:relative;z-index:2}
.marble-menu,.marble-match{max-width:1020px;margin:0 auto;padding:18px;border:1px solid #f7e4bd35;border-radius:16px;background:linear-gradient(145deg,#202b2beF,#302c27f2);box-shadow:0 18px 55px #100d0a66;color:#f3e8d1}
.marble-menu-title{display:flex;flex-direction:column;gap:5px;margin:0 0 14px}
.marble-menu-title span{font:700 24px var(--serif);color:#f8e6be}
.marble-menu-title small{font-size:11px;color:#b8b3a5}
.marble-mode-picks{display:grid;grid-template-columns:1fr 1fr;gap:9px}
.marble-mode-picks button{display:grid;gap:4px;padding:12px 14px;text-align:left;border:1px solid #d3bb8850;border-radius:11px;background:#fff1d00b;color:#f0e3cc;cursor:pointer}
.marble-mode-picks button b{font:700 15px var(--serif)}
.marble-mode-picks button small{font-size:10px;color:#b8b3a5}
.marble-mode-picks button.is-active{border-color:#e6c27a;background:#c99d4b24;box-shadow:inset 0 0 0 1px #d2aa6166}
.marble-level-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:16px 0 9px;font-size:11px;color:#d9d1c1}
.marble-level-head span{flex:none;color:#c5ac77}
.marble-levels{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:6px}
.marble-levels button{min-width:0;height:34px;border:1px solid #ffffff24;border-radius:8px;background:#fff1d00a;color:#d9d1c1;font:700 11px var(--serif);cursor:pointer}
.marble-levels button.is-active{border-color:#eac87e;background:#c99d4b42;color:#ffedc5}
.marble-levels button:disabled{opacity:.45;cursor:not-allowed}
.marble-menu-bottom,.marble-match-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:15px;color:#bcb6a7;font-size:10px}
.marble-begin,.marble-finish-card button{min-height:38px;padding:8px 16px;border:1px solid #f2d48d;border-radius:999px;background:linear-gradient(135deg,#d6b873,#ac8043);color:#28231b;font-weight:700;cursor:pointer;box-shadow:0 5px 16px #0003}
.marble-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}
.marble-toolbar>div:first-child{display:grid;gap:4px}
.marble-toolbar b{font:700 15px var(--serif);color:#f3dfad}
.marble-toolbar small{color:#c0bcaf;font-size:10px}
.marble-turn{display:grid;justify-items:end;gap:4px}
.marble-turn span{font-size:11px;color:#9ed6ea}
.marble-turn span[data-side="ai"]{color:#f2a18e}
.marble-turn span[data-side="done"]{color:#f1d28a}
.marble-turn i{font-size:9px;color:#d9bd80;font-style:normal}
.marble-canvas-wrap{position:relative;overflow:hidden;border:1px solid #f5ddb27c;border-radius:12px;background:#b99a6a;box-shadow:inset 0 2px 9px #31231655}
.marble-canvas{display:block;width:100%;height:clamp(310px,48vw,500px);touch-action:none;cursor:crosshair;outline:none}
.marble-canvas:focus-visible{box-shadow:inset 0 0 0 3px #f4da9b}
.marble-canvas-hint{position:absolute;left:10px;bottom:8px;padding:5px 8px;border-radius:999px;background:#171b19c9;color:#f5e4c4;font-size:9px;pointer-events:none}
.marble-match-footer label{display:flex;align-items:center;gap:6px;cursor:pointer}
.marble-match-footer input{accent-color:#d6b873}
.marble-finish{position:absolute;z-index:5;inset:12% 8%;display:grid;place-items:center;padding:16px;background:#111b1bd9;backdrop-filter:blur(5px)}
.marble-finish[hidden]{display:none}
.marble-finish-card{display:grid;justify-items:center;gap:9px;max-width:390px;padding:24px;border:1px solid #e5cd8b66;border-radius:16px;background:linear-gradient(145deg,#34403a,#242a27);text-align:center;box-shadow:0 16px 45px #0007}
.marble-finish-card>span{font-size:38px}
.marble-finish-card>b{font:700 23px var(--serif);color:#f5e1ae}
.marble-finish-card p{margin:0;color:#e2d9c8;font-size:12px;line-height:1.7}
.marble-finish-card small{color:#b8ad96;font-size:10px}
.marble-finish-card button{margin-top:4px}
.marble-finish-card button[data-marble-again]{border-color:#d8c79e;background:#ffffff12;color:#f3e8d1;box-shadow:none}
.marble-scene .street-outcome{margin:12px auto 0}
.marble-scene .street-record{color:#ddcead}
.marble-scene .street-board{background:#101b1acb}
.marble-icon{color:#cceaf2}
.game-dialog.game-dialog-day .marble-shell{background:radial-gradient(ellipse at 50% 42%,#e8d7b8 0,#c4ab83 68%,#928064 100%)}
.game-dialog.game-dialog-day .marble-menu,.game-dialog.game-dialog-day .marble-match{border-color:#66533d44;background:linear-gradient(145deg,#fffaf0f2,#f3e6d1f2);color:#3e3429}
.game-dialog.game-dialog-day .marble-menu-title span,.game-dialog.game-dialog-day .marble-toolbar b{color:#654b2c}
.game-dialog.game-dialog-day .marble-menu-title small,.game-dialog.game-dialog-day .marble-toolbar small{color:#726958}
.game-dialog.game-dialog-day .marble-mode-picks button{border-color:#826a493a;background:#7656290a;color:#473b2b}
.game-dialog.game-dialog-day .marble-mode-picks button small{color:#766b5a}
.game-dialog.game-dialog-day .marble-mode-picks button.is-active{border-color:#a77d39;background:#c99d4b25}
.game-dialog.game-dialog-day .marble-levels button{border-color:#66533d33;background:#fff9ed;color:#574a37}
.game-dialog.game-dialog-day .marble-levels button.is-active{background:#d8bb79;color:#33291c}
.game-dialog.game-dialog-day .marble-menu-bottom,.game-dialog.game-dialog-day .marble-match-footer{color:#726958}
.game-dialog.game-dialog-day .marble-turn span{color:#276c7e}
.game-dialog.game-dialog-day .marble-turn span[data-side="ai"]{color:#a34636}
.game-dialog.game-dialog-day .marble-finish-card{border-color:#8c7140;background:linear-gradient(145deg,#fff8e9,#e9d8b6)}
.game-dialog.game-dialog-day .marble-finish-card>b{color:#654b2c}
.game-dialog.game-dialog-day .marble-finish-card p{color:#473e32}
.game-dialog.game-dialog-day .marble-finish-card small{color:#766b5a}
@media(max-width:680px){.marble-shell{padding:10px}.marble-menu,.marble-match{padding:12px}.marble-levels{grid-template-columns:repeat(6,minmax(0,1fr))}.marble-level-head{align-items:flex-start;flex-direction:column;gap:5px}.marble-canvas{height:340px}.marble-menu-bottom{align-items:flex-start;flex-direction:column}.marble-finish{inset:7% 4%}.marble-toolbar{align-items:flex-start}}

/* 打库采用俯视地面近景；整块场地像台球桌一样占满弹窗，不画空中落球的高度感。 */
.game-dialog-wide:has(#marble-scene){width:min(1280px,calc(100vw - 20px));max-height:96vh}
.game-dialog-wide:has(#marble-scene) .game-dialog-body{max-height:calc(96vh - 72px);padding:12px}
.marble-menu,.marble-match{max-width:1240px}
.marble-canvas-wrap{border:2px solid #ded8c5;border-bottom:5px solid #77766d;border-radius:10px;background:#999b92;box-shadow:inset 0 2px 8px #343a3033,0 5px 13px #05080655}
.marble-canvas{display:block;width:100%;height:auto;aspect-ratio:1280/800;background:#9a9b93;touch-action:none;cursor:crosshair}
.marble-canvas-hint{left:14px;bottom:12px;padding:7px 11px;font-size:12px;background:#17201fdc}
.marble-controls{position:sticky;top:0;z-index:4;display:grid;grid-template-columns:minmax(0,1fr) minmax(240px,420px) auto;align-items:center;gap:12px;margin:0 0 10px;padding:10px 12px;border:1px solid #f7e4bd35;border-radius:12px;background:#17211ef2;backdrop-filter:blur(8px);color:#e8ddc6}
.marble-control-help{font-size:12px;font-weight:650}
.marble-controls label{display:flex;align-items:center;gap:10px;font-size:13px;font-weight:750}
.marble-controls input[type="range"]{flex:1;min-width:90px;accent-color:#e2ba62;cursor:pointer}
.marble-controls label b{min-width:42px;color:#ffdf91;text-align:right;font-variant-numeric:tabular-nums}
.marble-controls button{min-width:112px;min-height:42px;padding:8px 18px;border:1px solid #f2d48d;border-radius:999px;background:linear-gradient(135deg,#edcf82,#c29146);color:#28231b;font-weight:850;cursor:pointer;box-shadow:0 4px 13px #0004}
.marble-controls button:disabled,.marble-controls input:disabled{opacity:.45;cursor:not-allowed}
.game-dialog.game-dialog-day .marble-controls{border-color:#66533d33;background:#fff9eb;color:#4c4231}
.game-dialog.game-dialog-day .marble-controls label b{color:#77591f}
@media(max-width:680px){.marble-controls{grid-template-columns:1fr auto;gap:8px}.marble-control-help{grid-column:1/-1}.marble-controls button{min-width:92px;padding:7px 12px}}
.marble-toolbar b{font-size:18px}.marble-toolbar small{font-size:12px}
.marble-turn span{padding:7px 12px;border:1px solid #f3d47b88;border-radius:999px;background:#7e5a2433;color:#ffe19a;font-size:15px;font-weight:800;letter-spacing:.02em}
.marble-turn span[data-side^="ai"]{border-color:#ef977888;background:#71382c55;color:#ffc0aa}
.marble-turn span[data-side="done"]{border-color:#f3d47b;background:#87652455;color:#ffe7a8}
.marble-bank{display:flex;flex-wrap:wrap;gap:7px;margin:0 0 12px}
.marble-bank-player{padding:6px 10px;border:1px solid #ffffff2b;border-radius:999px;background:#1b292777;font-size:13px;font-weight:700}
.marble-bank-player.is-active{border-color:#f3d47b;background:#76592244;box-shadow:0 0 0 2px #eecb6740;color:#ffe7a8!important;transform:translateY(-1px)}
.game-dialog.game-dialog-day .marble-bank-player{border-color:#6e5b3838;background:#f8f0de;color:#476273!important}
.game-dialog.game-dialog-day .marble-bank-player.is-active{border-color:#b78a3e;background:#f4e1ac;color:#654710!important}
@media(max-width:680px){.game-dialog-wide:has(#marble-scene){width:calc(100vw - 12px)}.marble-match{padding:9px}}

/* Landmark-real game scenes: use the selected landmark as the camera plate,
   then keep the playable character and tools in the foreground. */
.scene-stage{border:1px solid #ffffff30;border-radius:14px;background:#17272d;box-shadow:inset 0 1px 0 #ffffff24,0 18px 44px #06101770}
.scene-backdrop{z-index:0;background:#17272d}
.scene-backdrop img{object-position:center 52%;filter:saturate(1.14) contrast(1.08) brightness(.94);transform:scale(1.025)}
.night-scene.has-photo .scene-backdrop img,.day-scene.has-photo .scene-backdrop img{opacity:.94;animation:sceneKenBurns 34s ease-in-out infinite alternate}
.night-scene.has-photo .scene-photo-veil{opacity:.48;background:linear-gradient(180deg,#06121c50 0%,#07151c12 42%,#07101888 100%),linear-gradient(90deg,#07101830,transparent 34%,transparent 70%,#07101830)}
.day-scene.has-photo .scene-photo-veil{opacity:.28;background:linear-gradient(180deg,#f6f3e82e 0%,transparent 46%,#07101878 100%),linear-gradient(90deg,#07101817,transparent 28%,transparent 72%,#07101817)}
.scene-stage:after{content:"";position:absolute;z-index:2;inset:0;pointer-events:none;background:linear-gradient(180deg,#07101814 0%,transparent 26%,transparent 66%,#07101824 100%);box-shadow:inset 0 0 80px #07101836}
.scene-stage>.scene-subtitle{z-index:13}

/* Fishing: the line is drawn in scene coordinates from the rod tip to the float. */
.fishing-shore{z-index:2}
.fishing-water{z-index:2}
.fishing-person{position:absolute;z-index:4;left:19%;bottom:35%;width:140px;height:132px;overflow:visible;filter:drop-shadow(0 8px 8px #06101888)}
.fishing-cast-line{position:absolute;z-index:5;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.fishing-cast-line .fishing-line{position:static!important;display:block;width:auto!important;height:auto!important;left:auto!important;top:auto!important;background:none!important;fill:none;stroke:#f3e7c8;stroke-width:2.2;stroke-linecap:round;stroke-dasharray:700;stroke-dashoffset:0;filter:drop-shadow(0 1px 3px #061018b0);transform:none!important;opacity:.92}
.fishing-scene[data-phase="ready"] .fishing-cast-line .fishing-line,.fishing-scene[data-phase="target"] .fishing-cast-line .fishing-line{opacity:0}
.fishing-scene[data-phase="cast"] .fishing-cast-line .fishing-line{stroke-dashoffset:700;animation:castLineOut .58s ease-out forwards}
@keyframes castLineOut{to{stroke-dashoffset:0}}
.fishing-scene[data-spot="shore"] .fishing-bobber{left:34%}
.fishing-scene[data-spot="open"] .fishing-bobber{left:59%}
.fishing-scene[data-spot="deep"] .fishing-bobber{left:78%}
.fishing-person path,.fishing-person circle{vector-effect:non-scaling-stroke}
.fishing-water{background:repeating-linear-gradient(174deg,transparent 0 18px,#d4eff52b 19px,#d4eff511 22px,transparent 24px 40px),linear-gradient(180deg,#226274,#0d3447 82%,#092939)}
.fishing-shore:before{content:"";position:absolute;left:0;right:0;top:6%;height:44%;background:linear-gradient(180deg,#223b3d,#344c46 72%,#243b38);clip-path:polygon(0 42%,13% 30%,23% 43%,39% 18%,52% 35%,69% 15%,83% 35%,100% 20%,100% 100%,0 100%);filter:drop-shadow(0 5px 4px #08151b55)}
.fishing-scene.day-scene .fishing-water{background:repeating-linear-gradient(174deg,transparent 0 18px,#f5ffff40 19px,#ffffff16 22px,transparent 24px 40px),linear-gradient(180deg,#55a9bb,#26738a 82%,#155268)}
.fishing-scene.day-scene .fishing-shore:before{background:linear-gradient(#78965b,#9eb973 70%,#65804b)}

/* Community garden: a kneeling resident gives the crop a human scale. */
.farming-sky:before{content:"";position:absolute;left:6%;bottom:0;width:36%;height:37%;background:linear-gradient(180deg,#51665a,#303f36);clip-path:polygon(0 100%,0 55%,12% 55%,12% 32%,22% 32%,22% 50%,40% 50%,40% 10%,49% 10%,49% 55%,66% 55%,66% 38%,76% 38%,76% 56%,100% 56%,100% 100%);opacity:.62}
.farming-field{background:linear-gradient(180deg,#527548 0%,#355b39 40%,#283c2b 100%)}
.farming-field:before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(168deg,transparent 0 34px,#d8d2a026 35px,#24351f22 42px),linear-gradient(90deg,#18271c44,transparent 20%,transparent 80%,#18271c44)}
.farm-worker{position:absolute;z-index:4;left:8%;bottom:13%;width:clamp(112px,15vw,170px);height:auto;overflow:visible;filter:drop-shadow(0 9px 8px #08130c85)}

/* Ring toss: bring the thrower into the near foreground and measure throws
   against the stall itself, not the user's viewport width. */
.ring-player{position:absolute;z-index:4;left:2%;bottom:3%;width:clamp(108px,14vw,150px);height:auto;overflow:visible;filter:drop-shadow(0 9px 8px #090b0b88)}
.ring-flying{left:14%;bottom:38%;z-index:7}
.ringtoss-scene[data-slot="0"] .ring-flying{--fly-x:22%}
.ringtoss-scene[data-slot="1"] .ring-flying{--fly-x:50%}
.ringtoss-scene[data-slot="2"] .ring-flying{--fly-x:78%}
.ringtoss-scene[data-slot="0"] .ring-landed{--land-x:22%}
.ringtoss-scene[data-slot="1"] .ring-landed{--land-x:50%}
.ringtoss-scene[data-slot="2"] .ring-landed{--land-x:78%}
.ringtoss-scene[data-phase="landed"] .ring-landed{left:var(--land-x,50%);transform:translate(-50%,-20px) rotate(0)}
@keyframes ringFly{0%{opacity:1;left:14%;bottom:38%}55%{left:var(--fly-x,50%);bottom:67%}100%{opacity:1;left:var(--fly-x,50%);bottom:35%}}
.ring-sky:before{content:"";position:absolute;left:0;right:0;bottom:0;height:35%;background:linear-gradient(180deg,transparent,#15232a54),repeating-linear-gradient(90deg,transparent 0 15%,#172a3030 15.2% 15.6%)}

/* Alley shuttlecock: larger player, readable limbs, and deeper courtyard cues. */
.kick-kid{z-index:4;left:34%;bottom:14%;width:64px;height:120px;filter:drop-shadow(0 8px 7px #1118)}
.kick-head{left:21px;top:0;width:23px;height:23px;background:#dca982;box-shadow:0 -5px 0 #292b28}
.kick-body{left:13px;top:21px;width:39px;height:49px;border-radius:14px 14px 6px 6px;background:linear-gradient(90deg,#31546b,#527c91 55%,#345970);box-shadow:inset -5px 0 #243f52}
.kick-kid:before{content:"";position:absolute;left:43px;top:33px;width:33px;height:8px;border-radius:8px;background:#dca982;transform:rotate(-22deg);transform-origin:left center}
.kick-kid:after{content:"";position:absolute;left:24px;top:67px;width:7px;height:46px;border-radius:5px;background:#34495b;transform:rotate(18deg);transform-origin:top center}
.kick-leg{left:34px;top:66px;width:8px;height:48px;background:#253b4c}
.alley-wall{background:linear-gradient(90deg,#453e36,#65584a 48%,#50483f)}
.alley-wall:before{background:repeating-linear-gradient(90deg,#0000 0 60px,#0004 60px 62px),repeating-linear-gradient(0deg,#0000 0 29px,#0003 29px 31px),linear-gradient(90deg,#2228,transparent 12%,transparent 88%,#2228)}
.alley-window{box-shadow:inset 0 0 0 4px #b99a6b66,0 7px 12px #17130f4d}
.alley-ground{background:repeating-linear-gradient(176deg,transparent 0 44px,#d0c2a021 45px,#201a1422 50px),linear-gradient(#766452,#3b332a)}
.alley-ground:after{border-color:#f1dcac55;background:radial-gradient(ellipse,#e1c88c32,transparent 70%)}

/* Hopscotch: place the child beside the chalk court, with the court in view. */
.hop-player{position:absolute;z-index:4;left:72%;bottom:8%;width:clamp(110px,14vw,154px);height:auto;overflow:visible;filter:drop-shadow(0 9px 8px #17130f77)}
.hop-ground{background:linear-gradient(180deg,#8a8173,#62594e 35%,#423d36)}
.hop-ground:after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(174deg,transparent 0 38px,#f0e7d01a 39px 41px),linear-gradient(90deg,#211d1938,transparent 18%,transparent 82%,#211d1938);pointer-events:none}
.hop-board{z-index:2}
.hop-bag{z-index:3}

@media(max-width:680px){
  .fishing-person{left:9%;bottom:35%;width:110px;height:104px}
  .farm-worker{left:0;bottom:16%;width:110px}
  .ring-player{left:-2%;width:100px}
  .ring-flying{font-size:21px}
  .kick-kid{left:23%;transform:scale(.88);transform-origin:bottom center}
  .hop-player{left:69%;width:106px}
}

/* Photo characters sit at a grounded scale on the real landmark plate. */
.scene-backdrop img{will-change:transform;object-position:center 54%;}
.has-photo .scene-backdrop img{filter:saturate(1.08) contrast(1.04) brightness(.9);}
.has-photo .scene-photo-veil{opacity:.32;background:linear-gradient(180deg,#06121b38 0%,transparent 42%,#06121b82 100%)}
.has-photo .fishing-sky,.has-photo .fishing-shore,.has-photo .farming-sky,.has-photo .farming-field,
.has-photo .alley-wall,.has-photo .alley-ground,.has-photo .hop-wall{display:none}
.scene-character{position:absolute;z-index:4;display:block;height:auto;object-fit:contain;object-position:center bottom;pointer-events:none;filter:drop-shadow(0 12px 9px #07101880);will-change:transform;}
.scene-character:not(.fishing-person):not(.ring-player){animation:characterIdle 4.8s ease-in-out infinite}
.fishing-person{left:2%;bottom:17%;top:auto;width:48%;height:auto;overflow:visible;filter:drop-shadow(0 10px 9px #07101890);}
.fishing-person>img{display:block;width:100%;height:auto;}
.fishing-rod-tip{position:absolute;left:99.2%;top:.4%;width:4px;height:4px;transform:translate(-50%,-50%);border-radius:50%;}
.fishing-scene[data-phase="reel"] .fishing-person{transform:rotate(-2deg) translateY(-2px);}
.farm-worker{left:4%;bottom:10%;width:clamp(155px,22vw,220px);height:auto;}
.ring-player{left:1%;bottom:4%;width:clamp(120px,16vw,170px);height:auto;}
.kick-kid{left:29%;bottom:5%;width:auto;height:clamp(170px,28vw,220px);max-width:38%;object-fit:contain;object-position:center bottom;}
.kick-kid:before,.kick-kid:after{display:none;content:none}
.hop-player{left:auto;right:4%;bottom:3%;width:auto;height:clamp(165px,27vw,215px);max-width:34%;object-fit:contain;object-position:center bottom;}
.fishing-scene.has-photo .fishing-water{height:43%;background:linear-gradient(180deg,#12516830,#06202e66);}
.scene-ripples{z-index:3;}
.fishing-person{animation:fisherIdle 6s ease-in-out infinite;transform-origin:30% 85%;}
@keyframes characterIdle{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
@keyframes fisherIdle{0%,100%{transform:translateY(0) rotate(0)}50%{transform:translateY(-1px) rotate(.35deg)}}
.fishing-scene[data-phase="cast"] .fishing-person{animation:fisherCast .52s cubic-bezier(.2,.8,.3,1) both}
.farming-scene[data-phase="till"] .farm-worker,.farming-scene[data-phase="weed"] .farm-worker{animation:gardenerWork .66s ease-in-out 2}
.farming-scene[data-phase="water"] .farm-worker{animation:gardenerWater .8s ease-in-out 2}
.ringtoss-scene[data-phase="throw"] .ring-player{animation:residentThrow .5s cubic-bezier(.2,.8,.25,1) both}
.shuttlecock-scene[data-phase="playing"] .kick-kid{animation:residentKick .52s cubic-bezier(.2,.8,.25,1) both}
.hopscotch-scene[data-phase="jump"] .hop-player{animation:residentJump .62s cubic-bezier(.16,.78,.2,1) both}
@keyframes fisherCast{0%{transform:rotate(0)}45%{transform:rotate(-2deg) translateY(-3px)}100%{transform:rotate(0)}}
@keyframes gardenerWork{0%,100%{transform:translateY(0) rotate(0)}50%{transform:translateY(5px) rotate(-1.5deg)}}
@keyframes gardenerWater{0%,100%{transform:rotate(0)}45%{transform:rotate(2deg) translateY(-2px)}70%{transform:rotate(-1deg)}}
@keyframes ringIdle{0%,100%{transform:scaleX(-1) translateY(0)}50%{transform:scaleX(-1) translateY(-3px)}}
@keyframes residentThrow{0%{transform:scaleX(-1) translate(0,0) rotate(0)}38%{transform:scaleX(-1) translate(4px,-5px) rotate(3deg)}100%{transform:scaleX(-1) translate(0,0) rotate(0)}}
@keyframes residentKick{0%{transform:translateY(0) rotate(0)}35%{transform:translateY(-8px) rotate(2deg)}70%{transform:translateY(-2px) rotate(-2deg)}100%{transform:translateY(0) rotate(0)}}
@keyframes residentJump{0%{transform:translateY(0)}48%{transform:translateY(-12px) rotate(-2deg)}100%{transform:translateY(0)}}
@media(max-width:680px){
 .fishing-person{left:0;bottom:17%;width:62%;}
 .farm-worker{left:0;bottom:10%;width:clamp(132px,40vw,185px);}
 .ring-player{left:-2%;bottom:3%;width:clamp(112px,35vw,145px);}
 .kick-kid{left:27%;bottom:4%;height:clamp(150px,48vw,190px);}
 .hop-player{right:0;bottom:2%;height:clamp(150px,45vw,190px);}
}

/* Shared 3D game stage: a compact, local CSS render with no remote scenery. */
.scene-stage{position:relative;isolation:isolate;overflow:hidden;perspective:1050px;transform-style:preserve-3d;border:1px solid #d5f3ff37;border-radius:16px;box-shadow:inset 0 1px #ffffff2a,0 20px 45px #02081688;background:#101a35;}
.scene-stage:before{content:"";position:absolute;z-index:1;inset:0;pointer-events:none;background:radial-gradient(ellipse at 50% 0%,#ffffff1c,transparent 52%),linear-gradient(180deg,#080d1d00 45%,#060c1d30 100%);}
.scene-stage:after{z-index:12;inset:0;pointer-events:none;content:"";position:absolute;border-radius:inherit;background:linear-gradient(135deg,#b5eeff15,transparent 32%,transparent 70%,#07122c3d);box-shadow:inset 0 0 70px #04091e55;}
.scene-backdrop{display:block!important;z-index:0;pointer-events:none;background:#16233e}
.scene-backdrop img{display:block!important;width:100%;height:100%;object-fit:cover;opacity:1!important;filter:saturate(1.06) contrast(1.04) brightness(.9);transform:scale(1.025);animation:sceneKenBurns 38s ease-in-out infinite alternate}
.scene-photo-veil{display:none!important}
.scene-stage>*:not(.scene-backdrop){transform-style:preserve-3d}
.scene-subtitle{z-index:13;color:#e3f3ffb8;text-shadow:0 1px 5px #06122c;font-size:10px;letter-spacing:1.2px}
.scene-tools{position:relative;z-index:20}
.scene-credit{color:#c7d6e0;font-size:9px}.scene-source-note{color:#7edacb;font-size:9px}.scene-upload{display:none!important}

/* 3D fishing dock, layered river plane, metallic rod/float and moving water. */
.fishing-scene .scene-stage{background:radial-gradient(ellipse at 72% 28%,#ffd98c66,transparent 18%),linear-gradient(180deg,#304c79 0%,#6278a0 43%,#17475b 44%,#072941 100%);}
.fishing-sky{z-index:1;inset:0 0 40%;background:radial-gradient(ellipse at 72% 102%,#ffc66d72,transparent 47%);}
.fishing-moon{width:48px;height:48px;background:radial-gradient(circle at 32% 28%,#fff7d6,#ffc86d 56%,#e7854a);box-shadow:0 0 16px #ffd07f,0 0 60px #ffbc5c70;}
.fishing-shore{display:none}
.fishing-shore:after{content:"";position:absolute;inset:16% 0 0;background:repeating-linear-gradient(100deg,transparent 0 38px,#d4e79d20 39px 42px,transparent 44px 70px);}
.fishing-water{z-index:4;inset:43% 0 0;height:auto;background:repeating-linear-gradient(174deg,transparent 0 17px,#b3f7ff22 18px,#52b8d019 20px,transparent 22px 39px);}
.fishing-scene.day-scene .fishing-water,.fishing-scene.night-scene .fishing-water{background:repeating-linear-gradient(174deg,transparent 0 17px,#b3f7ff22 18px,#52b8d019 20px,transparent 22px 39px);}
.fishing-person{z-index:5;filter:drop-shadow(0 13px 8px #020a1488);}
.fishing-cast-line{z-index:6}.fishing-cast-line .fishing-line{stroke:#fff0bd;stroke-width:2.8;filter:drop-shadow(0 0 3px #83eaff);}
.fishing-bobber{z-index:5;width:12px;height:25px;background:linear-gradient(90deg,#d9505c,#fff6e6 42%,#ef5960 70%,#a92848);box-shadow:inset 2px 0 #ffffff80,0 5px 8px #021122aa,0 0 18px #ff758b88;}
.fishing-bobber:after{content:"";position:absolute;inset:0;border-radius:inherit;background:linear-gradient(110deg,transparent 25%,#fff9 38%,transparent 53%);}
.fishing-ripple{border-color:#b5f6ff99;box-shadow:0 0 14px #45d8ee35;}
.water-glint{color:#e1ffff;text-shadow:0 0 11px #8ef3ff;}

/* Raised vegetable plots with beveled soil ridges and miniature crops. */
.farming-scene .scene-stage{background:radial-gradient(ellipse at 76% 25%,#fff1a573,transparent 22%),linear-gradient(180deg,#59b5dc 0%,#a7e1e4 41%,#638745 42%,#293b31 100%);}
.farming-scene .farming-sky{z-index:1;background:transparent!important;}
.farming-scene .farming-sky:before{display:none;}
.farming-sky:after{content:"";position:absolute;left:-3%;top:-12%;width:34%;height:55%;opacity:.32;pointer-events:none;transform-origin:top left;
  background:radial-gradient(ellipse at 18% 18%,#397343b8 0 17%,transparent 18%),radial-gradient(ellipse at 50% 8%,#4d8b43a8 0 19%,transparent 20%),radial-gradient(ellipse at 76% 25%,#387442a8 0 22%,transparent 23%);
  animation:canopySway 4.2s ease-in-out infinite alternate;}
.farming-sun{background:radial-gradient(circle at 35% 30%,#fff7c9,#ffcb63 68%,#f38d3f);box-shadow:0 0 45px #ffd77c99;}
.farming-field{z-index:3;left:-5%;right:-5%;bottom:-15%;height:68%;background:repeating-linear-gradient(0deg,#3b6e42 0 20px,#315a37 21px 28px,#718d46 29px 34px);transform:perspective(700px) rotateX(42deg) scale(1.18);transform-origin:50% 100%;box-shadow:0 -12px 25px #14241d88,inset 0 20px 25px #cdf09124;}
.farming-field{inset:0;height:auto;background:transparent;transform:none;box-shadow:none;}
.farming-field:before,.farming-field .soil-row{display:none}
.farming-field:before{inset:0;background:repeating-linear-gradient(0deg,transparent 0 28px,#8f70453a 29px 35px,#271d1a66 36px 43px),linear-gradient(90deg,#111d2144,transparent 20%,transparent 80%,#111d2144);}
.soil-row{height:11px;border-radius:99px;background:linear-gradient(180deg,#b27e4e,#714930 48%,#382d29);box-shadow:0 5px 8px #17201788,inset 0 2px 2px #f5ce8355;}
.farming-sprout,.farming-leaf{filter:drop-shadow(0 4px 2px #10201688);}
.farm-worker{z-index:5;filter:drop-shadow(0 15px 10px #07100caa);}

/* A small dimensional fairground booth; prizes are rounded, glossy 3D props. */
.ringtoss-scene .scene-stage{background:radial-gradient(ellipse at 54% 25%,#ffcf7280,transparent 29%),linear-gradient(180deg,#284b70,#7196a5 56%,#314750 57%,#172d38);}
.ring-sky{z-index:1;background:linear-gradient(180deg,#1c3b67aa,transparent 75%);}
.ringtoss-scene .ring-stall{inset:0;bottom:auto;height:auto;transform:none;background:transparent;border:0;box-shadow:none;}
.ringtoss-scene .ring-stall:before,.ringtoss-scene .ring-awning,.ringtoss-scene .ring-bunting,.ringtoss-scene .ring-shelf:before,.ringtoss-scene .ring-counter{display:none}
.ringtoss-scene .ring-shelf{position:absolute;left:auto;right:7%;top:43%;bottom:auto;width:46%;height:17%;display:flex;justify-content:space-around;align-items:center;gap:7px;}
.ringtoss-scene .ring-prize{min-width:0;padding:5px 8px;border:1px solid #fff4d8;border-radius:11px;background:linear-gradient(150deg,#fff6dff0,#d4b985e8);font-size:24px;box-shadow:inset 2px 2px #fff9,0 7px 0 #553044,0 12px 15px #140c23aa;}
.ringtoss-scene .ring-prize small{font-size:8px}
.ringtoss-scene .ring-prize.is-target{transform:translateY(-8px) scale(1.08);box-shadow:inset 2px 2px #fff9,0 8px 0 #8c4938,0 0 24px #ffe28acc}
.ring-stall{z-index:3;left:35%;right:7%;bottom:18%;height:56%;border:2px solid #ffd28c;border-radius:14px 14px 5px 5px;background:linear-gradient(90deg,#6c293e,#b94c4c 10%,#e48a4d 50%,#9d3843 91%,#54273c);box-shadow:inset 0 8px #fff4,0 16px 24px #070f24aa,12px 8px 0 #462036;transform:perspective(850px) rotateY(-7deg) rotateX(2deg);}
.ring-stall:before{content:"";position:absolute;z-index:-1;top:8px;bottom:-8px;right:-14px;width:14px;transform:skewY(-24deg);transform-origin:left;background:linear-gradient(90deg,#713246,#351e34);border-radius:0 5px 7px 0;}
.ring-awning{height:31%;background:repeating-linear-gradient(90deg,#fff1df 0 32px,#c94150 33px 64px);border-radius:12px 12px 0 0;box-shadow:0 7px 9px #38162977;clip-path:polygon(0 0,100% 0,100% 80%,93% 100%,86% 80%,79% 100%,72% 80%,65% 100%,58% 80%,51% 100%,44% 80%,37% 100%,30% 80%,23% 100%,16% 80%,9% 100%,0 80%);}
.ring-shelf{bottom:10%;height:45%;border:4px solid #f5c984;border-radius:5px;background:linear-gradient(180deg,#33202d,#643045 22%,#391f31);box-shadow:inset 0 3px #fff4,0 8px #251a2b;}
.ring-prize{filter:drop-shadow(0 6px 4px #0b0d1a99);text-shadow:0 2px #0008;font-size:29px;}
.ring-player{z-index:5;filter:drop-shadow(0 16px 10px #07101aaa);}
.ring-player{transform:scaleX(-1);animation:ringIdle 4.8s ease-in-out infinite;}
.ring-flying,.ring-landed{filter:drop-shadow(0 5px 4px #061221);}

/* Perspective courtyard paving and a real depth cue behind the shuttlecock. */
.shuttlecock-scene .scene-stage{background:radial-gradient(ellipse at 70% 22%,#ffd69066,transparent 20%),linear-gradient(180deg,#678bab 0%,#c0c8b8 48%,#8e765e 49%,#403a3b 100%);}
.alley-wall{display:none}
.alley-wall:before{background:repeating-linear-gradient(90deg,#0000 0 59px,#2b2d4655 60px 63px),repeating-linear-gradient(0deg,#0000 0 29px,#f8c9a12b 30px 32px),linear-gradient(180deg,#fff3,transparent 55%,#21244377);}
.alley-ground{z-index:2;top:0;bottom:0;height:auto;background:transparent;transform:none;}
.kick-zone{border:2px solid #ffe3a7aa;background:radial-gradient(ellipse,#ffe7a735,transparent 72%);box-shadow:0 0 24px #f7ce8155;}
.kick-kid{z-index:5;filter:drop-shadow(0 15px 9px #101223aa);}
.shuttlecock{filter:drop-shadow(0 7px 4px #12132488);}

/* Thick raised hopscotch tiles on a receding 3D pavement plane. */
.hopscotch-scene .scene-stage{background:radial-gradient(ellipse at 77% 20%,#ffdb9970,transparent 21%),linear-gradient(180deg,#719ac1 0%,#ced1bb 48%,#998271 49%,#514449 100%);}
.hop-wall{z-index:1;background:linear-gradient(90deg,#8f665b,#c18c6f 55%,#755667);transform:perspective(900px) rotateY(5deg) translateZ(-35px);box-shadow:inset 0 -25px 26px #29213766;}
.hop-wall{display:none}
.hop-ground{z-index:2;inset:0;height:auto;background:transparent;transform:none;}
.hop-board{filter:drop-shadow(0 15px 8px #211627b0);}
.hop-cell{border:2px solid #fff3d7!important;border-radius:8px!important;background:linear-gradient(145deg,#f2d9a3,#bd8b70 60%,#8c5a64)!important;box-shadow:inset 2px 2px #fff8,inset -4px -5px #4b2e4777,0 7px 0 #512e4a,0 11px 14px #1d162580!important;transform:translateZ(5px);}
.hop-cell.is-lit,.hop-cell.active{background:linear-gradient(145deg,#fff5b6,#ffd05e 58%,#e4804a)!important;box-shadow:inset 2px 2px #fff,inset -4px -5px #8d482d77,0 8px 0 #9a493d,0 0 22px #ffcd63cc!important;}
.hop-player{z-index:5;filter:drop-shadow(0 15px 9px #161323aa);}

/* The marble game already shades each glass marble as a sphere; give its board
   a raised beveled frame without transforming the pointer-sensitive canvas. */
.marble-canvas-wrap{border:2px solid #ffe2a177;border-bottom:8px solid #60402d;border-radius:16px;background:linear-gradient(145deg,#d6bd91,#947248);box-shadow:inset 0 3px 0 #fff8,inset 0 -5px 12px #39271988,0 7px 0 #34231e,0 17px 25px #0a101877;}
.marble-canvas{background:#1a1d21;border-radius:12px 12px 7px 7px;}

@media(max-width:680px){
 .scene-stage{perspective:800px;}
 .ring-stall{left:30%;right:4%;}
 .farming-field{bottom:-12%;height:64%;}
 .hop-board{transform:translateX(-50%) perspective(600px) rotateX(16deg) scale(.92);transform-origin:center bottom;}
}

/* Keep every action panel in a clear upper band so it never covers the player. */
.scene-stage:has(> .scene-play:not([hidden])){--scene-play-band:0px}
.scene-stage:has(> .scene-play:not([hidden])) .scene-play{z-index:22;top:12px;bottom:auto;left:50%;right:auto;
  transform:translateX(-50%);width:min(500px,92%);max-height:34%;overflow:auto;}
.scene-stage:has(> .scene-play:not([hidden])) .scene-subtitle{display:none}
.scene-stage:has(> .scene-play:not([hidden])) .scene-progress{top:auto;bottom:8px;z-index:16}
.hopscotch-scene .scene-stage:has(> .scene-play:not([hidden])) .scene-play{left:auto;right:14px;transform:none;width:min(330px,42%)}
.scene-character{z-index:8}
.scene-stage:after{z-index:15}
.scene-stage:has(> .scene-play:not([hidden])) .scene-play{z-index:22}

/* Compact realtime weather simulation. Rain and snow use two CSS layers, with no JS animation loop. */
.scene-weather-fx{position:absolute;z-index:7;inset:0;overflow:hidden;pointer-events:none;}
.scene-weather-fx:before,.scene-weather-fx:after{content:"";position:absolute;inset:-30%;opacity:0;pointer-events:none;}
.scene-weather-fx[data-weather="rain"]:before,.scene-weather-fx[data-weather="thunder"]:before{
  opacity:.55;background:repeating-linear-gradient(106deg,transparent 0 18px,#d9f6ff9c 19px,#d9f6ff00 21px,transparent 23px 39px);
  animation:sceneRain 0.72s linear infinite;}
.scene-weather-fx[data-weather="rain"]:after{
  opacity:.22;background:linear-gradient(180deg,#7d9cae35,transparent 48%,#06101b55);}
.scene-weather-fx[data-weather="snow"]:before{
  opacity:.8;background-image:radial-gradient(circle,#fff 0 1.3px,transparent 1.8px),radial-gradient(circle,#e8f7ff 0 1px,transparent 1.7px),radial-gradient(circle,#fff 0 1.5px,transparent 2px);
  background-size:73px 81px,113px 121px,157px 149px;background-position:0 0,38px 26px,76px 47px;animation:sceneSnow 8s linear infinite;}
.scene-weather-fx[data-weather="snow"]:after{opacity:.25;background:linear-gradient(180deg,#d9edff2e,transparent 65%);}
.scene-weather-fx[data-weather="fog"]:before{opacity:.5;background:linear-gradient(178deg,transparent 36%,#e5f4ef35 48%,transparent 58%,#e5f4ef28 72%,transparent 84%);animation:sceneFog 14s ease-in-out infinite alternate;}
.scene-weather-fx[data-weather="cloudy"]:before{opacity:.12;background:linear-gradient(180deg,#8196aa 0%,transparent 65%);}
.scene-weather-fx[data-weather="thunder"]{animation:sceneThunder 9s steps(1,end) infinite;}
.scene-weather-fx[data-weather="thunder"]:after{inset:0;opacity:0;background:#f4fbff;clip-path:polygon(63% 0,69% 0,62% 37%,72% 37%,50% 100%,57% 49%,49% 49%);animation:sceneLightning 9s steps(1,end) infinite;}
.scene-weather-badge{position:absolute;z-index:20;top:12px;right:14px;max-width:min(48%,360px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  padding:6px 10px;border:1px solid #ffffff45;border-radius:999px;background:#071522bd;color:#f0f7f6;font:600 10px/1.2 system-ui,sans-serif;
  box-shadow:0 4px 15px #07152255;backdrop-filter:blur(8px);pointer-events:none;}
.fishing-water:before{content:"";position:absolute;z-index:1;inset:0;pointer-events:none;
  background:repeating-linear-gradient(174deg,transparent 0 15px,#c4f7ff3d 16px,#b2f4ff12 19px,transparent 22px 38px);
  background-size:100% 130%;animation:riverCurrent 5s linear infinite;mix-blend-mode:screen;}
.fishing-water:after{content:"";position:absolute;z-index:1;inset:0;pointer-events:none;
  background:linear-gradient(102deg,transparent 35%,#d8ffff24 47%,transparent 58%);background-size:220% 100%;animation:riverGlint 9s ease-in-out infinite;}
.farming-scene .farming-leaf{transform-origin:bottom center;animation:cropSway 2.8s ease-in-out infinite;}
.farming-scene .leaf-two{animation-delay:-1.35s;}
.farming-scene .farming-sprout{transform-origin:bottom center;animation:cropSway 3.7s ease-in-out infinite reverse;}
.scene-weather-fx[data-weather="rain"]~.scene-weather-badge,.scene-weather-fx[data-weather="thunder"]~.scene-weather-badge{border-color:#b3d6e27a;}
@keyframes sceneRain{from{background-position:0 0}to{background-position:-48px 180px}}
@keyframes sceneSnow{from{background-position:0 -20px,38px -20px,76px -20px}to{background-position:-30px 430px,72px 370px,26px 500px}}
@keyframes sceneFog{from{transform:translateX(-5%)}to{transform:translateX(8%)}}
@keyframes sceneThunder{0%,88%,92%,100%{filter:none}89%{filter:brightness(1.52)}90%{filter:none}91%{filter:brightness(1.27)}}
@keyframes riverCurrent{from{background-position:0 0}to{background-position:75px 42px}}
@keyframes riverGlint{0%,100%{background-position:120% 0}50%{background-position:-80% 0}}
@keyframes cropSway{0%,100%{rotate:-2deg}50%{rotate:4deg}}
@keyframes canopySway{from{transform:rotate(-1.8deg)}to{transform:rotate(2.2deg)}}
@keyframes sceneLightning{0%,88%,92%,100%{opacity:0}89%{opacity:.9}90%{opacity:0}91%{opacity:.65}}
@media(max-width:680px){
  .scene-weather-badge{top:auto;right:10px;bottom:10px;max-width:55%;font-size:9px;padding:5px 8px;}
  .scene-stage:has(> .scene-play:not([hidden])) .scene-play{top:8px;width:min(430px,94%);max-height:31%;}
  .hopscotch-scene .scene-stage:has(> .scene-play:not([hidden])) .scene-play{left:50%;right:auto;transform:translateX(-50%);width:min(430px,94%);}
  .scene-character{filter:drop-shadow(0 7px 7px #07101890);}
  .fishing-person{width:49%;bottom:14%;}
  .farm-worker{width:clamp(112px,32vw,155px);bottom:7%;}
  .ring-player{width:clamp(100px,29vw,128px);bottom:2%;}
  .kick-kid{left:8%;height:clamp(132px,39vw,164px);}
  .hop-player{right:3%;height:clamp(130px,38vw,160px);}
}
@media(prefers-reduced-motion:reduce){
  .scene-weather-fx,.scene-weather-fx:before,.scene-weather-fx:after,.fishing-water:before,.fishing-water:after,
  .farming-scene .farming-leaf,.farming-scene .farming-sprout,.farming-scene .farming-sky:after,.farming-scene .scene-backdrop img{animation:none!important;}
}

/* The rendered 3D plates are the scene background; old 2D sky/field fills must stay translucent. */
.fishing-scene .fishing-sky{background:radial-gradient(ellipse at 74% 100%,#ffe08a38,transparent 52%)!important;}
.farming-scene .farming-sky,.farming-scene .farming-field{background:transparent!important;}
.farming-scene .farming-sky:before{display:none!important;}
