/* Town expansion: illustrated places, readable touch UI, full-screen party controls. */
.town-shortcuts{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:16px}.town-shortcuts button,.world-invite{border:1px solid #b9a079;border-radius:16px;background:#eef0da;color:#615c3f;padding:14px 8px;font-weight:bold}.town-shortcuts small{display:block;font-weight:normal;margin-top:5px;font-size:10px}.town-shortcuts button:last-child{background:#ffe5c1}.world-invite{display:block;width:88%;margin:14px auto;background:#f1e0b9}.world-invite span{display:block;font-size:9px;letter-spacing:2px;margin-bottom:6px}.world-invite b{font-size:14px}.at-home .home-screen{padding-bottom:100px}.world-heading{display:flex;align-items:center;gap:12px;margin:6px 0 16px}.world-heading div{flex:1}.world-heading h2{font:28px KaiTi,serif;margin:3px 0}.world-heading small{font-size:8px;letter-spacing:2px;color:#ab9070}.world-map{display:grid;gap:14px;margin:20px 0}.area-card{display:flex;padding:0;border:1px solid #bca88c;border-radius:19px;overflow:hidden;text-align:left;background:#fff9ed;min-height:136px}.area-thumbnail{width:40%;flex-shrink:0;background-image:url('/assets/town-atlas.png');background-size:300% 100%;background-position:var(--area) center}.area-card>span{padding:19px 12px;display:flex;flex-direction:column;justify-content:center;gap:9px}.area-card b{font:25px KaiTi,serif}.area-card small,.area-card em{font-size:10px;font-style:normal;color:#8b765c}.area-scene{position:relative;width:calc(100% + 32px);margin-left:-16px;aspect-ratio:1;background-image:url('/assets/town-atlas.png');background-size:300% 100%;background-position:var(--area) center;overflow:hidden;border-block:3px solid #b49c76}.weather-badge{position:absolute;left:14px;top:15px;background:#fff7e7dd;border:1px solid #c2ae87;border-radius:30px;padding:8px 12px;font-size:10px}.world-walker{position:absolute;width:22%;height:25%;bottom:16%;left:30%;animation:town-stroll 16s ease-in-out infinite alternate;filter:drop-shadow(0 5px 2px #70552e33)}.world-walker.two{bottom:9%;left:65%;animation-delay:-7s;animation-duration:21s}.world-walker .cat-sprite{display:block;width:100%;height:100%;animation:town-bob .8s ease-in-out infinite alternate}.area-scene .scene-caption{position:absolute;bottom:10px;left:10%;right:10%;text-align:center;background:#fff8e7db;border-radius:20px;padding:9px;font-size:11px}.pond .world-walker.one{bottom:15%;left:49%;animation:town-bob 4s infinite alternate}.pond .world-walker.two{bottom:5%;left:16%;animation-duration:25s}.pond-float{position:absolute;top:45%;left:42%;color:#ef8151;font-size:27px;text-shadow:0 2px white;animation:town-bob 1s infinite alternate}.pond-float.biting{animation:town-bob .13s infinite alternate;color:#ffd752}.seed-picker{display:flex;gap:8px;margin:18px 0}.seed-picker button{flex:1;border:1px solid #c6b191;background:#fbf4e7;border-radius:14px;padding:12px 4px;display:flex;flex-direction:column;align-items:center;gap:5px}.seed-picker .active{background:#dfe5bd;border:2px solid #88925f}.seed-picker span{font-size:25px;color:#86955c}.seed-picker small{font-size:9px}.garden-plots{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.garden-plot{padding:14px 6px;text-align:center;min-width:0}.garden-plot h3{font-size:14px}.garden-plot p{font-size:10px;min-height:20px}.garden-plot .btn{padding:9px 12px;font-size:12px}.sprout{display:block;margin:4px auto 10px;font-size:40px;color:#8a995d;border-bottom:7px solid #a78155;width:65px;border-radius:15%}.water-btn{display:block;background:none;border:0;font-size:10px;color:#63847d;padding:12px 0 0;width:100%}.fishing-card{text-align:center;margin-top:16px}.fishing-card h3{font-size:20px}.fishing-card p{font-size:11px;line-height:1.8}.fishing-meter{height:12px;border-radius:9px;background:#e3ddbf;overflow:hidden;margin:18px 0}.fishing-meter i{display:block;width:35%;height:100%;background:#aac5b6;animation:fish-wait 3s ease-in-out infinite alternate}.biting .fishing-meter{background:#d0e5ae}.biting .fishing-meter i{background:#e9a35f;animation-duration:.5s}.fish-collection{display:grid;grid-template-columns:1fr 1fr;gap:10px}.fish-collection .card{display:flex;flex-direction:column;text-align:center;gap:8px}.fish-collection span{font-size:60px;color:#69928c;line-height:1}.fish-collection b{font-size:13px}.fish-collection small{font-size:10px}.fish-collection .unknown{filter:grayscale(1);opacity:.6}.terrace-greeting{display:flex;align-items:center;gap:10px;padding:14px 0}.terrace-greeting>.sprite{width:82px;height:90px;flex-shrink:0}.terrace-greeting p{font-size:11px}.party-poster{display:block;position:relative;text-align:left;width:100%;overflow:hidden;border:2px solid #fff9e6;border-radius:23px;padding:23px;background:radial-gradient(ellipse at 90% 75%,#fce7ab 0 25%,transparent 26%),linear-gradient(135deg,#94d4d2,#b0e2d1 55%,#e7e6b9);box-shadow:0 6px 0 #c9bc9440;min-height:227px;color:#365f66}.poster-kicker{display:block;font-size:9px;letter-spacing:1.5px}.party-poster>b{display:block;font:34px/1.2 KaiTi,serif;margin:17px 0;position:relative;z-index:1}.party-poster i{display:block;font-style:normal;font-size:10px;position:relative;z-index:1}.party-poster strong{display:inline-block;padding:9px 17px;background:#fff3cd;border-radius:20px;margin-top:16px;font-size:12px}.poster-ball{position:absolute;right:18px;top:71px;width:95px;height:101px;border-radius:44% 46% 42% 47%;background:#ffa8af;box-shadow:inset -10px -8px #df85944a,0 15px 0 -5px #517e6e24;transform:rotate(13deg);display:grid;place-items:center;font-size:31px;color:#6b485a;animation:poster-float 3s ease-in-out infinite alternate}.poster-ball:before,.poster-ball:after{content:'';position:absolute;top:-9px;width:24px;height:28px;background:inherit;border-radius:5px 90% 0 0}.poster-ball:before{left:6px;transform:rotate(-25deg)}.poster-ball:after{right:6px;transform:rotate(22deg)}.party-stars{background:#fff0c7;border:1px solid #d5b06a;border-radius:20px;padding:8px;font-size:13px}.lobby-poster{min-height:213px}.party-stats{display:flex;justify-content:space-between;text-align:center;gap:6px;padding:20px 0;border-bottom:1px dashed #cdb998;font-size:10px}.party-stats b{display:block;margin-top:6px;font-size:14px;color:#8b7652}.track-card{display:flex;gap:15px;background:#fff9ec;border:1px solid #cbb99b;border-radius:18px;padding:15px;margin-bottom:13px;overflow:hidden}.track-number{width:70px;flex-shrink:0;border-radius:14px;background:var(--track);font:38px KaiTi,serif;color:white;text-align:center;padding-top:19px}.track-number span{display:block;margin-top:15px;font-size:38px}.track-card h3{margin:7px 0;font-size:20px}.track-card p{font-size:11px;line-height:1.8;margin:7px 0}.track-card small{font-size:9px;color:#8e7b61}.personal-best{display:block;font-size:10px;font-weight:normal;margin:7px 0 11px}.track-card .btn{font-size:12px;padding:9px 18px}.party-wardrobe{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px}.party-wardrobe button{border:1px solid #ceb999;border-radius:12px;background:#fff7e6;padding:13px 2px}.party-wardrobe .chosen{border:2px solid #939d69;background:#eff0d5}.party-wardrobe span{display:grid;place-items:center;width:43px;height:47px;border-radius:45%;margin:0 auto 10px;box-shadow:inset -5px -5px #00000009}.party-wardrobe b{display:block;font-size:10px}.party-wardrobe small{display:block;font-size:9px;margin-top:6px;color:#8c785a}.party-guide{margin-top:18px}.party-guide p{font-size:12px;line-height:2}.party-guide small{font-size:10px;line-height:1.9;color:#947b5c}.race-history{display:flex;justify-content:space-between;padding:13px 0;border-bottom:1px dashed #d5c5aa;font-size:11px;gap:8px}.race-history small{font-size:9px}.racing{overflow:hidden;overscroll-behavior:none}.party-overlay{position:fixed;inset:0;z-index:1000;background:#a0d9d5;max-width:540px;margin:auto;touch-action:none;overflow:hidden;font-family:KaiTi,serif;box-shadow:0 0 0 100vw #34484ee6}.party-overlay canvas{width:100%;height:100%;display:block}.race-top{position:absolute;top:max(16px,env(safe-area-inset-top));left:15px;right:15px;display:flex;align-items:center;gap:12px;color:#475e69}.race-top>button{border:2px solid #fff;background:#ffffffc9;border-radius:50%;width:39px;height:39px;font-size:25px;color:#64818a}.race-top>div:nth-child(2){background:#fff9e6e8;border:2px solid white;border-radius:14px;padding:9px 14px;flex:1}.race-top small{display:block;font-size:10px}.race-top strong{font:bold 21px sans-serif;display:block;margin-top:4px}.race-place{background:#fff9e6ec;padding:10px;border-radius:13px;text-align:center}.race-place b{display:block;font:18px sans-serif;margin-bottom:5px}.race-progress{position:absolute;top:100px;left:20px;right:20px;height:7px;border:1px solid white;border-radius:6px;background:#ffffff66;overflow:hidden}.race-progress i{display:block;background:#ed9c77;height:100%;transition:width .2s}.race-banner{position:absolute;top:122px;left:15%;right:15%;text-align:center;border-radius:25px;background:#ffffffb8;padding:8px;font-size:12px;color:#627686;pointer-events:none}.race-controls{position:absolute;bottom:max(27px,env(safe-area-inset-bottom));left:22px;right:22px;display:flex;align-items:end;justify-content:space-between;pointer-events:none}.race-controls>*{pointer-events:auto}#party-stick{width:112px;height:112px;border:3px solid #fff9;border-radius:50%;background:#fff5;display:grid;place-items:center;position:relative;box-shadow:0 4px 10px #435d6f22}#party-stick span{width:55px;height:55px;border-radius:50%;background:#fff9e8dd;border:3px solid #fff;box-shadow:0 3px 0 #70849444}#party-stick small{position:absolute;bottom:7px;font-size:10px;color:#4b7583}.race-buttons{display:flex;gap:14px;align-items:end}.race-buttons button{border-radius:50%;background:#ffe6b9;color:#98664d;border:3px solid white;width:68px;height:68px;font:bold 32px sans-serif;box-shadow:0 4px 0 #bb7d6766}.race-buttons button:last-child{background:#ffc0c2;color:#975973;width:85px;height:85px;font-size:38px}.race-buttons small{display:block;font:11px KaiTi,serif}.race-keyboard{position:absolute;bottom:8px;left:0;right:0;text-align:center;font-size:9px;color:#54717d}.race-result{position:absolute;top:50%;left:7%;right:7%;transform:translateY(-50%);border:3px solid #fff;background:#fff6e5;border-radius:26px;padding:24px;text-align:center;box-shadow:0 0 0 100vh #4f586766;color:#766345}.race-result[hidden]{display:none}.race-result h2{font:27px KaiTi,serif;margin:13px 0}.race-result small{font-size:10px}.race-result p{font-size:12px;line-height:1.8}.race-result .btn{margin:8px 3px;min-width:110px}.medal{font-size:55px;color:#dea24f}.result-stats{display:flex;justify-content:space-between;padding:15px 0;border-block:1px dashed #d9bb87;margin:15px 0;font-size:11px}.result-stats b{display:block;font:18px sans-serif;margin-top:8px}.btn:disabled{opacity:.5;cursor:default}button:focus-visible{outline:3px solid #578e9b;outline-offset:3px}
@keyframes town-stroll{0%,15%{transform:translate(-25px,0) rotate(-2deg)}70%,100%{transform:translate(45px,-25px) rotate(2deg)}}@keyframes town-bob{from{transform:translateY(0) rotate(-1deg)}to{transform:translateY(-4px) rotate(1deg)}}@keyframes fish-wait{from{transform:translateX(0)}to{transform:translateX(185%)}}@keyframes poster-float{to{transform:translateY(-7px) rotate(5deg)}}
@media(max-width:350px){.garden-plots{gap:5px}.garden-plot .btn{padding:8px}.race-controls{left:12px;right:12px}.race-buttons{gap:7px}.party-poster>b{font-size:29px}.poster-ball{right:13px;width:80px;height:86px}.track-number{width:52px}.world-heading h2{font-size:24px}}
@media(prefers-reduced-motion:reduce){.world-walker,.world-walker .cat-sprite,.poster-ball{animation:none}}
.area-scene .scene-caption{top:auto;transform:none;z-index:3}.area-scene .world-walker{z-index:2}
.world-walker{border:0;background:none;padding:0;cursor:pointer}.pond-float{border:0;background:none;padding:0;z-index:4}.garden-hotspots{position:absolute;left:15px;right:15px;top:43%;display:flex;gap:12px;justify-content:center;z-index:4}.garden-hotspots button{border:1px dashed #fff4c9;background:#faf0d9dd;border-radius:14px;padding:5px;width:52px;color:#6e8051;box-shadow:0 3px 0 #7d66492b}.garden-hotspots span{display:block;font-size:23px}.garden-hotspots small{font-size:9px}
