  .sky-ship.tut-focus { box-shadow: none; animation: none; }
  .sky-ship.tut-focus::after {
    content: ""; position: absolute; inset: 0;
    border-radius: 22px;
    box-shadow: 0 0 0 2px rgba(26,26,26,.85), 0 0 0 6px rgba(255,255,255,.75);
    animation: tutPulse 1.4s ease-in-out infinite;
    pointer-events: none;
  }
  .surface {
    position: relative;
    flex: 1 1 auto;
    overflow: hidden;
    background: #FFF8EC;
    touch-action: none;
    cursor: grab;
  }
  .surface.dragging { cursor: grabbing; }
  .surface.has-planet-art {
    background-color: #FFF8EC;
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
  }
  .surface.has-planet-art .dust,
  .surface.has-planet-art .dust-gust { display: none; }
  .planet-disc {
    position: absolute; left: 0; top: 0;
    pointer-events: none;
    user-select: none;
    z-index: 0;
    will-change: transform;
  }
  .dust {
    position: absolute;
    inset: 0 -220px 0 0;            /* 右侧多铺一屏，位移时不会露边 */
    pointer-events: none;
    background-image:
      radial-gradient(2px 2px at 22% 28%, rgba(196,150,104,.34) 50%, transparent 51%),
      radial-gradient(1.6px 1.6px at 64% 46%, rgba(196,150,104,.26) 50%, transparent 51%),
      radial-gradient(1.6px 1.6px at 38% 66%, rgba(196,150,104,.22) 50%, transparent 51%),
      radial-gradient(2.4px 2.4px at 82% 18%, rgba(196,150,104,.18) 50%, transparent 51%);
    background-size: 220px 220px;
    animation: dustDrift 18s linear infinite;
    will-change: transform;
  }
  @keyframes dustDrift {
    from { transform: translate3d(0, 0, 0); }
    to { transform: translate3d(-220px, 0, 0); }
  }
  .dust-gust {
    position: absolute;
    inset: 0 -140px 0 0;
    pointer-events: none;
    opacity: 0;
    background-image:
      radial-gradient(2px 2px at 18% 24%, rgba(176,124,78,.42) 50%, transparent 51%),
      radial-gradient(1.6px 1.6px at 56% 52%, rgba(176,124,78,.34) 50%, transparent 51%),
      radial-gradient(2.4px 2.4px at 82% 34%, rgba(176,124,78,.3) 50%, transparent 51%),
      radial-gradient(1.6px 1.6px at 34% 72%, rgba(176,124,78,.26) 50%, transparent 51%);
    background-size: 140px 140px;
    transition: opacity .5s ease;
  }
  .dust-gust.warn { opacity: .5; }
  .dust-gust.on { opacity: 1; animation: gustDrift .8s linear infinite; }
  @keyframes gustDrift {
    from { transform: translate3d(0, 0, 0); }
    to { transform: translate3d(-140px, 0, 0); }
  }

  .rain-layer {
    position: absolute; inset: 0;
    z-index: 2;
    overflow: hidden;
    pointer-events: none;
  }
  .rain-drop {
    position: absolute;
    display: block;
    height: auto;
    opacity: 0;
    animation-name: rainFall;
    animation-timing-function: linear;
    animation-iteration-count: infinite;
    filter: drop-shadow(0 0 2px rgba(255,255,255,.35));
    will-change: transform, opacity;
  }
  @keyframes rainFall {
    0% { transform: translate3d(0, 0, 0); opacity: 0; }
    8% { opacity: var(--rain-opacity, .6); }
    92% { opacity: var(--rain-opacity, .6); }
    100% { transform: translate3d(var(--drift, 0px), var(--fall, 820px), 0); opacity: 0; }
  }

  /* 雪花尺寸倍率：定稿 −30%（用户选定）。只缩放单颗尺寸，
   * 不改数量（42）、分布范围、下落 760–1020ms 与漂移参数。 */
  :root { --snow-scale: .7; }
  .snow-layer {
    position: absolute; inset: 0;
    z-index: 2;
    overflow: hidden;
    pointer-events: none;
  }
  .snow-flake {
    position: absolute;
    display: block;
    height: auto;
    opacity: 0;
    animation-name: snowFall;
    animation-timing-function: linear;
    animation-iteration-count: infinite;
    filter: drop-shadow(0 0 3px rgba(255,255,255,.55));
    will-change: transform, opacity;
  }
  @keyframes snowFall {
    0% { transform: translate3d(0, 0, 0) rotate(0deg); opacity: 0; }
    10%, 90% { opacity: var(--snow-opacity, .7); }
    50% { transform: translate3d(var(--sway, 18px), calc(var(--fall, 820px) * .5), 0) rotate(90deg); }
    100% { transform: translate3d(var(--drift, 0px), var(--fall, 820px), 0) rotate(180deg); opacity: 0; }
  }
  .surface svg.ground { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
  .den {
    position: absolute; left: 0; top: 0;
    width: 64px; height: 44px;       /* 44 高保证触摸目标；坑落在按钮底边 */
    padding: 0; border: 0; background: none;
    cursor: pointer; z-index: 2;
    transform-origin: 50% 100%;
    will-change: transform, opacity;
  }
  .den-hole {
    position: absolute; left: 6px; bottom: 0;
    width: 52px; height: 20px; border-radius: 50%;
    background: radial-gradient(ellipse at 50% 30%, #B08A63, #6B4A32 72%);
    box-shadow:
      inset 0 3px 6px rgba(90,50,20,.4),
      0 0 0 3px rgba(217,190,156,.55);   /* 坑口隆起的土沿 */
  }
  .den-hole::after {
    content: "";
    position: absolute; left: -8px; right: -8px; top: 12px; height: 12px;
    background:
      radial-gradient(circle at 8% 45%, #C09A72 0 3px, transparent 3.5px),
      radial-gradient(circle at 94% 62%, #B08A63 0 2.5px, transparent 3px);
  }
  .den-head {
    position: absolute; left: 15px; bottom: 3px;
    width: 34px; height: 28px;
    overflow: hidden;               /* 只留头部，其余裁掉 */
    transform-origin: 50% 100%;
    transform: translateY(9px) scale(.7);
    opacity: 0;
    filter: drop-shadow(0 2px 2px rgba(110,72,40,.45));   /* 浅色地表上靠影子脱开 */
  }
  .den-head img {
    position: absolute; left: -9px; top: -16px;
    width: 84px; height: auto; max-width: none;
    pointer-events: none;
    -webkit-user-drag: none;
  }
  .den.probe .den-head { animation: denProbe .8s ease-in-out; }
  @keyframes denProbe {
    0%   { transform: translateY(9px) scale(.7); opacity: 0; }
    25%  { transform: translateY(-8px) scale(1) rotate(0deg); opacity: 1; }
    45%  { transform: translateY(-8px) scale(1) rotate(-7deg); opacity: 1; }
    65%  { transform: translateY(-8px) scale(1) rotate(7deg); opacity: 1; }
    100% { transform: translateY(9px) scale(.7); opacity: 0; }
  }
  .den-label {
    position: absolute; left: 0; right: 0; top: calc(100% + 1px);
    font-size: 11px; color: var(--ink-3); text-align: center;
    pointer-events: none;
  }
  .den.golden .den-hole { background: radial-gradient(ellipse at 50% 30%, #f7e6a9, #c99b2e 72%); }
  .den.golden .den-label { color: #a9821f; }

  .bait {
    position: absolute; left: 0; top: 0;
    width: 44px; height: 44px;       /* 触摸目标 ≥ 44px */
    padding: 0; border: 0; background: none;
    display: grid; place-items: center;
    cursor: grab;
    touch-action: none;
    z-index: 5;                      /* 压在景物之上，和景物重叠时也能看清 */
    will-change: transform, opacity;
  }
  .bait::before {
    content: ""; position: absolute; inset: -12px;
    border-radius: 50%;
    background: radial-gradient(circle,
      rgba(255,214,140,.55) 0%,
      rgba(255,183,94,.26) 44%,
      rgba(255,183,94,0) 72%);
    opacity: 0;
    pointer-events: none;
  }
  .bait.good-item::before { opacity: .18; }
  .bait.good-item.place-glow::before { animation: baitGoodGlow 1.15s ease-out both; }
  @keyframes baitGoodGlow {
    0% { opacity: 0; }
    38% { opacity: .62; }
    100% { opacity: .18; }
  }
  .bait::after {
    content: "";
    position: absolute;
    left: 8px; right: 8px; bottom: 3px;
    height: 9px;
    border-radius: 50%;
    background: radial-gradient(ellipse at center,
      rgba(74,42,24,.32) 0%,
      rgba(74,42,24,.16) 48%,
      rgba(74,42,24,0) 76%);
    pointer-events: none;
    transform-origin: 50% 50%;
  }
  .bait.just-placed .item-ico { animation: baitDrop .36s cubic-bezier(.2,.9,.3,1.1); }
  .bait.just-placed::after { animation: baitDust .42s ease-out; }
  /* 收回背包：幻影从原位飞向背包按钮（位移由 JS 实测后写进 --rx / --ry），
   * 边飞边缩小、到达即消失；数据早已回到背包，这层只管画面。
   * 用独立的 .bait-ghost 而不是沿用 .bait，避免影响任何按 .bait 计数的逻辑 */
  .bait-ghost {
    position: absolute; left: 0; top: 0;
    width: 44px; height: 44px;
    display: grid; place-items: center;   /* 和 .bait 一样居中，起点 / 终点才对得准 */
    pointer-events: none;
    z-index: 6;
  }
  .bait-ghost .item-ico { width: 34px; height: 34px; }
  .bait-ghost.retrieving .item-ico { animation: baitRetrieve .38s cubic-bezier(.35,.1,.6,1) both; }
  @keyframes baitRetrieve {
    0% { transform: translate(0, 0) scale(1); opacity: 1; }
    18% { transform: translate(calc(var(--rx, 0px) * .02), calc(var(--ry, 0px) * .02)) scale(1.12); opacity: 1; }
    62% { opacity: 1; }               /* 前 2/3 保持不透明，只在最后一段淡出 */
    100% { transform: translate(var(--rx, 0px), var(--ry, 0px)) scale(.18); opacity: 0; }
  }
  @keyframes baitRetrieveFade {
    0% { opacity: .9; }
    100% { opacity: 0; }
  }
  /* 减弱动态：不位移，就地淡出（背包图标改走静态高亮，见 styles-reveal.css） */
  .bait-ghost.retrieving-fade .item-ico { animation: baitRetrieveFade .22s ease-out both; }
  /* 放错了：落地后短促左右抖两三下（只动图标，诱饵位置数据不变） */
  .bait.just-placed.place-wrong .item-ico {
    animation: baitDropShake .68s cubic-bezier(.2,.9,.3,1.1) both;
  }
  @keyframes baitDrop {
    0% { transform: translateY(-14px) scale(.82); opacity: 0; }
    60% { transform: translateY(1px) scale(1.06); opacity: 1; }
    100% { transform: translateY(0) scale(1); opacity: 1; }
  }
  @keyframes baitDropShake {
    0% { transform: translateY(-14px) scale(.82); opacity: 0; }
    22% { transform: translateY(1px) scale(1.06); opacity: 1; }
    40% { transform: translateY(0) scale(1); }
    52% { transform: translate(-3px, 0); }
    62% { transform: translate(3px, 0); }
    72% { transform: translate(-2px, 0); }
    82% { transform: translate(2px, 0); }
    92% { transform: translate(-1px, 0); }
    100% { transform: translate(0, 0); }
  }
  @keyframes baitDust {
    0% { transform: scale(.55); opacity: .85; }
    100% { transform: scale(1.7); opacity: 0; }
  }
  .bait .item-ico {
    position: relative; z-index: 1;
    width: 34px; height: 34px;
    /* 图案保持素材原色（不随变体变色），只保留统一的贴地阴影 */
    filter: drop-shadow(0 3px 6px rgba(94,56,38,.35));
  }
  .bait.dragging { cursor: grabbing; z-index: 6; }
  .bait.mode-press::after {
    background: radial-gradient(ellipse at center,
      rgba(74,42,24,.44) 0%,
      rgba(74,42,24,.2) 50%,
      rgba(74,42,24,0) 78%);
  }

  .scent {
    position: absolute; left: 0; top: 0;
    border-radius: 50%;
    border: 2px dashed rgba(255,138,61,.72);
    background: radial-gradient(circle, rgba(255,138,61,.16) 0%, rgba(255,138,61,.05) 68%, rgba(255,138,61,0) 100%);
    opacity: 0;
    pointer-events: none;
    z-index: 1;
    transition: opacity .18s ease;
    will-change: transform, opacity;
  }
  .scent.on { opacity: .85; }
  .scent.preview { border-style: solid; border-color: rgba(201,98,46,.9); }

  .drop-float {
    position: absolute;
    font-size: 13px; font-weight: 600; color: var(--ink);
    pointer-events: none;
    animation: floatUp 1s ease-out forwards;
  }
  .drop-item {
    position: absolute;
    display: flex; align-items: center; justify-content: center;
    pointer-events: none;
    z-index: 4;
    filter: drop-shadow(0 3px 5px rgba(120,80,45,.35));
  }
  .drop-item .item-ico { width: 40px; height: 40px; }
  @keyframes floatUp {
    from { opacity: 1; transform: translate(-50%, 0); }
    to { opacity: 0; transform: translate(-50%, -56px); }
  }

  @media (prefers-reduced-motion: reduce) {
    .bait.good-item::before,
    .bait.good-item.place-glow::before { opacity: .18; animation: none; }
    .bait.just-placed.place-wrong .item-ico { animation: none; }
  }
