
  /* ================= 星球页：飞船与火焰 =================
   * 飞船、火焰、牵引口共用同一个 rig（宽高与 SVG 一致），
   * 这样火焰一定挂在推进器口上，光柱也一定从船体正中落下 */
  /* 尺寸由 JS 按屏宽与「顶栏 ↔ 羊活动区」之间的天空带宽算出来，
   * 写进 --ship-w；left/top 只做首帧基准落点，拖动时 JS 只改 transform（不触发布局） */
  .sky-ship {
    position: absolute; left: 50%; top: 29.55%;   /* 首帧兜底：JS 写入 planetShip.y 前保持清单 centerYRatio */
    width: var(--ship-w, 132px);
    margin: calc(var(--ship-w, 132px) * -0.4711) 0 0 calc(var(--ship-w, 132px) * -0.5);
    z-index: 7;                       /* 火焰会稍微溢出到地表上，不能被地表盖住 */
    touch-action: none;               /* 长按蓄能 / 拖动时不要触发浏览器手势 */
    cursor: grab;
    will-change: transform;
    animation: shipIdleFloat 2.8s ease-in-out infinite;
  }
  .sky-ship.operating { animation-play-state: paused; }
  /* 用独立的 translate 属性做浮动：与 JS 写的 transform 互不覆盖，暂停时也不会跳位 */
  @keyframes shipIdleFloat {
    0%, 100% { translate: 0 0; }
    50%      { translate: 0 -5px; }
  }
  .sky-ship.dragging { cursor: grabbing; }
  .ship-rig {
    position: relative;
    width: 100%;
    transform-origin: 50% 100%;       /* 上下移动时以舱口为基准缩放，光柱不会错位 */
    pointer-events: none;             /* 命中区由外层 .sky-ship 负责，避免点到透明边 */
  }
  /* 喷口火焰：从左右推进器口往下喷，长度由 JS 写 --jet（scaleY）伸缩。
   * 星球页与星域共用这一处尺寸与形状（唯一来源）：宽 = rig 宽 7.5%、高 = rig 高 22%。
   * 圆头：横向圆角 50% 就是半宽；纵向若直接写百分比会按「高度」计算，配合 scaleY
   * 压缩后会变成竖长椭圆（改前实测 9.94 × 21.03px，纵横比 2.12）。
   * 这里用 px 半径 = 半宽 ÷ --jet 预补偿：scaleY 作用后屏幕上纵向半径正好等于半宽，
   * 任意长度下都是正圆，且与父级等比缩放无关。 */
  .jet, .home-jet {
    --jet-cap: calc(var(--ship-w, 132px) * 0.0375 / var(--jet, .85));
    position: absolute;
    width: 7.5%;
    height: 22%;
    /* 上口 = 正圆焰头（预补偿半宽）；下摆 55% 高度让尾部平滑收圆，避免长直边看起来像圆角矩形 */
    border-radius: 50% 50% 50% 50% / var(--jet-cap) var(--jet-cap) 55% 55%;
    background: linear-gradient(180deg,
      #fff8d6 0%, #ffd166 34%, #ff8a3d 66%, rgba(255,110,50,0) 100%);
    filter: blur(.6px) drop-shadow(0 0 8px rgba(255,150,60,.65));
    transform-origin: 50% 0%;
    transform: rotate(var(--tilt, 0deg)) scaleY(var(--jet, .85));
    opacity: .85;
    will-change: transform, opacity;
  }
  /* 星球页的船换成素材立绘（外层宽度由 --ship-w 决定），火焰按比例挂在推进器口；
   * 焰顶压进船体（接缝 = 焰顶 − 船底，定稿区间 −2 ~ −8px；素材在这两条 x 带上的
   * 不透明底边在 96.3%，94.5% 起喷整条顶边都藏在船体后面），常驻（scaleY .85）时
   * 露出来的是「白热核心 → 橙色 → 渐隐」整段，而不是只剩一截暗尾；
   * z-index 1 压在光晕之上、船体之下 */
  .jet {
    top: 94.5%;                    /* 尺寸与圆头在共用规则里，这里只定接入船体的位置 */
    z-index: 1;
    /* 橙红外壳 + 喷口处的白热核心（径向叠层），亮黄背景上才读得出是火苗：
     * 整段都用浅黄会和天空同化，像一团奶白 */
    background:
      radial-gradient(58% 30% at 50% 16%,
        #fffdf0 0%, rgba(255,243,168,.92) 36%, rgba(255,208,96,0) 100%),
      linear-gradient(180deg, #ffb43c 0%, #ff8a1c 34%, #ef6a12 62%, #c94707 84%, rgba(201,71,7,0) 100%);
    box-shadow: 0 0 6px 1px rgba(255,120,20,.5);    /* 暖色外晕，亮黄背景上也读得出“在喷火” */
    transition: transform .2s ease-out, opacity .2s ease-out;   /* 停稳后平滑回到常驻短焰 */
  }
  .sky-ship.dragging .jet { transition: none; }
  .jet-l { left: 22%; --tilt: 9deg; }
  .jet-r { left: 70.5%; --tilt: -9deg; }   /* 与左侧关于船体中轴镜像：22% + 7.5% 宽 → 右侧左缘 70.5% */
  .home-jet { transition: transform .2s ease-out, opacity .2s ease-out; }
  .home-jet-l { left: 21px; --tilt: 7deg; }
  .home-jet-r { left: 53px; --tilt: -7deg; }
  .jet.firing, .home-jet.firing { animation: jetFlicker .16s steps(2) infinite; }
  @keyframes jetFlicker {
    0% { filter: blur(.6px) drop-shadow(0 0 8px rgba(255,150,60,.7)) brightness(1); }
    100% { filter: blur(.9px) drop-shadow(0 0 12px rgba(255,170,70,.9)) brightness(1.12); }
  }
  .sky-ship.talking .rig-pilot {
    animation: pilotTalk 1.6s ease-in-out infinite;
    transform-origin: 50% 88%;
  }
  @keyframes pilotTalk {
    0%, 8%   { transform: translateY(0) rotate(0deg); }
    14%      { transform: translateY(2px) rotate(-1.5deg); }
    20%      { transform: translateY(-1px) rotate(.8deg); }
    26%      { transform: translateY(2px) rotate(-1deg); }
    34%, 100%{ transform: translateY(0) rotate(0deg); }
  }

  @media (prefers-reduced-motion: reduce) {
    .sky-ship { animation: none; }
    .jet.firing, .home-jet.firing { animation: none; }
  }

