/* ============================================================
   pasture.css - 汪汪牧场
   2026-10-05 首版 / 2026-10-05b 显示修复 + 美术完善
   ------------------------------------------------------------
   色板沿用 global.css：--cream / --pink / --mint / --butter，
   描边 #6b4a2f，圆角 --radius-lg。

   ★★ 层级铁律（2026-10-05b 修复的核心）：
      .pt-scene 的 z-index 必须 **低于 .gb-modal(600)**，
      否则 GM 面板全部被场景盖住 → 点了商店/订单/详情"没反应"。
      实测首版写成 800 > 600，7 个面板全部不可见。
      只需高过 #top-bar(400) 即可，故取 500。
   ============================================================ */

/* ---------- 场景骨架 ---------- */
.pt-scene {
    position: fixed; inset: 0; z-index: 500;   /* ★ 必须 < 600 */
    display: none; overflow: hidden; font-family: inherit;
    background: linear-gradient(180deg, #cfeaf7 0%, #e4f3da 32%, #c6e59b 32.4%, #a9d378 100%);
}
.pt-scene.active { display: block; }

/* ---------- 天空 ---------- */
.pt-sky { position: absolute; inset: 0 0 auto 0; height: 34%; pointer-events: none; overflow: hidden; }
.pt-clouds { position: absolute; left: -8%; right: -8%; top: 4%; height: 16%; opacity: .92;
    background:
        radial-gradient(46px 16px at 10% 45%, #fff 99%, transparent),
        radial-gradient(62px 20px at 28% 72%, #fff 99%, transparent),
        radial-gradient(38px 13px at 48% 40%, #fff 99%, transparent),
        radial-gradient(68px 22px at 72% 62%, #fff 99%, transparent),
        radial-gradient(34px 12px at 90% 34%, #fff 99%, transparent);
    animation: pt-drift 70s linear infinite alternate; }
@keyframes pt-drift { from { transform: translateX(-2.5%); } to { transform: translateX(2.5%); } }

.pt-sun { position: absolute; right: 9%; top: 4%; width: 58px; height: 58px; border-radius: 50%;
    background: radial-gradient(circle at 38% 34%, #fff6cf, #ffd75e 72%);
    box-shadow: 0 0 38px 13px rgba(255, 214, 94, .42); pointer-events: none; }
.pt-moon { position: absolute; right: 12%; top: 6%; width: 46px; height: 46px; border-radius: 50%;
    background: radial-gradient(circle at 38% 32%, #ffffff, #dde6ff 72%);
    box-shadow: 0 0 24px 7px rgba(206, 222, 255, .5); display: none; pointer-events: none; }
.pt-stars { position: absolute; inset: 0 0 auto 0; height: 34%; display: none; pointer-events: none;
    background-image:
        radial-gradient(1.8px 1.8px at 11% 24%, #fff 99%, transparent),
        radial-gradient(1.5px 1.5px at 24% 44%, #fff 99%, transparent),
        radial-gradient(1.7px 1.7px at 37% 20%, #fff 99%, transparent),
        radial-gradient(1.4px 1.4px at 52% 38%, #fff 99%, transparent),
        radial-gradient(1.9px 1.9px at 66% 16%, #fff 99%, transparent),
        radial-gradient(1.5px 1.5px at 79% 42%, #fff 99%, transparent),
        radial-gradient(1.6px 1.6px at 88% 26%, #fff 99%, transparent),
        radial-gradient(1.3px 1.3px at 45% 8%, #fff 99%, transparent);
    animation: pt-twinkle 3.4s ease-in-out infinite alternate; }
@keyframes pt-twinkle { from { opacity: .55; } to { opacity: 1; } }

/* 夜晚：整场遮罩（统一压暗草地 / 建筑 / 动物，HUD 不受影响） */
.pt-scene.pt-night { background: linear-gradient(180deg, #212f4c 0%, #35456a 32%, #456b52 32.4%, #35573e 100%); }
.pt-scene.pt-night .pt-clouds { opacity: .3; }
.pt-scene.pt-night .pt-sun { display: none; }
.pt-scene.pt-night .pt-moon,
.pt-scene.pt-night .pt-stars { display: block; }
.pt-scene.pt-night .pt-night-veil { display: block; }

/* 天气：只作用于场地，不压暗 UI */
.pt-scene.pt-rain .pt-board { filter: saturate(.82) brightness(.93); }
.pt-scene.pt-thunder .pt-board { filter: saturate(.78) brightness(.88); }
.pt-scene.pt-snow .pt-board { filter: brightness(1.06); }

/* 天气粒子（纯 CSS，叠在板之上、HUD 之下；scene 已 overflow:hidden 兜住） */
.pt-weather { position: absolute; inset: 0; z-index: 9; pointer-events: none; overflow: hidden; display: none; }
.pt-scene.pt-rain .pt-weather,
.pt-scene.pt-thunder .pt-weather {
    display: block; opacity: .5;
    background-image: repeating-linear-gradient(100deg,
        rgba(190, 215, 240, 0) 0 9px, rgba(190, 215, 240, .55) 9px 10px, rgba(190, 215, 240, 0) 10px 18px);
    background-size: 200% 200%;
    animation: pt-rainfall .5s linear infinite; }
@keyframes pt-rainfall { from { background-position: 0 0; } to { background-position: -36px 110px; } }
.pt-scene.pt-thunder .pt-weather { animation: pt-rainfall .5s linear infinite, pt-flash 3.6s steps(1) infinite; }
@keyframes pt-flash { 0%, 90%, 100% { filter: none; } 92% { filter: brightness(1.7); } 96% { filter: none; } 98% { filter: brightness(1.4); } }
.pt-scene.pt-snow .pt-weather {
    display: block; opacity: .85;
    background-image:
        radial-gradient(3px 3px at 20% 30%, rgba(255, 255, 255, .92), transparent),
        radial-gradient(3px 3px at 62% 64%, rgba(255, 255, 255, .82), transparent),
        radial-gradient(2px 2px at 82% 18%, rgba(255, 255, 255, .85), transparent),
        radial-gradient(2.4px 2.4px at 42% 82%, rgba(255, 255, 255, .8), transparent),
        radial-gradient(2px 2px at 10% 70%, rgba(255, 255, 255, .8), transparent);
    background-size: 170px 170px;
    animation: pt-snowfall 7s linear infinite; }
@keyframes pt-snowfall { from { background-position: 0 0; } to { background-position: 34px 170px; } }

/* 夜晚：整场遮罩（统一压暗草地 / 建筑 / 动物，HUD 不受影响） */
.pt-night-veil { position: absolute; inset: 0; z-index: 8; display: none; pointer-events: none;
    background: linear-gradient(180deg, rgba(38, 54, 92, .34), rgba(30, 45, 74, .44)); }

/* ---------- 场地主板 ---------- */
.pt-board-wrap { position: absolute; left: 50%; top: 44px; bottom: 88px; transform: translateX(-50%);
    width: min(1000px, 96vw); }
.pt-board { position: relative; width: 100%; height: 100%; overflow: hidden;
    border: 7px solid #c9a06a; border-radius: 28px;
    box-shadow: 0 20px 46px rgba(74, 54, 32, .24), inset 0 0 60px rgba(255, 250, 220, .26);
    background:
        radial-gradient(140px 66px at 16% 26%, rgba(255, 255, 255, .18), transparent 72%),
        radial-gradient(170px 74px at 74% 62%, rgba(255, 255, 255, .13), transparent 72%),
        radial-gradient(120px 56px at 44% 88%, rgba(255, 255, 255, .12), transparent 72%),
        repeating-linear-gradient(96deg, rgba(138, 188, 88, .16) 0 5px, transparent 5px 26px),
        repeating-linear-gradient(6deg, rgba(255, 255, 255, .06) 0 3px, transparent 3px 22px),
        linear-gradient(180deg, #b7dd8a 0%, #a6d279 52%, #94c268 100%); }

/* 上缘围栏 */
.pt-board::before { content: ''; position: absolute; left: 0; right: 0; top: 0; height: 28px; z-index: 3;
    pointer-events: none; opacity: .95;
    background:
        repeating-linear-gradient(90deg, #c9a06a 0 8px, transparent 8px 44px),
        linear-gradient(180deg, #dcb98a 0 5px, transparent 5px 11px, #dcb98a 11px 16px, transparent 16px); }
/* 下缘围栏 */
.pt-board::after { content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 24px; z-index: 3;
    pointer-events: none; opacity: .95;
    background:
        repeating-linear-gradient(90deg, #c9a06a 0 8px, transparent 8px 44px),
        linear-gradient(0deg, #dcb98a 0 5px, transparent 5px 11px, #dcb98a 11px 16px, transparent 16px); }

/* 中央土路（从大门通往圈舍） */
.pt-path { position: absolute; left: 50%; bottom: 0; width: 20%; height: 30%; transform: translateX(-50%);
    z-index: 1; pointer-events: none;
    background: linear-gradient(180deg, rgba(214, 190, 140, 0), rgba(214, 190, 140, .5));
    clip-path: polygon(34% 100%, 66% 100%, 56% 0, 44% 0); }

/* ---------- 圈舍 ---------- */
.pt-zone { position: absolute; top: 13.5%; width: 28%; height: 70%; }
.pt-zone[data-pen="coop"] { left: 2%; }
.pt-zone[data-pen="barn"] { left: 36%; }
.pt-zone[data-pen="pen"] { left: 70%; }

/* 院子（草地 + 中间踩出来的土圈） */
.pt-yard { position: absolute; left: 2%; right: 2%; bottom: 0; height: 60%; border-radius: 18px;
    background: radial-gradient(72% 66% at 50% 46%, rgba(206, 226, 160, .85) 0%, rgba(188, 216, 143, .55) 62%, transparent 100%);
    box-shadow: inset 0 0 0 2px rgba(150, 190, 110, .3); }
.pt-yard::after { content: ''; position: absolute; left: 14%; right: 14%; bottom: 8%; height: 46%;
    border-radius: 50%; background: radial-gradient(closest-side, rgba(200, 172, 124, .42), transparent 78%); }

/* 院子前沿木栏 */
.pt-rail { position: absolute; left: -3%; right: -3%; bottom: -7px; height: 26px; z-index: 2; pointer-events: none;
    background:
        repeating-linear-gradient(90deg, #c9a06a 0 7px, transparent 7px 32px),
        linear-gradient(180deg, #dcb98a 0 5px, transparent 5px 11px, #dcb98a 11px 16px, transparent 16px); }

/* 圈舍名牌 */
.pt-zname { position: absolute; left: 50%; top: -20px; transform: translateX(-50%); z-index: 4;
    white-space: nowrap; font-size: 11px; line-height: 1.7; color: #6b4a2f;
    background: rgba(255, 251, 238, .94); border: 1px solid #e0c9a0; border-radius: 999px; padding: 0 10px; }

/* 建筑 */
.pt-bld { position: absolute; left: 50%; top: 0; transform: translateX(-50%); width: 76%; pointer-events: none; z-index: 2; }
.pt-bld svg { width: 100%; display: block; overflow: visible; filter: drop-shadow(0 7px 7px rgba(74, 54, 32, .2)); }
.pt-zone.locked .pt-bld { opacity: .5; }
.pt-zone.locked::after { content: '🔒'; position: absolute; left: 50%; top: 34%; transform: translate(-50%, -50%);
    font-size: 26px; z-index: 5; filter: drop-shadow(0 2px 2px rgba(74, 54, 32, .3)); }

/* 脏圈舍 → 苍蝇 */
.pt-flies::before { content: ''; position: absolute; inset: 0; z-index: 6; pointer-events: none; }
.pt-zone.dirty .pt-flies::before { content: '🪰'; position: absolute; right: 6px; top: 6px;
    font-size: 16px; inset: auto; animation: pt-fly 1.6s ease-in-out infinite alternate; }
@keyframes pt-fly { from { transform: translate(0, 0); } to { transform: translate(-10px, -7px) rotate(12deg); } }

/* ---------- 装饰物 ---------- */
.pt-decos { position: absolute; inset: 0; z-index: 4; pointer-events: none; }
.pt-deco { position: absolute; transform: translateX(-50%); }
.pt-deco svg { width: 100%; display: block; overflow: visible; filter: drop-shadow(0 3px 3px rgba(80, 60, 30, .16)); }

/* ---------- 动物 ---------- */
.pt-animals { position: absolute; inset: 0; }
.pt-animal { position: absolute; width: 74px; margin-left: -37px; margin-top: -62px;
    /* ★ z-index 5 → 7：必须压过前景草丛 .pt-grass(6)，否则站在下沿的动物名牌会被草吃掉。
       上限是夜晚遮罩 .pt-night-veil(8) —— 动物仍要被夜色压暗；
       访客 .pt-visitor 也是 7，但它在 DOM 里更靠后，照旧盖在动物前面。 */
    cursor: pointer; z-index: 7;
    transition: left 1.4s linear, top 1.4s linear; will-change: left, top; }
.pt-animal.baby { width: 50px; margin-left: -25px; margin-top: -42px; }
.pt-shadow { position: absolute; left: 50%; bottom: 4px; width: 56%; height: 10px;
    transform: translateX(-50%); border-radius: 50%; pointer-events: none;
    background: radial-gradient(closest-side, rgba(60, 44, 26, .42), rgba(60, 44, 26, 0) 72%); }
.pt-animal .pt-body { position: relative; transform-origin: 50% 100%; transform: scale(var(--sz, 1)); animation: pt-bob 2.6s ease-in-out infinite; }
.pt-animal .pt-body svg { width: 100%; display: block; filter: drop-shadow(0 4px 3px rgba(74, 54, 32, .2)); }
.pt-animal.walking .pt-body { animation: pt-hop .5s ease-in-out infinite; }
.pt-animal.flip .pt-body svg { transform: scaleX(-1); }
/* 体型差异（明显区分六种动物） */
.pt-animal.pt-t-chicken { --sz: .82; }
.pt-animal.pt-t-duck    { --sz: .9; }
.pt-animal.pt-t-rabbit  { --sz: .76; }
.pt-animal.pt-t-goat    { --sz: 1.0; }
.pt-animal.pt-t-sheep   { --sz: 1.08; }
.pt-animal.pt-t-cow     { --sz: 1.18; }
/* 进食：低头啄食（喂完后 1.4s） */
.pt-animal.eating .pt-body { animation: pt-eat .35s ease-in-out 4; }
/* 休息（夜晚）：缓慢起伏 + 轻微变暗 */
.pt-animal.resting .pt-body { animation: pt-rest 3.4s ease-in-out infinite; }
.pt-scene.pt-night .pt-animal .pt-body { filter: brightness(.92); }
/* 生产就绪：开心小跳 */
.pt-animal.producing .pt-body { animation: pt-prod 1s ease-in-out infinite; }
@keyframes pt-bob { 0%, 100% { transform: scale(var(--sz, 1)) scaleY(1); } 50% { transform: scale(var(--sz, 1)) scaleY(.965) translateY(1px); } }
@keyframes pt-hop { 0%, 100% { transform: scale(var(--sz, 1)) translateY(0) rotate(0); } 30% { transform: scale(var(--sz, 1)) translateY(-5px) rotate(-2deg); } 60% { transform: scale(var(--sz, 1)) translateY(0); } }
@keyframes pt-eat { 0%, 100% { transform: scale(var(--sz, 1)) translateY(0) rotate(0); } 50% { transform: scale(var(--sz, 1)) translateY(6px) rotate(7deg); } }
@keyframes pt-rest { 0%, 100% { transform: scale(var(--sz, 1)) scaleY(1); } 50% { transform: scale(var(--sz, 1)) scaleY(.93) translateY(2px); } }
@keyframes pt-prod { 0%, 100% { transform: scale(var(--sz, 1)) translateY(0); } 50% { transform: scale(var(--sz, 1)) translateY(-4px); } }

/* 远景树篱（空间层次：远景） */
.pt-backhedge { position: absolute; left: 0; right: 0; top: 26px; height: 46px; z-index: 0; pointer-events: none; opacity: .8;
    background:
        radial-gradient(26px 22px at 8% 100%, #8db86a 99%, transparent),
        radial-gradient(34px 26px at 22% 100%, #7fae5d 99%, transparent),
        radial-gradient(28px 22px at 38% 100%, #93bd72 99%, transparent),
        radial-gradient(34px 26px at 56% 100%, #7fae5d 99%, transparent),
        radial-gradient(26px 22px at 72% 100%, #8db86a 99%, transparent),
        radial-gradient(34px 26px at 90% 100%, #7aa956 99%, transparent);
    -webkit-mask-image: linear-gradient(180deg, transparent, #000 60%); mask-image: linear-gradient(180deg, transparent, #000 60%); }
/* 飞鸟（生活感） */
.pt-birds { position: absolute; inset: 0; z-index: 1; pointer-events: none; overflow: hidden; }
.pt-birds span { position: absolute; left: -40px; top: 12%; width: 32px; height: 32px; opacity: .85; animation: pt-fly-across 24s linear infinite; }
.pt-birds span:nth-child(2) { top: 20%; width: 25px; height: 25px; animation-duration: 31s; animation-delay: -7s; }
.pt-birds span:nth-child(3) { top: 7%; width: 29px; height: 29px; animation-duration: 27s; animation-delay: -15s; }
.pt-birds span:nth-child(4) { top: 16%; width: 23px; height: 23px; animation-duration: 35s; animation-delay: -22s; }
@keyframes pt-fly-across { 0% { transform: translateX(-40px) translateY(0); } 50% { transform: translateX(60vw) translateY(-14px); } 100% { transform: translateX(120vw) translateY(0); } }
/* 前景草丛（空间层次：前景） */
.pt-grass { position: absolute; left: 0; right: 0; bottom: 0; height: 26px; z-index: 6; pointer-events: none; opacity: .9;
    background-image:
        linear-gradient(74deg, transparent 47%, #82b25c 47% 53%, transparent 53%),
        linear-gradient(106deg, transparent 47%, #6f9e4c 47% 53%, transparent 53%);
    background-size: 15px 100%, 19px 100%; background-repeat: repeat-x; background-position: bottom; }

/* 主线纪念装饰：小木风车（叶片慢转） */
.pt-windmill { z-index: 4; }
.pt-wind-blades { transform-origin: 30px 30px; animation: pt-wind 6s linear infinite; }
@keyframes pt-wind { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }

/* 季节色调（叠加在天气滤镜之上） */
.pt-scene.pt-spring .pt-board { filter: saturate(1.06) brightness(1.02); }
.pt-scene.pt-summer .pt-board { filter: saturate(1.14) brightness(1); }
.pt-scene.pt-autumn .pt-board { filter: saturate(.96) hue-rotate(-12deg) brightness(.97); }
.pt-scene.pt-winter .pt-board { filter: saturate(.68) brightness(1.06) hue-rotate(10deg); }

/* 建筑按等级放大（Lv 越高越气派） */
.pt-bld { transition: transform .35s ease; }
.pt-zone[data-lv="2"] .pt-bld { transform: translateX(-50%) scale(1.05); }
.pt-zone[data-lv="3"] .pt-bld { transform: translateX(-50%) scale(1.12); }

/* 名牌
   ★ 2026-10-06 修「不同分辨率下动物名字不显示」：
     ① 以前窄屏（≤420px，几乎覆盖所有手机）直接 display:none，名字整条消失；
        现在改成「变小但仍然显示」（见下方媒体查询）。
     ② 名字属于信息层：靠 .pt-animal 的 z-index(7) 压过前景草丛 .pt-grass(6)，
        所以这里的 z-index 只用于压住同一只动物内部的影子/身体。 */
.pt-nametag { position: absolute; left: 50%; bottom: -8px; transform: translateX(-50%);
    white-space: nowrap; font-size: 10px; line-height: 1.5; color: #6b4a2f;
    background: rgba(255, 251, 238, .94); border: 1px solid #e0c9a0;
    padding: 0 7px; border-radius: 999px; pointer-events: none; max-width: 84px;
    overflow: hidden; text-overflow: ellipsis; box-shadow: 0 1px 2px rgba(74, 54, 32, .12);
    z-index: 2; }

/* 状态气泡 */
.pt-bubble { position: absolute; left: 50%; top: -18px; transform: translateX(-50%); pointer-events: none; }
.pt-bubble span { display: block; width: 26px; height: 26px; border-radius: 50%;
    background: rgba(255, 252, 242, .95); border: 2px solid #e0c9a0;
    display: grid; place-items: center; font-size: 13px; }
.pt-bubble .bb-ready { animation: pt-ready 1s ease-in-out infinite; border-color: #f2c14e; background: #fff7dd; }
.pt-bubble .bb-ready svg { width: 17px; height: 17px; }
.pt-bubble .bb-hungry { animation: pt-shake 1.2s ease-in-out infinite; }
@keyframes pt-ready { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-5px); } }
@keyframes pt-shake { 0%, 100% { transform: rotate(0); } 25% { transform: rotate(-9deg); } 75% { transform: rotate(9deg); } }

/* ---------- 大门 ---------- */
.pt-gate { position: absolute; left: 50%; bottom: -4px; transform: translateX(-50%); z-index: 6; pointer-events: none; }
.pt-gate svg { width: 216px; display: block; overflow: visible; }

/* ---------- 访客 ---------- */
.pt-visitor { position: absolute; bottom: 6%; z-index: 7; cursor: pointer; text-align: center; }
/* 访客猫：复用餐厅猫角色形象（GB.RestaurantArt.cat 返回的内联 SVG 无显式宽高，
   这里给定尺寸，并把 bob 动画保留在容器上；reduced-motion 已在下方统一关掉。 */
.pt-visitor-cat { width: 58px; height: 62px; margin: 0 auto; animation: pt-bob 3s ease-in-out infinite; filter: drop-shadow(0 4px 3px rgba(74,54,32,.22)); }
.pt-visitor-cat svg { width: 100%; height: 100%; display: block; overflow: visible; }
.pt-visitor-card { background: var(--card-bg, rgba(255,255,255,.94)); border: 2px solid #f0d9ae;
    border-radius: 14px; padding: 5px 10px; font-size: 12px; color: #6b4a2f; margin-bottom: 4px;
    box-shadow: 0 4px 10px rgba(74, 54, 32, .15); }

/* ---------- 特效 ---------- */
.pt-pop { position: absolute; left: 50%; top: 0; transform: translateX(-50%); z-index: 40;
    font-size: 14px; font-weight: bold; color: #6b4a2f; pointer-events: none;
    animation: pt-rise 1.1s ease forwards; white-space: nowrap;
    background: rgba(255, 252, 242, .95); border: 2px solid #f2c14e; border-radius: 999px; padding: 2px 10px; }
.pt-pop svg { width: 16px; height: 16px; vertical-align: -3px; }
@keyframes pt-rise { 0% { opacity: 0; transform: translate(-50%, 6px); } 15% { opacity: 1; } 100% { opacity: 0; transform: translate(-50%, -34px); } }
.pt-spark { position: absolute; z-index: 41; font-size: 15px; pointer-events: none;
    animation: pt-sparkle .9s ease forwards; }
@keyframes pt-sparkle { 0% { opacity: 0; transform: translateY(0) scale(.6); } 25% { opacity: 1; } 100% { opacity: 0; transform: translateY(-30px) scale(1.1); } }

/* ---------- HUD ---------- */
.pt-hud { position: absolute; left: 0; right: 0; top: 0; height: 46px; z-index: 20;
    display: flex; align-items: center; gap: 10px; padding: 0 12px;
    background: linear-gradient(180deg, rgba(255, 247, 236, .97), rgba(255, 247, 236, .84));
    border-bottom: 2px solid #f0dcb4; }
.pt-back { border: 2px solid #e0c9a0; background: #fff8ea; color: #6b4a2f;
    border-radius: 12px; padding: 4px 12px; font-size: 13px; cursor: pointer; flex: none; }
.pt-back:active { transform: translateY(1px); }
.pt-title { font-weight: bold; color: #6b4a2f; font-size: 15px; white-space: nowrap; }
.pt-lv { color: #6b4a2f; font-size: 12px; display: flex; align-items: center; gap: 6px; white-space: nowrap; }
.pt-expbar { display: inline-block; width: 74px; height: 8px; border-radius: 999px;
    background: #efe3c8; overflow: hidden; vertical-align: middle; }
.pt-expbar i { display: block; height: 100%; background: linear-gradient(90deg, #a8dcd0, #7ec9b8); border-radius: 999px; transition: width .4s; }
.pt-count { margin-left: auto; color: #6b4a2f; font-size: 13px; white-space: nowrap; }

/* ---------- 工具栏 ---------- */
.pt-toolbar { position: absolute; left: 0; right: 0; bottom: 0; z-index: 20;
    display: flex; gap: 8px; justify-content: center; padding: 10px 10px calc(10px + env(safe-area-inset-bottom, 0));
    background: linear-gradient(0deg, rgba(255, 247, 236, .98), rgba(255, 247, 236, .82));
    border-top: 2px solid #f0dcb4; flex-wrap: wrap; }
.pt-toolbar button {
    border: 2px solid #e0c9a0; background: #fffdf6; color: #6b4a2f;
    border-radius: 14px; padding: 7px 13px; font-size: 13px; cursor: pointer;
    box-shadow: 0 3px 0 rgba(180, 150, 100, .25); transition: transform .12s; white-space: nowrap; }
.pt-toolbar button:active { transform: translateY(2px); box-shadow: none; }

/* ---------- 旁白 ---------- */
.pt-caption { position: absolute; left: 50%; top: 56px; transform: translateX(-50%); z-index: 30;
    max-width: min(560px, 88%); text-align: center; font-size: 13px; color: #6b4a2f;
    background: rgba(255, 252, 242, .96); border: 2px solid #f0d9ae; border-radius: 14px;
    padding: 7px 14px; box-shadow: 0 6px 16px rgba(74, 54, 32, .14); pointer-events: none; }

/* ---------- GM 面板内容 ---------- */
.gb-modal .pt-panel-list { display: flex; flex-direction: column; gap: 10px; }
.gb-modal .pt-row { display: flex; align-items: center; gap: 10px;
    background: #fffaf0; border: 2px solid #f0e2c4; border-radius: 16px; padding: 10px; }
.gb-modal .pt-row.pt-done { opacity: .55; }
.gb-modal .pt-row-ico { width: 56px; flex: none; font-size: 30px; text-align: center; }
.gb-modal .pt-row-ico svg { width: 100%; display: block; }
.gb-modal .pt-row-main { flex: 1; min-width: 0; }
.gb-modal .pt-row-main b { color: #6b4a2f; font-size: 14px; }
.gb-modal .pt-row-desc { color: #8a7460; font-size: 12px; margin-top: 2px; line-height: 1.5; }
.gb-modal .pt-row-desc svg { width: 15px; height: 15px; vertical-align: -3px; }
.gb-modal .pt-row-meta { color: #a08371; font-size: 11px; margin-top: 2px; }
.gb-modal .pt-price { color: #c07a2a; font-size: 12px; }
.gb-modal .pt-btn { border: 2px solid #e0c9a0; background: #fffdf6; color: #6b4a2f;
    border-radius: 12px; padding: 6px 12px; font-size: 13px; cursor: pointer; flex: none; }
.gb-modal .pt-btn:disabled { opacity: .45; cursor: not-allowed; }
.gb-modal .pt-btn.pt-primary { background: #ffe9b8; border-color: #eec46a; font-weight: bold; }
.gb-modal .pt-btn.pt-sm { padding: 4px 10px; font-size: 12px; }
.gb-modal .pt-btn small { display: block; font-size: 10px; color: #a08371; }
.gb-modal .pt-note { color: #a08371; font-size: 12px; margin-top: 10px; line-height: 1.6; }
.gb-modal .pt-stamp { color: #7ec9b8; font-weight: bold; flex: none; font-size: 13px; }
.gb-modal .pt-warn { color: #e35d4f; }
.gb-modal .pt-good { color: #4fa08b; }
.gb-modal .pt-kv { color: #6b4a2f; font-size: 12px; margin: 3px 0; }
.gb-modal .pt-mini-bar { display: inline-block; width: 90px; height: 8px; border-radius: 999px;
    background: #efe3c8; overflow: hidden; vertical-align: middle; }
.gb-modal .pt-mini-bar i { display: block; height: 100%; background: linear-gradient(90deg, #a8dcd0, #7ec9b8); }
.gb-modal .pt-mini-bar.bad i { background: linear-gradient(90deg, #f7a08a, #e35d4f); }
.gb-modal .pt-animal-head { display: flex; gap: 12px; align-items: center; margin-bottom: 10px; }
.gb-modal .pt-animal-big { width: 92px; flex: none; }
.gb-modal .pt-animal-big svg { width: 100%; display: block; }
.gb-modal .pt-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.gb-modal .pt-deliver-ctl { display: flex; flex-direction: column; gap: 6px; }
.gb-modal .pt-help p { color: #6b4a2f; font-size: 13px; line-height: 1.8; margin: 8px 0; }
.gb-modal .pt-help b { color: #c07a2a; }

/* ---------- 地图 / 地点入口 ---------- */
.pt-place-deco { position: relative; height: 130px; margin-bottom: 10px; }
.pt-place-deco svg { width: 100%; height: 100%; }
.pt-place-enter { position: absolute; left: 50%; bottom: calc(24px + var(--sa-bottom));
    transform: translateX(-50%); z-index: 20; border-color: #c9a06a; color: #6b4a2f; }
.pt-place-enter:disabled { border-color: #cbb79a; color: #a8977f; }

/* ---------- 移动端 ---------- */
@media (max-width: 760px) {
    .pt-board-wrap { top: 42px; bottom: 116px; width: 98vw; }
    .pt-animal { width: 56px; margin-left: -28px; margin-top: -46px; }
    .pt-animal.baby { width: 38px; margin-left: -19px; margin-top: -31px; }
    .pt-zname { font-size: 10px; padding: 0 7px; }
    /* 动物变小了，名牌跟着收一点（仍然是完整的名字，不隐藏） */
    .pt-nametag { font-size: 9.5px; padding: 0 6px; max-width: 70px; }
    .pt-toolbar { gap: 6px; }
    .pt-toolbar button { padding: 6px 9px; font-size: 12px; }
    .pt-gate svg { width: 150px; }
    .pt-lv .pt-expbar { width: 52px; }
}
@media (max-width: 420px) {
    .pt-title { display: none; }
    .pt-toolbar button { padding: 6px 7px; }
    /* ★ 不再隐藏名字 —— 手机是主力机，隐藏等于「牧场里认不出哪只是哪只」。
       改成整体收一档（字号/内边距/最大宽度），横向挤得下、又不会糊成一团。 */
    .pt-nametag { font-size: 9px; line-height: 1.45; padding: 0 5px; max-width: 60px; bottom: -7px; }
    .pt-zname { font-size: 9px; padding: 0 5px; }
}

/* ---------- 降级动效 ---------- */
@media (prefers-reduced-motion: reduce) {
    .pt-animal .pt-body, .pt-animal.walking .pt-body, .pt-animal.eating .pt-body,
    .pt-animal.resting .pt-body, .pt-animal.producing .pt-body, .pt-clouds, .pt-stars,
    .pt-birds span, .pt-wind-blades, .pt-bubble .bb-ready, .pt-bubble .bb-hungry, .pt-zone.dirty .pt-flies::before,
    .pt-visitor-cat, .pt-pop, .pt-spark { animation: none !important; }
    .pt-animal { transition: none; }
}

/* 天上飞的小鸟：emoji → 手绘内联 SVG（扇翅动画）
   原来靠 font-size 撑尺寸，SVG 改成显式 width/height（略放大以保住可见度） */
.pt-birds span { display: block; overflow: visible; }
.pt-birds svg { width: 100%; height: 100%; display: block; overflow: visible; }
