/* ============================================================
   运行调度 · 左翼飞行计划面板（#fp-panel）
   —— 尺寸 / 位置 / 毛玻璃与综合态势左翼 #ac-panel 完全同源
      （复用 --ac-left / --ac-top / --ac-bottom / --ac-w 令牌）
   —— 仅在 body.as-dispatch-scene 下显示，返回综合态势自动退场
   —— 卡片语言沿用航空器列表（左缘色脊 / 毛玻璃色块 / 胶囊按钮），
      色脊与状态胶囊随「飞行状态」语义着色
   ============================================================ */

/* —— 面板主体 —— */
#fp-panel {
  position: absolute; left: var(--ac-left); top: var(--ac-top); bottom: var(--ac-bottom);
  width: var(--ac-w); z-index: 10;
  display: flex; flex-direction: column; overflow: hidden;
  background:
    radial-gradient(34% 20% at 100% 0%, rgba(184, 158, 255, 0.26) 0%, rgba(148, 118, 238, 0.05) 44%, rgba(148, 118, 238, 0) 72%),
    rgba(13, 18, 26, 0.62);
  -webkit-backdrop-filter: blur(10px) saturate(132%); backdrop-filter: blur(10px) saturate(132%);
  border: 1px solid rgba(255, 255, 255, 0.11);
  border-radius: 12px;
  box-shadow: var(--shadow-float), inset 0 1px 0 rgba(255, 255, 255, 0.05);
  opacity: 0; pointer-events: none; transform: translateX(-16px);
  transition: opacity 260ms ease, transform 320ms cubic-bezier(0.32, 0.72, 0, 1), background-color 320ms ease;
}
@media (min-width: 2048px) { #fp-panel { border-radius: 14px; } }
#fp-panel::before {
  content: ""; position: absolute; left: 12px; right: 12px; top: 0; height: 1px; pointer-events: none;
  background: linear-gradient(90deg, transparent 0%, rgba(150, 200, 245, 0.38) 50%, transparent 100%);
}
/* 右上角极光紫光晕：与综合态势左翼同源打法，一层落在面板底、一层浮于内容之上，
   冷紫与深蓝玻璃形成极光式补光；光源中心在面板外右上角（不出现光斑实心点） */
#fp-panel::after {
  content: ""; position: absolute; right: -34px; top: -44px; width: 200px; height: 140px;
  pointer-events: none; z-index: 1;
  background: radial-gradient(closest-side, rgba(206, 188, 255, 0.22) 0%, rgba(160, 130, 245, 0.05) 46%, rgba(160, 130, 245, 0) 100%);
}
/* 场景门控：仅运行调度可见；进场时略迟于柔幕揭幕淡入 */
/* 进场延迟只作用于显隐与位移，背景色（滚动激活）零延迟即时响应 */
body.as-dispatch-scene #fp-panel { opacity: 1; pointer-events: auto; transform: none; transition-delay: 240ms, 240ms, 0ms; }
/* 用户收起：面板向左滑出，把手贴屏缘待命 */
body.as-dispatch-scene #fp-panel.collapsed { opacity: 0; pointer-events: none; transform: translateX(-46px); transition-delay: 0ms; }
/* 滚动激活：列表滚动期间底色加深，弱化底层地图透出，提升读数清晰度（对齐综合态势选中态口径） */
#fp-panel.is-active { background-color: rgba(13, 18, 26, 0.80); }

/* —— 收起 / 展开把手（与 .ac-toggle 同款，独立类避免被场景门控误伤） —— */
.fp-toggle {
  position: absolute; left: calc(var(--ac-left) + var(--ac-w));
  top: calc(var(--ac-center) - var(--ac-th) / 2);
  height: var(--ac-th); width: var(--ac-tw); z-index: 11;
  display: grid; place-items: center; cursor: pointer;
  background: rgba(15, 20, 28, 0.9);
  border: 1px solid rgba(255, 255, 255, 0.12); border-left: none;
  border-radius: 0 8px 8px 0;
  color: rgba(205, 224, 240, 0.72);
  opacity: 0; pointer-events: none;
  transition: color 180ms ease, background 180ms ease, border-color 180ms ease,
              left 340ms cubic-bezier(0.32, 0.72, 0, 1), opacity 260ms ease;
}
.fp-toggle:hover { color: #EAF3FB; border-color: rgba(150, 200, 245, 0.4); }
.fp-toggle svg { width: 13px; height: 13px; }
.fp-toggle #fp-ic-expand { display: none; }
body.as-dispatch-scene .fp-toggle { opacity: 1; pointer-events: auto; transition-delay: 240ms; }
body.as-dispatch-scene #fp-panel.collapsed ~ .fp-toggle { left: var(--ac-edge); transition-delay: 0ms; }
#fp-panel.collapsed ~ .fp-toggle #fp-ic-collapse { display: none; }
#fp-panel.collapsed ~ .fp-toggle #fp-ic-expand { display: block; }

/* —— 主体：标题 + 计划列表（弹性滚动） —— */
#fp-panel .fp-body {
  flex: 1; min-height: 0; display: flex; flex-direction: column; gap: 10px;
  padding: 12px 12px 14px;
}
@media (min-width: 2048px) { #fp-panel .fp-body { gap: 12px; padding: 14px 14px 16px; } }

.fp-head { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.fp-bar {
  width: 3px; height: 13px; border-radius: 2px; flex-shrink: 0;
  background: linear-gradient(180deg, #C4DCF6 0%, #6FA3D0 100%);
  box-shadow: 0 0 8px rgba(111, 163, 208, 0.7);
}
.fp-title {
  font-size: 13px; font-weight: 700; letter-spacing: 2.5px;
  background: linear-gradient(180deg, #FFFFFF 0%, #EAF4FF 34%, #BED9F0 70%, #8FB8DE 100%);
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: #FFFFFF;
  filter: drop-shadow(0 0 8px rgba(130, 185, 230, 0.42));
  white-space: nowrap;
}
@media (min-width: 2048px) { .fp-title { font-size: 15px; } }
.fp-hair {
  flex: 1; height: 1px; min-width: 12px;
  background: linear-gradient(90deg, rgba(150, 200, 245, 0.30) 0%, rgba(150, 200, 245, 0.03) 100%);
}
/* —— 状态统计：四态计数卡（与综合态势 #ds-panel 状态卡同源语言） ——
   LED 雷达环 + 状态名 / 状态色渐变大数字 / 发光基线 / 状态色底部晕染 */
.fp-statwrap { flex-shrink: 0; }
.fp-stats { position: relative; overflow: hidden; border-radius: 10px; display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
/* 统计维度扫光：一道极淡的斜向冷光周期性掠过四态卡（与综合态势宏观卡同款口径，
   只掠过、不改动卡片本身的位置与配色） */
.fp-stats::after {
  content: ""; position: absolute; left: 0; top: -1px; bottom: -1px; width: 52%;
  pointer-events: none; z-index: 2;
  background: linear-gradient(100deg, rgba(214, 238, 255, 0) 0%, rgba(214, 238, 255, 0.07) 34%, rgba(240, 250, 255, 0.22) 50%, rgba(214, 238, 255, 0.07) 66%, rgba(214, 238, 255, 0) 100%);
  transform: translateX(-130%);
}
/* 进入运行调度后由脚本挂 .is-armed 重启扫光，保证与数字滚动的节奏同源 */
.fp-stats.is-armed::after { animation: fp-stat-sweep 8.4s cubic-bezier(0.3, 0.9, 0.2, 1) 2.4s infinite; }
@keyframes fp-stat-sweep {
  0%   { transform: translateX(-130%); }
  18%  { transform: translateX(300%); }
  100% { transform: translateX(300%); }
}
@media (prefers-reduced-motion: reduce) { .fp-stats::after { animation: none; opacity: 0; } }
.fp-stat {
  --fp-st: #B0784E; --fp-st-hi: #E4BC88; --fp-st-glow: rgba(228, 188, 136, 0.34);
  position: relative; overflow: hidden;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px;
  padding: 7px 4px 8px; border-radius: 9px;
  background:
    radial-gradient(120% 130% at 50% -22%, color-mix(in srgb, var(--fp-st) 17%, transparent) 0%, rgba(255, 255, 255, 0) 62%),
    linear-gradient(180deg, rgba(255, 255, 255, 0.055) 0%, rgba(255, 255, 255, 0.012) 100%);
  border: 1px solid rgba(255, 255, 255, 0.07);
  box-shadow: inset 2px 0 0 0 var(--fp-st), inset 0 0 16px rgba(0, 0, 0, 0.16);
}
.fp-stat[data-st="wait"] { --fp-st: #B0784E; --fp-st-hi: #E4BC88; --fp-st-glow: rgba(228, 188, 136, 0.34); }
.fp-stat[data-st="run"]  { --fp-st: #4E9C76; --fp-st-hi: #86DDB0; --fp-st-glow: rgba(134, 221, 176, 0.34); }
.fp-stat[data-st="done"] { --fp-st: #3F7CB0; --fp-st-hi: #93C9F0; --fp-st-glow: rgba(147, 201, 240, 0.32); }
.fp-stat[data-st="stop"] { --fp-st: #5E7C96; --fp-st-hi: #AFC8DB; --fp-st-glow: rgba(175, 200, 219, 0.28); }
.fp-stat-main { display: flex; align-items: center; gap: 5px; min-width: 0; }
/* 状态标识：雷达环 + 中心亮点（与 .ds-led 同款） */
.fp-led {
  width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; position: relative;
  border: 1.4px solid var(--fp-st);
  box-shadow: 0 0 6px var(--fp-st-glow);
}
.fp-led::after {
  content: ""; position: absolute; left: 50%; top: 50%;
  width: 3px; height: 3px; border-radius: 50%;
  background: var(--fp-st-hi); box-shadow: 0 0 4px var(--fp-st-hi);
  transform: translate(-50%, -50%);
}
.fp-stat-main > span {
  font-size: 11px; letter-spacing: 0.7px; line-height: 1.45;
  color: rgba(208, 226, 242, 0.78); white-space: nowrap;
}
.fp-stat-num { display: flex; align-items: baseline; }
.fp-stat-num > b {
  font-family: var(--font-mono); font-size: 24px; font-weight: 700; line-height: 1.05;
  letter-spacing: 0.2px; font-variant-numeric: tabular-nums;
  background: linear-gradient(180deg, var(--fp-st-hi) 0%, var(--fp-st) 100%);
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: var(--fp-st-hi);
  filter: drop-shadow(0 0 10px var(--fp-st-glow));
}
.fp-stat-line {
  display: block; width: 32px; height: 2px; border-radius: 1px; margin-top: 1px;
  background: linear-gradient(90deg, transparent 0%, var(--fp-st-hi) 50%, transparent 100%);
  box-shadow: 0 0 8px var(--fp-st-glow);
}
.fp-stat[data-st="run"] .fp-led { animation: fp-led-breathe 1.9s ease-in-out infinite; }
@keyframes fp-led-breathe {
  0%, 100% { box-shadow: 0 0 4px var(--fp-st-glow); }
  50%      { box-shadow: 0 0 10px var(--fp-st-glow); }
}
@media (prefers-reduced-motion: reduce) { .fp-stat[data-st="run"] .fp-led { animation: none; } }
@media (min-width: 2048px) {
  .fp-stats { gap: 7px; }
  .fp-stat { padding: 9px 5px 10px; border-radius: 10px; }
  .fp-led { width: 11px; height: 11px; }
  .fp-led::after { width: 4px; height: 4px; }
  .fp-stat-main > span { font-size: 12px; }
  .fp-stat-num > b { font-size: 28px; }
  .fp-stat-line { width: 38px; }
}

/* 滚动区向右延伸到面板内缘：色块与上方四态统计同宽，
   右侧内边距通道内居中放自绘滚动指示 */
.fp-scroller { position: relative; flex: 1; min-height: 0; display: flex; margin-right: -12px; }
.fp-list {
  flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden;
  display: flex; flex-direction: column; gap: 10px;
  padding: 2px 12px 4px 0;   /* 右侧 12px = 滚动指示通道，色块右缘与统计卡对齐 */
  scrollbar-width: none; -ms-overflow-style: none;   /* 隐藏原生滚动条，改用自绘指示 */
}
.fp-list::-webkit-scrollbar { width: 0; height: 0; display: none; }
/* 自绘滚动指示：在 12px 通道内水平居中 */
.fp-scroll {
  position: absolute; right: 4px; top: 2px; bottom: 4px; width: 3px;
  opacity: 0; pointer-events: none;
  transition: opacity 240ms ease;
}
@media (min-width: 2048px) {
  .fp-scroller { margin-right: -14px; }
  .fp-list { gap: 11px; padding-right: 14px; }
  .fp-scroll { right: 5px; width: 4px; }
}
.fp-scroll i {
  display: block; height: 0; border-radius: 999px;
  background: linear-gradient(180deg, rgba(118, 156, 194, 0.50) 0%, rgba(70, 104, 140, 0.24) 100%);
  box-shadow: 0 0 5px rgba(78, 118, 158, 0.26);
}
.fp-scroller.is-scrolling .fp-scroll { opacity: 1; }

/* —— 计划色块 —— */
.fp-card {
  --fp-st: #E0A968;
  position: relative; flex-shrink: 0; cursor: pointer;
  padding: 11px 13px 10px 15px; border-radius: 10px;
  background: linear-gradient(180deg, rgba(60, 110, 160, 0.055) 0%, rgba(30, 60, 90, 0.015) 100%);
  border: 1px solid rgba(150, 200, 245, 0.10);
  box-shadow: inset 0 0 16px rgba(0, 0, 0, 0.12);
  transition: background 170ms ease, border-color 170ms ease, box-shadow 190ms ease,
              opacity 220ms ease, filter 220ms ease;
}
.fp-card::before {
  content: ""; position: absolute; left: 0; top: 11px; bottom: 11px; width: 2px; border-radius: 0 2px 2px 0;
  background: linear-gradient(180deg, color-mix(in srgb, var(--fp-st) 66%, transparent) 0%, color-mix(in srgb, var(--fp-st) 6%, transparent) 100%);
  box-shadow: 0 0 6px color-mix(in srgb, var(--fp-st) 22%, transparent);
}
.fp-card:hover {
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.075) 0%, rgba(255, 255, 255, 0.02) 100%);
  border-color: rgba(150, 200, 245, 0.30);
}
.fp-card:focus-visible { outline: 1px solid rgba(224, 169, 104, 0.62); outline-offset: 2px; }

/* 历史计划（已完成 / 已终止）：默认降透明 + 降饱和，与「当前时段」拉开层级，
   口径对齐空域高度筛选里「不在范围内」的数据；hover / 选中时回到实色 */
.fp-card[data-st="done"], .fp-card[data-st="stop"] {
  opacity: 0.5; filter: saturate(0.62) brightness(0.94);
}
.fp-card[data-st="done"]:hover, .fp-card[data-st="stop"]:hover {
  opacity: 0.84; filter: saturate(0.86);
}

/* 选中态：与底部时间轴联动的高亮（琥珀描边 + 左缘色脊点亮，不改变卡片尺寸） */
.fp-card.sel {
  background: linear-gradient(180deg, rgba(228, 178, 116, 0.13) 0%, rgba(228, 178, 116, 0.025) 100%);
  border-color: rgba(228, 178, 116, 0.52);
  box-shadow: inset 0 0 0 1px rgba(228, 178, 116, 0.16), 0 0 22px -8px rgba(228, 178, 116, 0.55);
  opacity: 1; filter: none;
}
.fp-card.sel:hover {
  background: linear-gradient(180deg, rgba(228, 178, 116, 0.18) 0%, rgba(228, 178, 116, 0.05) 100%);
  border-color: rgba(228, 178, 116, 0.68);
}
.fp-card.sel::before {
  background: linear-gradient(180deg, rgba(245, 201, 123, 0.98) 0%, rgba(228, 178, 116, 0.24) 100%);
  box-shadow: 0 0 9px rgba(245, 201, 123, 0.62);
}

/* 状态语义色：待起飞（琥珀）/ 飞行中（青绿）/ 已完成（天蓝）/ 已终止（钢蓝） */
.fp-card[data-st="wait"], #fp-modal[data-st="wait"] { --fp-st: #E0A968; }
.fp-card[data-st="run"],  #fp-modal[data-st="run"]  { --fp-st: #5FDCA8; }
.fp-card[data-st="done"], #fp-modal[data-st="done"] { --fp-st: #5FA9E8; }
.fp-card[data-st="stop"], #fp-modal[data-st="stop"] { --fp-st: #8FB0CC; }

/* —— 告警联动标记：紧急（医疗救援）/ 已调整（系统自动改期） ——
   与右侧状态胶囊（.fp-st）同高同字号：2px 纵向内边距 + 1.5 行高，
   横向内边距略宽于状态胶囊，避免文字贴边发挤 */
.fp-tag {
  flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center;
  padding: 2px 10px; border-radius: 999px; white-space: nowrap;
  font-size: var(--fs-l3); letter-spacing: 0.7px; line-height: 1.5;
}
.fp-tag.urgent {
  color: #FFDCD6;
  background: rgba(226, 89, 63, 0.18);
  border: 1px solid rgba(255, 90, 78, 0.55);
  box-shadow: 0 0 10px rgba(255, 90, 78, 0.26), inset 0 0 8px rgba(255, 90, 78, 0.15);
}
.fp-tag.adj {
  color: #F6D9AC;
  background: rgba(224, 169, 104, 0.16);
  border: 1px solid rgba(224, 169, 104, 0.5);
}
/* 紧急 / 已调整卡片：即使落在历史区也保持实色，红色 / 琥珀语义不被透明度稀释 */
.fp-card.urgent, .fp-card.adjusted { opacity: 1; filter: none; }
.fp-card.urgent {
  background: linear-gradient(180deg, rgba(226, 89, 63, 0.14) 0%, rgba(226, 89, 63, 0.02) 100%);
  border-color: rgba(255, 90, 78, 0.38);
}
.fp-card.urgent:hover {
  background: linear-gradient(180deg, rgba(226, 89, 63, 0.2) 0%, rgba(226, 89, 63, 0.05) 100%);
  border-color: rgba(255, 90, 78, 0.6);
}
/* 左缘色脊单独转红：状态胶囊仍按四态语义着色，紧急程度由色脊 + 标签表达 */
.fp-card.urgent::before {
  background: linear-gradient(180deg, rgba(255, 90, 78, 0.98) 0%, rgba(255, 90, 78, 0.22) 100%);
  box-shadow: 0 0 9px rgba(255, 90, 78, 0.6);
}
.fp-card.adjusted { border-color: rgba(224, 169, 104, 0.36); }
/* 计划改期 / 注入后的列表聚焦：琥珀描边辉光闪两拍（不改变布局） */
@keyframes fp-card-flash {
  0%   { border-color: rgba(255, 214, 150, 0.92); box-shadow: 0 0 0 0 rgba(255, 199, 120, 0), inset 0 0 16px rgba(0, 0, 0, 0.12); }
  18%  { border-color: rgba(255, 214, 150, 0.92); box-shadow: 0 0 26px -2px rgba(255, 199, 120, 0.58), inset 0 0 22px rgba(255, 199, 120, 0.18); }
  100% { border-color: rgba(224, 169, 104, 0.34); box-shadow: 0 0 0 0 rgba(255, 199, 120, 0), inset 0 0 16px rgba(0, 0, 0, 0.12); }
}
.fp-card.is-flash { animation: fp-card-flash 1.3s cubic-bezier(0.32, 0.72, 0.24, 1) 2; }
@media (prefers-reduced-motion: reduce) { .fp-card.is-flash { animation: none; } }

/* 头行：计划名称（最多两行）+ 状态胶囊 */
.fp-c-top {
  display: flex; align-items: flex-start; gap: 10px;
  padding-bottom: 8px; margin-bottom: 8px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.07);
}
.fp-c-name {
  flex: 1; min-width: 0; margin: 0;
  font-size: 13.5px; font-weight: 600; line-height: 1.45; letter-spacing: 0.3px;
}
.fp-c-text {
  min-width: 0;
  background: linear-gradient(180deg, #F1F8FE 0%, #CFE4F5 52%, #A6C6E2 100%);
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: #D5E4F0;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.fp-card.sel .fp-c-text {
  background: linear-gradient(180deg, #FFF7EB 0%, #EFCFA2 100%);
  -webkit-background-clip: text; background-clip: text;
}
@media (min-width: 2048px) {
  .fp-c-name { font-size: 15px; }
}

.fp-st {
  flex-shrink: 0; display: inline-flex; align-items: center; gap: 5px;
  padding: 2px 9px; border-radius: 999px; white-space: nowrap;
  font-size: var(--fs-l3); letter-spacing: 0.7px; line-height: 1.5;
  color: var(--fp-st);
  background: color-mix(in srgb, var(--fp-st) 13%, transparent);
  border: 1px solid color-mix(in srgb, var(--fp-st) 42%, transparent);
}
.fp-st i {
  width: 5px; height: 5px; border-radius: 50%; flex-shrink: 0;
  background: currentColor; box-shadow: 0 0 6px currentColor;
}
@keyframes fp-st-breathe {
  0%, 100% { opacity: 0.55; box-shadow: 0 0 4px currentColor; }
  50%      { opacity: 1;    box-shadow: 0 0 9px currentColor; }
}
.fp-card[data-st="run"] .fp-st i,
#fp-modal[data-st="run"] .fp-st i { animation: fp-st-breathe 1.7s ease-in-out infinite; }

/* 详情入口：装饰性箭头（无文字），落在票根上半段（起降时间段）右侧并与其中线对齐 */
.fp-go {
  position: absolute; right: -5px; top: 50%; z-index: 2;
  width: 24px; height: 24px; padding: 0; transform: translateY(-50%);
  display: grid; place-items: center; cursor: pointer;
  font-family: inherit; color: rgba(196, 222, 244, 0.62);
  background: rgba(255, 255, 255, 0.045);
  border: 1px solid rgba(255, 255, 255, 0.10); border-radius: 50%;
  transition: color 180ms ease, background 180ms ease, border-color 180ms ease, box-shadow 180ms ease;
}
.fp-go svg { width: 12px; height: 12px; transition: transform 220ms cubic-bezier(0.16, 1, 0.3, 1); }
.fp-go:hover {
  color: #F2D6A6; background: rgba(228, 178, 116, 0.14);
  border-color: rgba(228, 178, 116, 0.55); box-shadow: 0 0 12px -3px rgba(228, 178, 116, 0.55);
}
.fp-go:hover svg { transform: translateX(2px); }
.fp-go:focus-visible { outline: 1px solid rgba(224, 169, 104, 0.62); outline-offset: 2px; }
@media (min-width: 2048px) {
  .fp-go { right: -4px; width: 26px; height: 26px; }
  .fp-go svg { width: 13px; height: 13px; }
}

/* 字段网格：任务性质 | 申请方 / 航空器 | 类型（右列偏宽，给申请方留出读数空间） */
.fp-grid { display: grid; grid-template-columns: 0.9fr 1.1fr; gap: 6px 14px; }
.fp-f { display: flex; align-items: baseline; gap: 7px; min-width: 0; font-size: var(--fs-l3); line-height: 1.5; }
.fp-f > span { flex-shrink: 0; width: 4.3em; white-space: nowrap; color: var(--text-3); letter-spacing: 0.5px; }
.fp-f > b {
  min-width: 0; font-size: 13px; font-weight: 400; color: #BED3E4;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
@media (min-width: 2048px) { .fp-f > b { font-size: 15px; } }
.fp-f > b.fp-mono { font-family: var(--font-mono); letter-spacing: 0.6px; color: #B4D3E6; }
/* 多机那一格：编号在格内竖向换页，右端钉一枚「N 架」。
   格的尺寸、行高、基线一概不动——动的只是这一格里「现在显示哪个编号」。
   右端那枚计数是唯一静止的东西：一眼看得出的规模，不用等它转完 */
.fp-f > b.fp-airb {
  display: flex; align-items: center; gap: 6px;
  letter-spacing: 0.2px;         /* 12 位编号要压进这一格 */
  overflow: visible; text-overflow: clip;
}
.fp-air-vp {
  display: block; flex: 1 1 auto; min-width: 0;
  height: 1.5em; overflow: hidden;
  /* 上下各留 3px 淡出：换页途中相邻编号会露一条边，
     直接硬切会像「字被裁了」；这 3px 落在半行距里，不碰字形 */
  -webkit-mask-image: linear-gradient(180deg, transparent 0, #000 3px, #000 calc(100% - 3px), transparent 100%);
  mask-image: linear-gradient(180deg, transparent 0, #000 3px, #000 calc(100% - 3px), transparent 100%);
}
.fp-air-trk {
  display: block;
  /* 260ms：换页要看得见过程，又不能让「两行编号叠在一起」停留太久 */
  transition: transform 260ms cubic-bezier(0.4, 0, 0.2, 1);
  will-change: transform;
}
.fp-air-trk > i {
  display: block; height: 1.5em; line-height: 1.5em;
  font-style: normal; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis;
}
.fp-f > b > .fp-n {
  flex-shrink: 0; font-style: normal;
  font-family: var(--font-sans); font-size: 11px; font-weight: 400;
  letter-spacing: 0.2px; color: rgba(198, 222, 242, 0.78);
}
@media (min-width: 2048px) {
  .fp-f > b > .fp-n { font-size: 12px; }
}

/* 多机换页：减弱动效时停在第一架（计数仍在，规模照样看得见） */
@media (prefers-reduced-motion: reduce) { .fp-air-trk { transition: none; } }

/* —— 起降票根：电子登机牌式起降区块 ——
   上：计划起飞 / 中轴（航线距离 · 航空器徽标 · 飞行时长）/ 计划降落
   中：虚线撕票线 + 两端半圆缺口
   下：起飞点·场 / 降落停机位；右上角浮一枚详情箭头（对齐起降时间段中线） */
.fp-ticket {
  position: relative; margin-top: 10px; border-radius: 9px; overflow: hidden;
  padding: 10px 11px 0;
  background:
    radial-gradient(110% 130% at 50% -18%, rgba(120, 172, 226, 0.07) 0%, rgba(255, 255, 255, 0) 62%),
    linear-gradient(180deg, rgba(255, 255, 255, 0.040) 0%, rgba(255, 255, 255, 0.014) 100%);
  border: 1px solid rgba(150, 200, 245, 0.10);
  box-shadow: inset 0 0 14px rgba(0, 0, 0, 0.11);
}
.fp-ticket::before {
  content: ""; position: absolute; left: 10px; right: 10px; top: 0; height: 1px; pointer-events: none;
  background: linear-gradient(90deg, transparent 0%, rgba(150, 200, 245, 0.18) 50%, transparent 100%);
}
.fp-tk-time { position: relative; display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 10px; padding: 0 26px; }
@media (min-width: 2048px) { .fp-tk-time { padding: 0 28px; } }
.fp-tk-col {
  display: flex; flex-direction: column; align-items: center; gap: 1px;
  min-width: 0; text-align: center;
}
.fp-tk-k { font-size: var(--fs-l3); letter-spacing: 0.6px; color: var(--text-3); }
.fp-tk-v {
  font-family: var(--font-mono); font-size: 16px; font-weight: 600; line-height: 1.25;
  letter-spacing: 0.5px; color: #DFEEF9;
}
@media (min-width: 2048px) { .fp-tk-v { font-size: 18px; } }
.fp-tk-d { font-style: normal; font-size: var(--fs-l3); letter-spacing: 0.5px; color: var(--text-3); }

/* 中轴航段：航线距离（上）/ 航空器徽标 / 飞行时长（下），均无字段名 */
.fp-tk-route {
  display: flex; flex-direction: column; align-items: center; gap: 2px;
  flex-shrink: 0; color: rgba(150, 200, 245, 0.5);
}
.fp-tk-dashrow { display: flex; align-items: center; gap: 7px; }
/* 航段光带：左右各一条渐变实线，靠无人机一端最亮、向外渐隐，
   取代断续虚线，形成一整条可读的「空中走廊」 */
.fp-tk-dashrow > i {
  width: 58px; height: 1px; border-radius: 1px;
  background: linear-gradient(90deg,
    rgba(150, 200, 245, 0) 0%,
    rgba(150, 200, 245, 0.16) 22%,
    rgba(160, 210, 250, 0.52) 72%,
    rgba(206, 235, 255, 0.92) 100%);
  box-shadow: 0 0 7px rgba(120, 185, 240, 0.26);
}
.fp-tk-dashrow > i:last-child {
  background: linear-gradient(90deg,
    rgba(206, 235, 255, 0.92) 0%,
    rgba(160, 210, 250, 0.52) 28%,
    rgba(150, 200, 245, 0.16) 78%,
    rgba(150, 200, 245, 0) 100%);
}
/* 距离 / 时长读数：同字号双行仪表，外衬极淡玻璃胶囊，靠明度与字重区分主次 */
.fp-tk-meta {
  display: inline-flex; align-items: baseline; gap: 4px;
  padding: 1px 8px 2px; border-radius: 999px;
  font-family: var(--font-mono); font-style: normal; white-space: nowrap;
  font-variant-numeric: tabular-nums;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.065) 0%, rgba(255, 255, 255, 0.018) 100%);
  border: 1px solid rgba(150, 200, 245, 0.13);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.07);
}
.fp-tk-meta > b {
  font-size: 14px; font-weight: 700; line-height: 1.15; letter-spacing: 0.2px;
  background: linear-gradient(180deg, #F6FCFF 0%, #D3EAFB 48%, #93BDDD 100%);
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: #D8ECFC;
  filter: drop-shadow(0 0 8px rgba(120, 185, 240, 0.46));
}
.fp-tk-meta > span {
  font-size: 9px; font-weight: 500; letter-spacing: 1.2px; text-transform: uppercase;
  color: rgba(166, 202, 234, 0.60);
}
.fp-tk-dist { border-color: rgba(150, 200, 245, 0.21); }
.fp-tk-dur {
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.042) 0%, rgba(255, 255, 255, 0.012) 100%);
  border-color: rgba(150, 200, 245, 0.10);
}
.fp-tk-dur > b {
  font-size: 14px; font-weight: 600; letter-spacing: 0.3px;
  background: linear-gradient(180deg, #EAF6FE 0%, #BBD8EE 55%, #82A9C8 100%);
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: #C6DCEE;
  filter: drop-shadow(0 0 7px rgba(120, 185, 240, 0.30));
}
.fp-tk-dur > span { color: rgba(148, 184, 216, 0.54); letter-spacing: 1.1px; }
@media (min-width: 2048px) {
  .fp-tk-dashrow > i { width: 70px; }
  .fp-tk-meta { padding: 1px 9px 2px; }
  .fp-tk-meta > b { font-size: 16px; }
  .fp-tk-meta > span { font-size: 10px; }
  .fp-tk-dur > b { font-size: 16px; }
}

/* 航空器徽标：圆形玻璃底 + 静态微光，安静地嵌在票根中轴，不做呼吸/位移 */
.fp-tk-drone {
  width: 26px; height: 26px; border-radius: 50%; flex-shrink: 0;
  display: grid; place-items: center; color: rgba(214, 234, 250, 0.92);
  background: radial-gradient(circle at 50% 34%, rgba(150, 205, 255, 0.16) 0%, rgba(90, 150, 210, 0.05) 72%);
  border: 1px solid rgba(160, 210, 250, 0.22);
  box-shadow: 0 0 8px -4px rgba(120, 185, 240, 0.42), inset 0 1px 0 rgba(255, 255, 255, 0.12);
}
.fp-tk-drone svg { width: 15px; height: 15px; }
@media (min-width: 2048px) {
  .fp-tk-drone { width: 30px; height: 30px; }
  .fp-tk-drone svg { width: 17px; height: 17px; }
}

/* 撕票线：半透虚线 + 两端半圆缺口（票根质感） */
.fp-tk-perf {
  position: relative; height: 1px; margin: 9px -11px 0;
  background: repeating-linear-gradient(90deg, rgba(150, 200, 245, 0.20) 0 4px, transparent 4px 8px);
}
.fp-tk-perf::before, .fp-tk-perf::after {
  content: ""; position: absolute; top: -5px; width: 10px; height: 10px; border-radius: 50%;
  background: rgba(11, 15, 21, 0.62);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.05);
}
.fp-tk-perf::before { left: -5px; }
.fp-tk-perf::after { right: -5px; }

/* 起降地点：起飞点·场（爬升箭头·冷青）/ 降落停机位（下降箭头·暖琥珀）
   箭头外加同色玻璃方章，拉开体量与风格，避免小图标裸挂 */
.fp-tk-feet { display: flex; align-items: center; gap: 8px; padding: 7px 0 9px; }
.fp-loc {
  display: flex; align-items: center; gap: 7px; min-width: 0; flex: 1;
  font-size: var(--fs-l3); letter-spacing: 0.4px; color: rgba(202, 222, 238, 0.76);
}
.fp-loc.arr { justify-content: flex-end; text-align: right; }
.fp-loc-ic {
  width: 24px; height: 24px; flex-shrink: 0; border-radius: 7px;
  display: grid; place-items: center;
  background: rgba(120, 190, 240, 0.10);
  border: 1px solid rgba(120, 190, 240, 0.24);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.10), 0 0 10px -4px rgba(120, 190, 240, 0.56);
}
.fp-loc-ic svg { width: 15px; height: 15px; }
.fp-loc.dep .fp-loc-ic { color: #8FD0F5; }
.fp-loc.arr .fp-loc-ic {
  color: #E8B36F;
  background: rgba(228, 178, 116, 0.10);
  border-color: rgba(228, 178, 116, 0.24);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.10), 0 0 10px -4px rgba(228, 178, 116, 0.50);
}
.fp-loc b { min-width: 0; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
@media (min-width: 2048px) {
  .fp-loc { font-size: 13px; }
  .fp-loc-ic { width: 28px; height: 28px; border-radius: 8px; }
  .fp-loc-ic svg { width: 17px; height: 17px; }
}

/* —— 航线信息标签（点击航线 / 起飞牌箭头唤出）——
   视觉与综合态势机载信息标签 #drone-tip 同源：深色毛玻璃 + 白 16% 描边 +
   发光方点 + 唯一编号 + 状态胶囊 + 右上角关闭；位置由 JS 贴靠航线锚点 —— */
#fp-modal {
  position: absolute; left: 0; top: 0;
  width: 420px; max-width: calc(100vw - 56px);
  max-height: calc(100% - 24px);
  display: flex; z-index: 30; border-radius: 13px; overflow: hidden;
  background:
    radial-gradient(34% 20% at 100% 0%, rgba(184, 158, 255, 0.26) 0%, rgba(148, 118, 238, 0.05) 44%, rgba(148, 118, 238, 0) 72%),
    rgba(13, 18, 26, 0.30);
  -webkit-backdrop-filter: blur(10px) saturate(132%); backdrop-filter: blur(10px) saturate(132%);
  border: 1px solid rgba(255, 255, 255, 0.11);
  box-shadow:
    0 18px 44px -14px rgba(0, 0, 0, 0.72),
    0 0 0 1px rgba(0, 0, 0, 0.16),
    inset 0 1px 0 rgba(255, 255, 255, 0.10),
    inset 0 -1px 0 rgba(0, 0, 0, 0.20);
  opacity: 0; visibility: hidden; pointer-events: none;
  transition: opacity 200ms ease, visibility 0s linear 240ms;
}
/* 顶缘冷光：与左侧面板同源 */
#fp-modal::before {
  content: ""; position: absolute; left: 12px; right: 12px; top: 0; height: 1px;
  pointer-events: none; z-index: 3;
  background: linear-gradient(90deg, transparent 0%, rgba(150, 200, 245, 0.38) 50%, transparent 100%);
}
@media (min-width: 2048px) { #fp-modal { width: 468px; border-radius: 15px; } }
body.as-dispatch-scene #fp-modal.open {
  opacity: 1; visibility: visible; pointer-events: auto;
  transition: opacity 200ms ease, visibility 0s;
}
#fp-modal .fp-tip {
  position: relative; z-index: 2;
  flex: 1; min-height: 0; overflow: auto; scrollbar-width: none;
  padding: 14px 17px 15px;
  transform: translateY(5px) scale(0.992);
  transition: transform 300ms cubic-bezier(0.16, 1, 0.3, 1);
}
#fp-modal .fp-tip::-webkit-scrollbar { width: 0; height: 0; }
#fp-modal.open .fp-tip { transform: none; }

/* 头行：发光方点 + 唯一识别码 + 飞行状态胶囊 + 关闭 */
.fp-tip-hd {
  display: flex; align-items: center; gap: 8px;
  padding-bottom: 9px; border-bottom: 1px solid rgba(255, 255, 255, 0.09);
}
.fp-tip-dot {
  width: 8px; height: 8px; border-radius: 2px; flex-shrink: 0;
  background: var(--fp-st);
  box-shadow: 0 0 8px color-mix(in srgb, var(--fp-st) 75%, transparent);
}
.fp-tip-uid {
  font-family: var(--font-mono); font-size: 13px; font-weight: 700;
  letter-spacing: 1px; color: #EAF2F8;
}
.fp-tip-st {
  flex-shrink: 0; display: inline-flex; align-items: center; gap: 5px;
  padding: 1.5px 8px; border-radius: 999px;
  font-size: 11px; font-weight: 500; letter-spacing: 1px;
  color: var(--fp-st); background: rgba(255, 255, 255, 0.05);
  border: 1px solid rgba(255, 255, 255, 0.12);
}
.fp-tip-st i {
  width: 5px; height: 5px; border-radius: 50%; flex-shrink: 0;
  background: currentColor; box-shadow: 0 0 6px currentColor;
}
#fp-modal[data-st="run"] .fp-tip-st i { animation: fp-st-breathe 1.7s ease-in-out infinite; }
.fp-tip-x {
  margin-left: auto; width: 22px; height: 22px; flex-shrink: 0; padding: 0;
  display: grid; place-items: center; cursor: pointer;
  border-radius: 6px; font-family: inherit;
  color: rgba(205, 224, 240, 0.72); background: rgba(255, 255, 255, 0.06);
  border: 1px solid rgba(255, 255, 255, 0.12);
  transition: color 180ms ease, background 180ms ease, border-color 180ms ease;
}
.fp-tip-x:hover { color: #F2D6A6; background: rgba(228, 178, 116, 0.14); border-color: rgba(228, 178, 116, 0.55); }
.fp-tip-x svg { width: 11px; height: 11px; }

/* 计划名称 / 任务性质：与正文其余字段同字号，读数紧随标签左对齐，避免中间留白过大 */
.fp-tip-plan {
  margin-top: 2px; padding: 8px 0 9px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.07);
}
.fp-tip-plan .fp-tip-row { gap: 12px; }
.fp-tip-plan .fp-tip-row > b {
  margin-left: 0; flex: 1 1 auto; text-align: left;
}

/* 分组标题：竖条 + 标题 + 渐隐细线 +（时间组）日期 */
.fp-tip-sec {
  display: flex; align-items: center; gap: 7px; margin: 14px 0 3px;
  font-size: 12px; font-weight: 600; letter-spacing: 1.5px;
  color: rgba(154, 199, 235, 0.82);
}
.fp-tip-sec > i {
  width: 3px; height: 11px; border-radius: 2px; flex-shrink: 0;
  background: linear-gradient(180deg, #9BCBEC 0%, #5B8FB8 100%);
  box-shadow: 0 0 6px rgba(120, 180, 220, 0.55);
}
.fp-tip-sec > span { flex-shrink: 0; white-space: nowrap; }
.fp-tip-line {
  flex: 1; height: 1px; min-width: 8px;
  background: linear-gradient(90deg, rgba(150, 200, 245, 0.22) 0%, rgba(150, 200, 245, 0) 100%);
}
.fp-tip-sec .fp-tip-date {
  flex-shrink: 0; font-style: normal; font-weight: 400;
  padding: 1.5px 8px; border-radius: 999px;
  font-size: 12px; letter-spacing: 0.4px;
  color: rgba(192, 218, 240, 0.84);
  background: rgba(150, 200, 245, 0.08);
  border: 1px solid rgba(150, 200, 245, 0.18);
  font-variant-numeric: tabular-nums;
}

/* 键值行：全卡统一「标签左、读数右」，同一字号同一字重，不设局部修饰 */
.fp-tip-rows { display: flex; flex-direction: column; }
.fp-tip-row {
  display: flex; align-items: flex-start; gap: 14px;
  min-height: 26px; padding: 3px 0;
}
.fp-tip-row > span {
  flex-shrink: 0; padding-top: 1px;
  font-size: 12px; letter-spacing: 0.8px; line-height: 1.6; color: var(--text-3);
}
.fp-tip-row > b {
  margin-left: auto; min-width: 0; text-align: right;
  font-size: 13px; font-weight: 500; letter-spacing: 0.2px; line-height: 1.62;
  color: #DFEDF9; overflow-wrap: anywhere;
}
/* 无字段值：统一灰色占位，不参与正文高亮 */
.fp-tip-row > b.empty,
.fp-tt-row > b.empty {
  color: rgba(170, 192, 212, 0.40); font-weight: 400;
}

/* 起降时间：计划 / 请求 / 预计 / 实际 × 起飞 / 降落
   读数统一为与正文相同的字号与字色（仅保留等宽数字对齐） */
.fp-tip-tt { margin-top: 2px; }
.fp-tt-h,
.fp-tt-row {
  display: grid; grid-template-columns: 64px 1fr 1fr;
  align-items: center; gap: 8px;
}
.fp-tt-h { min-height: 28px; border-bottom: 1px solid rgba(255, 255, 255, 0.07); }
.fp-tt-h > span { font-size: 12px; letter-spacing: 0.8px; color: var(--text-3); }
.fp-tt-h > b {
  justify-self: center;
  display: inline-flex; align-items: center; gap: 5px;
  font-size: 12px; font-weight: 500; letter-spacing: 1px; line-height: 1.6;
  text-align: center; color: #8FD0F5;
}
.fp-tt-h > b::before {
  content: ""; width: 4px; height: 4px; border-radius: 50%; flex-shrink: 0;
  background: currentColor; box-shadow: 0 0 5px currentColor;
}
.fp-tt-h > b.arr { color: #E8B36F; }
.fp-tt-row { min-height: 28px; }
.fp-tt-row > span { font-size: 12px; letter-spacing: 0.6px; color: var(--text-3); white-space: nowrap; }
.fp-tt-row > b {
  font-size: 13px; font-weight: 500; letter-spacing: 0.3px;
  font-variant-numeric: tabular-nums; color: #DFEDF9; text-align: center;
}

/* 操作员：落在标签最底部，用细线与正文分隔 */
.fp-tip-op {
  margin-top: 12px; padding-top: 7px;
  border-top: 1px solid rgba(255, 255, 255, 0.09);
}

/* 2K：字号同步放大，行距与列宽等比放宽，避免高分辨率下过小 */
@media (min-width: 2048px) {
  #fp-modal .fp-tip { padding: 17px 20px 18px; }
  .fp-tip-uid { font-size: 15px; }
  .fp-tip-st { font-size: 12.5px; padding: 2px 9px; }
  .fp-tip-x { width: 24px; height: 24px; }
  .fp-tip-x svg { width: 12px; height: 12px; }
  .fp-tip-row { min-height: 30px; padding: 5px 0; }
  .fp-tip-row > span { font-size: 13px; }
  .fp-tip-row > b { font-size: 15px; }
  .fp-tip-sec { font-size: 13px; margin: 17px 0 4px; }
  .fp-tip-sec .fp-tip-date { font-size: 12.5px; padding: 2px 9px; }
  .fp-tt-h, .fp-tt-row { grid-template-columns: 72px 1fr 1fr; }
  .fp-tt-h { min-height: 31px; }
  .fp-tt-h > span, .fp-tt-h > b { font-size: 13px; }
  .fp-tt-row { min-height: 31px; }
  .fp-tt-row > span { font-size: 13px; }
  .fp-tt-row > b { font-size: 15px; }
}

/* ============================================================
   申报飞行活动详情（#fp-detail）· 单列档案版式
   —— 纯纵向堆叠，模块不并排
   —— 毛玻璃沿用平台面板配方：半透深底 + blur + 白 11% 描边
   —— 模块边界靠描边卡 / 发丝线 / 留白建立，不使用彩色色带
   ============================================================ */
#fp-detail {
  --fx-st: #E0A968; --fx-st-hi: #F0C892;
  position: absolute; z-index: 32;
  display: flex; flex-direction: column; overflow: hidden;
  background:
    radial-gradient(76% 50% at 100% 0%, rgba(132, 178, 224, 0.10) 0%, rgba(120, 165, 210, 0) 64%),
    rgba(13, 18, 26, 0.40);
  -webkit-backdrop-filter: blur(14px) saturate(132%); backdrop-filter: blur(14px) saturate(132%);
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 12px;
  box-shadow: var(--shadow-float), inset 0 1px 0 rgba(255, 255, 255, 0.05);
  opacity: 0; visibility: hidden; pointer-events: none;
  transform: translateY(10px) scale(0.99); transform-origin: 50% 42%;
  transition: opacity 220ms ease, transform 300ms cubic-bezier(0.32, 0.72, 0, 1), visibility 0s linear 260ms;
}
#fp-detail.open {
  opacity: 1; visibility: visible; pointer-events: auto; transform: none;
  transition: opacity 220ms ease, transform 300ms cubic-bezier(0.32, 0.72, 0, 1), visibility 0s linear 0s;
}
#fp-detail[data-st="run"]  { --fx-st: #5FDCA8; --fx-st-hi: #8CEBC0; }
#fp-detail[data-st="done"] { --fx-st: #5FA9E8; --fx-st-hi: #93CBF3; }
#fp-detail[data-st="stop"] { --fx-st: #8FB0CC; --fx-st-hi: #B9CCDC; }
#fp-detail::before {
  content: ""; position: absolute; left: 14px; right: 14px; top: 0; height: 1px; pointer-events: none; z-index: 3;
  background: linear-gradient(90deg, transparent 0%, rgba(150, 200, 245, 0.40) 50%, transparent 100%);
}

/* —— 标题栏 —— */
.fx-head {
  flex-shrink: 0;
  display: flex; align-items: center; gap: 10px;
  padding: 14px 18px 12px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}
.fx-bar {
  width: 3px; height: 26px; border-radius: 2px; flex-shrink: 0;
  background: linear-gradient(180deg, #C4DCF6 0%, #6FA3D0 100%);
  box-shadow: 0 0 8px rgba(111, 163, 208, 0.45);
}
.fx-tt { min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.fx-title {
  margin: 0; font-size: 15px; font-weight: 700; letter-spacing: 1.6px; line-height: 1.2;
  color: #EDF5FD; white-space: nowrap;
}
.fx-sub {
  min-width: 0; font-size: 11px; letter-spacing: 0.4px; line-height: 1.4;
  color: rgba(180, 205, 228, 0.55);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.fx-acts { margin-left: auto; display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
.fx-btn {
  height: 28px; padding: 0 11px; display: inline-flex; align-items: center; gap: 6px;
  border-radius: 7px; cursor: pointer; white-space: nowrap;
  font-size: 11.5px; font-weight: 500; letter-spacing: 0.6px; color: #CFE1F2;
  background: rgba(255, 255, 255, 0.045);
  border: 1px solid rgba(255, 255, 255, 0.10);
  transition: background 180ms ease, border-color 180ms ease, color 180ms ease;
}
.fx-btn:hover { color: #EAF5FF; border-color: rgba(255, 255, 255, 0.20); background: rgba(255, 255, 255, 0.085); }
.fx-btn:active { transform: translateY(1px); }
.fx-btn svg { width: 13px; height: 13px; flex-shrink: 0; }
.fx-btn.warm { color: #F2D6A6; border-color: rgba(228, 178, 116, 0.34); background: rgba(228, 178, 116, 0.10); }
.fx-btn.warm:hover { color: #FFE6BE; border-color: rgba(228, 178, 116, 0.58); background: rgba(228, 178, 116, 0.18); }
.fx-btn.is-on { color: #FFE6BE; border-color: rgba(228, 178, 116, 0.62); background: rgba(228, 178, 116, 0.20); }
.fx-x {
  width: 28px; height: 28px; flex-shrink: 0; display: grid; place-items: center;
  border-radius: 7px; cursor: pointer;
  color: rgba(205, 224, 240, 0.72);
  background: rgba(255, 255, 255, 0.045);
  border: 1px solid rgba(255, 255, 255, 0.10);
  transition: color 180ms ease, background 180ms ease, border-color 180ms ease;
}
.fx-x svg { width: 12px; height: 12px; }
.fx-x:hover { color: #F2D6A6; background: rgba(228, 178, 116, 0.12); border-color: rgba(228, 178, 116, 0.48); }

/* —— 滚动区 —— */
.fx-scroll {
  flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden;
  padding: 14px 18px 20px;
  scrollbar-width: thin; scrollbar-color: rgba(184, 214, 240, 0.24) transparent;
}
.fx-scroll::-webkit-scrollbar { width: 5px; height: 5px; }
.fx-scroll::-webkit-scrollbar-thumb { background: rgba(184, 214, 240, 0.22); border-radius: 3px; }
.fx-scroll::-webkit-scrollbar-thumb:hover { background: rgba(184, 214, 240, 0.36); }
.fx-scroll::-webkit-scrollbar-track { background: transparent; }
#fp-detail.open .fx-scroll { animation: fx-in 360ms cubic-bezier(0.32, 0.72, 0, 1) 40ms both; }
@keyframes fx-in {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
  #fp-detail, #fp-detail.open { transition: none; transform: none; }
  #fp-detail.open .fx-scroll { animation: none; }
}
#fp-detail .fx-mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; letter-spacing: 0; }

/* —— 顶部档案摘要 —— */
.fx-hero {
  padding: 13px 15px 4px; border-radius: 10px;
  background: rgba(255, 255, 255, 0.035);
  border: 1px solid rgba(255, 255, 255, 0.075);
}
.fx-hero-top { display: flex; align-items: center; gap: 9px; min-height: 24px; }
.fx-st {
  display: inline-flex; align-items: center; gap: 6px; flex-shrink: 0;
  height: 24px; padding: 0 10px; border-radius: 999px;
  background: color-mix(in srgb, var(--fx-st) 12%, transparent);
  border: 1px solid color-mix(in srgb, var(--fx-st) 30%, transparent);
  color: var(--fx-st-hi);
}
.fx-st > i {
  width: 6px; height: 6px; border-radius: 50%; flex-shrink: 0;
  background: var(--fx-st-hi); box-shadow: 0 0 6px var(--fx-st-hi);
}
#fp-detail[data-st="run"] .fx-st > i { animation: fx-st-breathe 1.9s ease-in-out infinite; }
@keyframes fx-st-breathe {
  0%, 100% { box-shadow: 0 0 4px var(--fx-st-hi); }
  50%      { box-shadow: 0 0 9px var(--fx-st-hi); }
}
@media (prefers-reduced-motion: reduce) { #fp-detail[data-st="run"] .fx-st > i { animation: none; } }
.fx-st b { font-size: 11.5px; font-weight: 600; letter-spacing: 0.8px; line-height: 1; }
.fx-code {
  min-width: 0; font-size: 10.5px; letter-spacing: 0.2px;
  color: rgba(178, 202, 224, 0.55);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.fx-hint {
  margin-left: auto; flex-shrink: 0;
  font-size: 11px; letter-spacing: 0.3px; color: rgba(205, 224, 240, 0.55);
  font-variant-numeric: tabular-nums;
}
.fx-name {
  margin: 8px 0 2px;
  font-size: 15.5px; font-weight: 600; letter-spacing: 0.2px; line-height: 1.55;
  color: #F1F8FF;
}
.fx-facts { margin-top: 4px; }

/* —— 键值行：纵向单列 —— */
.fx-row {
  display: flex; align-items: flex-start; gap: 14px;
  min-height: 31px; padding: 6px 0;
  border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
.fx-row:last-child { border-bottom: none; }
.fx-row > span {
  flex: 0 0 148px; padding-top: 1px;
  font-size: 11px; letter-spacing: 0.3px; line-height: 1.6;
  color: rgba(170, 198, 222, 0.55);
}
.fx-row > b {
  flex: 1; min-width: 0; text-align: right;
  font-size: 12.5px; font-weight: 500; letter-spacing: 0.2px; line-height: 1.6;
  color: #DFEDF9; overflow-wrap: anywhere;
}
.fx-row > b.is-empty { color: rgba(170, 192, 212, 0.36); font-weight: 400; }
.fx-row.stack { flex-direction: column; gap: 2px; }
.fx-row.stack > span, .fx-row.stack > b { flex: none; }
.fx-row.stack > b { text-align: left; }

/* —— 模块：描边卡片 + 色调节奏（琥珀 / 冷蓝 / 钢灰三档） —— */
#fp-detail [data-tone="warm"]  { --fx-tone: #E2B27C; --fx-tone-soft: rgba(226, 178, 124, 0.13); }
#fp-detail [data-tone="cool"]  { --fx-tone: #8FC4EA; --fx-tone-soft: rgba(143, 196, 234, 0.13); }
#fp-detail [data-tone="steel"] { --fx-tone: #9DB6CA; --fx-tone-soft: rgba(157, 182, 202, 0.10); }
.fx-sec {
  position: relative; margin-top: 14px; overflow: hidden;
  border-radius: 10px;
  border: 1px solid color-mix(in srgb, var(--fx-tone) 15%, rgba(255, 255, 255, 0.10));
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.05) 0%, rgba(255, 255, 255, 0.02) 100%);
  box-shadow: inset 2px 0 0 color-mix(in srgb, var(--fx-tone) 34%, transparent);
}
.fx-sec-ent {
  background:
    radial-gradient(96% 80% at 100% 0%, var(--fx-tone-soft) 0%, rgba(255, 255, 255, 0) 58%),
    linear-gradient(180deg, rgba(255, 255, 255, 0.05) 0%, rgba(255, 255, 255, 0.02) 100%);
  box-shadow: inset 2px 0 0 color-mix(in srgb, var(--fx-tone) 62%, transparent);
}
.fx-sec-hd {
  display: flex; align-items: center; gap: 9px;
  padding: 12px 15px 10px;
  border-bottom: 1px solid color-mix(in srgb, var(--fx-tone) 18%, rgba(255, 255, 255, 0.07));
  background: linear-gradient(90deg, var(--fx-tone-soft) 0%, rgba(255, 255, 255, 0.014) 58%);
}
.fx-sec-hd h4 {
  margin: 0; display: flex; align-items: center; gap: 8px;
  font-size: 14px; font-weight: 700; letter-spacing: 1.2px; line-height: 1.35;
  color: #F0F8FF; white-space: nowrap;
}
.fx-sec-hd h4::before {
  content: ""; width: 3px; height: 13px; border-radius: 1.5px; flex-shrink: 0;
  background: var(--fx-tone);
  box-shadow: 0 0 8px color-mix(in srgb, var(--fx-tone) 55%, transparent);
}
.fx-sec-s {
  margin-left: auto; min-width: 0;
  font-size: 10.5px; letter-spacing: 0.3px; line-height: 1.4;
  color: rgba(180, 205, 228, 0.52);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.fx-sec-bd { padding: 2px 15px 8px; }

/* 申请方 / 航空器：主体标识行 */
.fx-ent {
  display: flex; align-items: center; gap: 10px;
  padding: 10px 0 9px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
.fx-ic {
  width: 34px; height: 34px; flex-shrink: 0; display: grid; place-items: center;
  border-radius: 9px; color: var(--fx-tone);
  background: color-mix(in srgb, var(--fx-tone) 10%, transparent);
  border: 1px solid color-mix(in srgb, var(--fx-tone) 24%, transparent);
}
.fx-ic svg { width: 18px; height: 18px; }
.fx-ent-id { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 2px; }
.fx-ent-id b {
  display: block; font-size: 13.5px; font-weight: 600; letter-spacing: 0.3px; line-height: 1.35;
  color: #EDF6FF; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.fx-ent-id span {
  display: block; font-size: 10.5px; letter-spacing: 0.4px; line-height: 1.4;
  color: rgba(170, 198, 222, 0.5);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

/* —— 展开 / 收起 —— */
.fx-toggle {
  display: inline-flex; align-items: center; gap: 4px; flex-shrink: 0;
  height: 22px; padding: 0 7px; border-radius: 5px; cursor: pointer; white-space: nowrap;
  font-size: 11px; font-weight: 500; letter-spacing: 0.3px;
  color: rgba(190, 214, 234, 0.70);
  background: transparent; border: 1px solid transparent;
  transition: color 180ms ease, background 180ms ease, border-color 180ms ease;
}
.fx-toggle svg { width: 10px; height: 10px; flex-shrink: 0; transition: transform 280ms cubic-bezier(0.32, 0.72, 0, 1); }
.fx-toggle:hover { color: #EAF4FF; background: rgba(255, 255, 255, 0.05); border-color: rgba(255, 255, 255, 0.10); }
.fx-toggle[aria-expanded="true"] svg { transform: rotate(180deg); }
.fx-sec-hd .fx-toggle { align-self: center; }
.fx-more {
  display: flex; justify-content: space-between; align-items: center;
  width: 100%; height: 31px; padding: 0 15px;
  border: none; border-top: 1px solid rgba(255, 255, 255, 0.06); border-radius: 0;
  background: transparent;
  color: rgba(190, 214, 234, 0.62);
  font-size: 11px; font-weight: 500; letter-spacing: 0.3px; cursor: pointer;
  transition: color 180ms ease, background 180ms ease;
}
.fx-more:hover { color: #EAF4FF; background: rgba(255, 255, 255, 0.03); }
.fx-more svg { width: 11px; height: 11px; }
.fx-mod .fx-coll {
  display: grid; grid-template-rows: 0fr; opacity: 0;
  transition: grid-template-rows 340ms cubic-bezier(0.32, 0.72, 0, 1), opacity 200ms ease;
}
.fx-mod .fx-coll-in { overflow: hidden; min-height: 0; }
.fx-mod.open .fx-coll { grid-template-rows: 1fr; opacity: 1; }
.fx-coll-body { padding: 0 15px 6px; }
.fx-sec-bd .fx-coll-body { padding-left: 0; padding-right: 0; }
@media (prefers-reduced-motion: reduce) { .fx-mod .fx-coll { transition: none; } }

/* —— 多机 / 多人：展开区里的一组档案 ——
   每架（每人）一小段，段首一枚编号，段与段之间一条发丝线。
   不分主次，所以不做「第一架」的强调——序号只是序号 */
.fx-air-blk + .fx-air-blk {
  margin-top: 10px; padding-top: 9px;
  border-top: 1px solid rgba(255, 255, 255, 0.055);
}
.fx-air-k {
  display: block; margin-bottom: 5px;
  font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.8px;
  color: rgba(180, 206, 228, 0.62);
}

/* —— 长文块 —— */
.fx-block {
  margin: 8px 0 6px; padding: 9px 11px;
  border-radius: 8px;
  background: rgba(9, 14, 20, 0.30);
  border: 1px solid rgba(255, 255, 255, 0.055);
}
.fx-block:first-child { margin-top: 2px; }
.fx-block-k {
  display: block; font-size: 10.5px; font-weight: 600; letter-spacing: 0.5px;
  color: rgba(170, 198, 222, 0.55);
  margin-bottom: 3px;
}
.fx-block p { margin: 0; font-size: 12.5px; line-height: 1.8; color: rgba(222, 236, 248, 0.82); }

/* —— 附件 —— */
.fx-filewrap { padding: 8px 0 2px; }
.fx-file-k { display: block; font-size: 10.5px; letter-spacing: 0.4px; color: rgba(170, 198, 222, 0.52); margin-bottom: 6px; }
.fx-file {
  display: flex; align-items: center; gap: 9px; width: 100%;
  padding: 7px 9px; border-radius: 8px; cursor: pointer; text-align: left;
  background: rgba(228, 178, 116, 0.06);
  border: 1px solid rgba(228, 178, 116, 0.18);
  transition: background 180ms ease, border-color 180ms ease;
}
.fx-file:hover { background: rgba(228, 178, 116, 0.12); border-color: rgba(228, 178, 116, 0.42); }
.fx-file-ic {
  width: 27px; height: 27px; flex-shrink: 0; display: grid; place-items: center;
  border-radius: 7px; color: #E8C394;
  background: rgba(228, 178, 116, 0.09);
  border: 1px solid rgba(228, 178, 116, 0.16);
}
.fx-file-ic svg { width: 14px; height: 14px; }
.fx-file-tt { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.fx-file-tt b {
  font-size: 11.5px; font-weight: 500; color: #EDF5FC; line-height: 1.4;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.fx-file-tt em { font-style: normal; font-size: 10px; letter-spacing: 0.3px; color: rgba(180, 205, 228, 0.50); }
.fx-file-go { flex-shrink: 0; display: grid; place-items: center; color: rgba(232, 195, 148, 0.55); transform: rotate(-90deg); }
.fx-file-go svg { width: 12px; height: 12px; }
.fx-file:hover .fx-file-go { color: #F2D6A6; }

/* —— 表格 —— */
.fx-tblwrap {
  margin: 4px 0 6px;
  border-radius: 8px; overflow-x: auto; overflow-y: hidden;
  border: 1px solid rgba(255, 255, 255, 0.065);
  background: rgba(6, 10, 15, 0.26);
  scrollbar-width: thin; scrollbar-color: rgba(184, 214, 240, 0.22) transparent;
}
.fx-tblwrap::-webkit-scrollbar { height: 5px; }
.fx-tblwrap::-webkit-scrollbar-thumb { background: rgba(184, 214, 240, 0.22); border-radius: 3px; }
.fx-tbl { width: 100%; border-collapse: collapse; min-width: 560px; }
.fx-tbl th {
  padding: 7px 10px; text-align: center; white-space: nowrap;
  font-size: 10.5px; font-weight: 600; letter-spacing: 0.4px;
  color: rgba(198, 220, 238, 0.72);
  background: rgba(255, 255, 255, 0.035);
  border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}
.fx-tbl td {
  padding: 8px 10px; text-align: center;
  font-size: 12px; font-weight: 500; letter-spacing: 0.2px; line-height: 1.55;
  color: #DFEDF9;
  border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
.fx-tbl tbody tr:last-child td { border-bottom: none; }
.fx-tbl tbody tr { transition: background 160ms ease; }
.fx-tbl tbody tr:hover { background: rgba(255, 255, 255, 0.035); }
.fx-tbl td:first-child { font-weight: 600; color: #EBF4FD; }
.fx-tbl td.is-empty { color: rgba(170, 192, 212, 0.38); font-weight: 400; }

/* —— 空态 —— */
.fx-empty {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px;
  padding: 18px 14px; border-radius: 8px;
  border: 1px dashed rgba(170, 198, 222, 0.16);
  background: rgba(255, 255, 255, 0.012);
}
.fx-empty svg { width: 21px; height: 21px; opacity: 0.72; margin-bottom: 2px; color: rgba(170, 198, 222, 0.55); }
.fx-empty b { font-size: 12px; font-weight: 500; letter-spacing: 0.4px; color: rgba(190, 210, 228, 0.55); }
.fx-empty span { font-size: 10.5px; letter-spacing: 0.3px; color: rgba(170, 198, 222, 0.36); }

/* —— 变更日志：纵向行式档案 —— */
.fx-logs { list-style: none; margin: 0; padding: 2px 0 4px; }
.fx-logs li { padding: 9px 0 10px; border-top: 1px solid rgba(255, 255, 255, 0.05); }
.fx-logs li:first-child { border-top: none; padding-top: 5px; }
.fx-log-top { display: flex; align-items: center; gap: 8px; margin-bottom: 3px; }
.fx-logs time {
  font-family: var(--font-mono); font-size: 10.5px; line-height: 1.5;
  color: rgba(170, 198, 222, 0.50); font-variant-numeric: tabular-nums;
}
.fx-logs li:first-child time { color: rgba(235, 193, 135, 0.95); }
.fx-actor {
  display: inline-flex; align-items: center; height: 17px; padding: 0 6px;
  border-radius: 4px; font-size: 10px; letter-spacing: 0.2px; white-space: nowrap;
  color: rgba(200, 218, 234, 0.70);
  background: rgba(255, 255, 255, 0.045);
  border: 1px solid rgba(255, 255, 255, 0.07);
}
.fx-logs p { margin: 0; font-size: 12.5px; line-height: 1.7; color: rgba(210, 228, 242, 0.80); overflow-wrap: anywhere; }
.fx-logs p b { font-weight: 600; color: #EBC187; }

/* —— 固定免责声明 —— */
.fx-foot {
  flex-shrink: 0;
  display: flex; align-items: flex-start; gap: 8px;
  padding: 10px 18px 11px;
  border-top: 1px solid rgba(255, 255, 255, 0.09);
  background: rgba(8, 12, 18, 0.26);
  font-size: 11px; letter-spacing: 0.3px; line-height: 1.6;
  color: rgba(190, 210, 228, 0.52);
}
.fx-foot > svg { width: 13px; height: 13px; flex-shrink: 0; margin-top: 1px; color: rgba(228, 178, 116, 0.62); }
.fx-link {
  color: #E8C394; text-decoration: none;
  border-bottom: 1px dotted rgba(232, 195, 148, 0.50);
  transition: color 180ms ease, border-color 180ms ease;
}
.fx-link:hover { color: #F2D6A6; border-bottom-color: rgba(242, 214, 166, 0.85); }

/* —— 窄屏：字段行收窄，长标签可读 —— */
@media (max-width: 1100px) {
  .fx-row > span { flex-basis: 118px; }
  .fx-hint { display: none; }
  .fx-sec-s { display: none; }
}

/* —— 2K：整体等比放大 —— */
@media (min-width: 2048px) {
  #fp-detail { border-radius: 14px; }
  .fx-head { padding: 17px 22px 14px; gap: 12px; }
  .fx-bar { height: 30px; }
  .fx-title { font-size: 17px; letter-spacing: 2px; }
  .fx-sub { font-size: 12px; }
  .fx-btn { height: 31px; padding: 0 13px; font-size: 12.5px; border-radius: 8px; }
  .fx-btn svg { width: 14px; height: 14px; }
  .fx-x { width: 31px; height: 31px; border-radius: 8px; }
  .fx-x svg { width: 13px; height: 13px; }
  .fx-scroll { padding: 18px 22px 24px; }
  .fx-hero { padding: 15px 17px 5px; border-radius: 12px; }
  .fx-st { height: 27px; padding: 0 12px; }
  .fx-st b { font-size: 12.5px; }
  .fx-code { font-size: 11.5px; }
  .fx-hint { font-size: 12px; }
  .fx-name { font-size: 17px; margin: 10px 0 3px; }
  .fx-row { min-height: 35px; padding: 7px 0; gap: 16px; }
  .fx-row > span { flex-basis: 168px; font-size: 12px; }
  .fx-row > b { font-size: 13.5px; }
  .fx-sec { margin-top: 16px; border-radius: 12px; }
  .fx-sec-hd { padding: 14px 17px 11px; }
  .fx-sec-hd h4 { font-size: 15.5px; letter-spacing: 1.4px; }
  .fx-sec-s { font-size: 11.5px; }
  .fx-sec-bd { padding: 3px 17px 10px; }
  .fx-ent { padding: 12px 0 11px; gap: 12px; }
  .fx-ic { width: 38px; height: 38px; border-radius: 10px; }
  .fx-ic svg { width: 20px; height: 20px; }
  .fx-ent-id b { font-size: 15px; }
  .fx-ent-id span { font-size: 11.5px; }
  .fx-toggle { height: 24px; font-size: 12px; }
  .fx-more { height: 35px; padding: 0 17px; font-size: 12px; }
  .fx-coll-body { padding: 0 17px 7px; }
  .fx-block { margin: 9px 0 7px; padding: 11px 13px; border-radius: 9px; }
  .fx-block-k { font-size: 11.5px; }
  .fx-block p { font-size: 13.5px; }
  .fx-filewrap { padding: 9px 0 3px; }
  .fx-file-k { font-size: 11.5px; }
  .fx-file { padding: 8px 11px; border-radius: 9px; }
  .fx-file-ic { width: 31px; height: 31px; border-radius: 8px; }
  .fx-file-ic svg { width: 16px; height: 16px; }
  .fx-file-tt b { font-size: 12.5px; }
  .fx-file-tt em { font-size: 11px; }
  .fx-tbl th { padding: 9px 12px; font-size: 11.5px; }
  .fx-tbl td { padding: 9px 12px; font-size: 13px; }
  .fx-empty { padding: 22px 16px; }
  .fx-empty b { font-size: 13px; }
  .fx-empty span { font-size: 11.5px; }
  .fx-logs li { padding: 10px 0 11px; }
  .fx-logs time { font-size: 11.5px; }
  .fx-actor { font-size: 11px; }
  .fx-logs p { font-size: 13.5px; }
  .fx-foot { padding: 12px 22px 13px; font-size: 12px; }
  .fx-foot > svg { width: 15px; height: 15px; }
}
