:root {

  --brand: #e08324;

  --brand-dim: #b8681a;

  --brand-glow: rgba(224, 131, 36, 0.35);

  --bar: rgba(18, 18, 20, 0.94);

  --panel: rgba(12, 12, 14, 0.88);

  --green: #e08324;

  --green-btn: #e08324;

  --orange: #e08324;

  --text: #f0f0f0;

  --muted: #9a9a9a;

  --line: rgba(255, 255, 255, 0.1);

  --font: "Microsoft YaHei", "PingFang SC", "Segoe UI", sans-serif;

  /* 右侧工具列预留宽度，弹窗/信息栏不得盖住 FAB */
  --fab-gutter: 118px;

  --mono: Consolas, "Sarasa Mono SC", monospace;

  --surface: #141416;

  --surface-2: #1c1c1f;

}



* {

  box-sizing: border-box;

}

html,

body {

  margin: 0;

  height: 100%;

  overflow: hidden;

  font-family: var(--font);

  color: var(--text);

  background: #111;

}

#app {

  position: relative;

  width: 100%;

  height: 100%;

}

#map {

  position: absolute;

  inset: 0;

  z-index: 0;

}



.topbar {

  position: absolute;

  top: 0;

  left: 0;

  right: 0;

  z-index: 30;

  display: flex;

  align-items: center;

  justify-content: space-between;

  gap: 12px;

  padding: 6px 10px;

  background: var(--bar);

  border-bottom: 1px solid #000;

  min-height: 58px;

}

.topbar-left {

  display: flex;

  align-items: center;

  gap: 10px;

  flex-shrink: 0;

}

.brand-logo {

  height: 28px;

  width: auto;

  display: block;

  object-fit: contain;

  flex-shrink: 0;

}

.topbar-right {

  display: flex;

  align-items: center;

  justify-content: flex-end;

  gap: 10px;

  flex: 1;

  min-width: 0;

  overflow-x: auto;

  margin-left: auto;

}



.status-pill {
  display: flex;
  align-items: stretch;
  gap: 6px;
  border: none;
  padding: 0;
  background: transparent;
  height: auto;
  flex-shrink: 0;
}

.status-pill .st-cell {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: flex-start;
  gap: 1px;
  min-width: 72px;
  padding: 5px 12px 5px 11px;
  border-radius: 8px;
  border: 1px solid rgba(255, 255, 255, 0.1);
  background: rgba(255, 255, 255, 0.06);
  box-shadow: inset 3px 0 0 0 rgba(255, 255, 255, 0.22);
  color: #f2f4f7;
  line-height: 1.15;
}

.status-pill .st-lab {
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.06em;
  opacity: 0.55;
  color: inherit;
}

.status-pill .st-val {
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.02em;
  color: inherit;
  font-style: normal;
}

/* 通讯 */
.status-pill .st-status.ready {
  background: rgba(62, 168, 90, 0.18);
  border-color: rgba(98, 196, 120, 0.35);
  box-shadow: inset 3px 0 0 0 #3ec86a;
  color: #d8f5e2;
}

.status-pill .st-status.lost {
  background: rgba(220, 70, 60, 0.22);
  border-color: rgba(240, 110, 100, 0.4);
  box-shadow: inset 3px 0 0 0 #e85a4f;
  color: #ffe3df;
}

.status-pill .st-status.warn {
  background: rgba(224, 131, 36, 0.2);
  border-color: rgba(224, 131, 36, 0.4);
  box-shadow: inset 3px 0 0 0 var(--brand, #e08324);
  color: #ffe8cc;
}

.status-pill .st-status.idle {
  background: rgba(255, 255, 255, 0.06);
  border-color: rgba(255, 255, 255, 0.12);
  box-shadow: inset 3px 0 0 0 #8a9099;
  color: #c5cad3;
}

/* 模式 */
.status-pill .st-mode {
  background: rgba(224, 131, 36, 0.16);
  border-color: rgba(224, 131, 36, 0.38);
  box-shadow: inset 3px 0 0 0 var(--brand, #e08324);
  color: #ffe4c4;
}

.status-pill .st-mode.rtl {
  background: rgba(200, 55, 45, 0.22);
  border-color: rgba(230, 90, 80, 0.45);
  box-shadow: inset 3px 0 0 0 #e74c3c;
  color: #ffd6d1;
}

/* 解锁 */
.status-pill .st-arm {
  background: rgba(255, 255, 255, 0.05);
  border-color: rgba(255, 255, 255, 0.1);
  box-shadow: inset 3px 0 0 0 #6b7280;
  color: #b0b6c0;
}

.status-pill .st-arm.on {
  background: rgba(40, 140, 90, 0.2);
  border-color: rgba(70, 180, 120, 0.4);
  box-shadow: inset 3px 0 0 0 #2fbf72;
  color: #d2f5e0;
}



.tb-block,

.tb-text,

.tb-icon-val {

  display: flex;

  flex-direction: column;

  justify-content: center;

  color: #fff;

  font-size: 13px;

  white-space: nowrap;

}

.tb-label {

  color: var(--muted);

  font-size: 12px;

}

.current-block {

  background: transparent;

  border: none;

  cursor: pointer;

  text-align: left;

  padding: 0 4px;

  display: flex;

  flex-direction: row;

  align-items: center;

  gap: 8px;

}

.motor-metric-sel {

  appearance: none;

  -webkit-appearance: none;

  background: transparent

    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%239aa0a6'/%3E%3C/svg%3E")

    no-repeat right 2px center;

  border: none;

  color: var(--muted);

  font-size: 12px;

  padding: 2px 14px 2px 2px;

  cursor: pointer;

  outline: none;

  min-width: 3.2em;

}

.motor-metric-sel:hover,

.motor-metric-sel:focus {

  color: #fff;

}

.motor-metric-sel option {

  color: #111;

  background: #fff;

}

.amps {

  display: grid;

  grid-template-columns: 1fr 1fr;

  gap: 3px;

}

.amps i {

  font-style: normal;

  background: var(--orange);

  color: #fff;

  border-radius: 3px;

  padding: 1px 5px;

  font-size: 12px;

  font-family: var(--mono);

  min-width: 58px;

  text-align: center;

  display: inline-flex;

  align-items: center;

  justify-content: center;

  gap: 4px;

  line-height: 1.25;

  white-space: nowrap;

}

.amps i b {

  font-weight: 600;

  font-size: 12px;

}

/* 电机序号图标：圆角方块，反色（白底橙字，相对参考图橙底白字） */
.motor-ico {

  display: inline-flex;

  align-items: center;

  justify-content: center;

  width: 14px;

  height: 14px;

  flex: 0 0 14px;

  border-radius: 3px;

  background: #fff;

  box-sizing: border-box;

}

.motor-ico em {

  font-style: normal;

  font-weight: 800;

  font-size: 10px;

  line-height: 1;

  color: var(--orange, #e08324);

  font-family: system-ui, "Segoe UI", sans-serif;

  transform: translateY(0.5px);

}

/* 出错闪烁时图标也反一下，保持对比 */
.amps i.is-err .motor-ico {

  background: var(--orange, #e08324);

}

.amps i.is-err .motor-ico em {

  color: #fff;

}

.amps i.is-err {

  animation: motorAmpFlash 0.32s steps(1, end) infinite;

}

@keyframes motorAmpFlash {

  0%,

  49% {

    background: #d32f2f;

    box-shadow: 0 0 0 1px rgba(255, 220, 180, 0.35);

  }

  50%,

  100% {

    background: var(--orange);

    box-shadow: none;

  }

}

.amps i em {

  font-style: normal;

  font-weight: 700;

  opacity: 0.9;

  font-size: 11px;

  min-width: 0.9em;

}

.tb-text {
  min-width: 7.5em;
  gap: 2px;
}

.tb-kv {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  width: 100%;
  white-space: nowrap;
}

.tb-k {
  flex: 0 0 auto;
  text-align: left;
  opacity: 0.92;
}

.tb-v {
  flex: 0 0 auto;
  margin-left: auto;
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.tb-text b,

.tb-icon-val b {

  font-weight: 700;

  font-family: var(--mono);

  font-size: 15px;

}

.tb-icon-val {

  flex-direction: row;

  align-items: center;

  gap: 6px;

  padding: 0 6px;

  border-left: 1px solid var(--line);

}

.tb-icon-val .stack {

  display: flex;

  flex-direction: column;

  line-height: 1.15;

}

.tb-icon-val small {

  color: #9ad;

  font-size: 12px;

}

.ico {

  opacity: 0.95;

  font-size: 22px;

  line-height: 1;

}

.ico.blue {

  color: #4da3ff;

}

.gps-btn,

.warn-btn,

.menu-btn {

  background: transparent;

  border: none;

  color: inherit;

  cursor: pointer;

}

.warn-btn {

  color: #f44;

  font-size: 22px;

}

.menu-btn {

  font-size: 22px;

}



.overlay {

  position: absolute;

  z-index: 20;

  pointer-events: none;

}

.log-info {

  top: 68px;

  left: 12px;

  color: #fff;

  text-shadow: 0 1px 3px #000;

  font-size: 13px;

  line-height: 1.45;

}

.toast {

  top: 74px;

  left: 50%;

  transform: translateX(-50%);

  background: rgba(224, 131, 36, 0.95);

  color: #111;

  padding: 8px 14px;

  border-radius: 6px;

  font-size: 13px;

  max-width: 520px;

  pointer-events: none;

  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);

}

/* ALERT 信息：屏幕中上方多条堆叠 */
.alert-toast-stack {
  top: 72px;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  z-index: 35;
  max-width: min(560px, 92vw);
  width: max-content;
}

.alert-toast {
  background: rgba(196, 42, 32, 0.94);
  color: #fff;
  padding: 10px 16px;
  border-radius: 6px;
  font-size: 14px;
  font-weight: 600;
  line-height: 1.35;
  text-align: center;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.35);
  border: 1px solid rgba(255, 220, 180, 0.25);
  opacity: 0;
  transform: translateY(-8px);
  transition: opacity 0.18s ease, transform 0.18s ease;
  max-width: min(560px, 92vw);
  word-break: break-word;
}

.alert-toast.is-in {
  opacity: 1;
  transform: translateY(0);
}

.alert-toast.is-out {
  opacity: 0;
  transform: translateY(-6px);
}



/* 右侧工具列 */

/* 右侧工具轨：视角在地图模式按钮左侧，FAB 列宽度独立 */
.fab-rail {
  position: absolute;
  top: 68px;
  right: 10px;
  z-index: 50;
  display: flex;
  flex-direction: row;
  align-items: flex-start;
  gap: 8px;
  max-height: calc(100vh - 180px);
}

.fab-col {
  position: relative;
  top: auto;
  right: auto;
  z-index: auto;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 6px;
  max-height: calc(100vh - 180px);
  overflow-y: auto;
  flex: 0 0 auto;
}

/* 3D 视角：贴在「地图模式」左侧，仅 3D 时显示 */
.view3d-cam {
  position: relative;
  top: auto;
  left: auto;
  z-index: auto;
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 4px;
  padding: 6px 8px;
  border-radius: 8px;
  background: rgba(12, 14, 18, 0.85);
  border: 1px solid rgba(224, 131, 36, 0.4);
  color: #e8eef5;
  font-size: 11px;
  pointer-events: auto;
  flex: 0 0 auto;
  max-width: 118px;
}

.view3d-cam[hidden] {
  display: none !important;
}

.view3d-cam label {
  opacity: 0.75;
  white-space: nowrap;
  cursor: pointer;
}

.view3d-cam select {
  background: #1a1a1c;
  color: #f2f4f7;
  border: 1px solid rgba(255, 255, 255, 0.18);
  border-radius: 5px;
  padding: 4px 6px;
  font-size: 12px;
  cursor: pointer;
  width: 100%;
  max-width: 100%;
}

.fab-mode-pair {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.fab-mode {
  border: 1px solid rgba(224, 131, 36, 0.45);
  background: #1a1a1c;
  color: var(--brand);
  font-weight: 700;
  font-size: 12px;
  border-radius: 8px;
  padding: 8px 10px;
  cursor: pointer;
  white-space: nowrap;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
}

.fab-mode.on {
  background: var(--brand);
  color: #111;
  border-color: var(--brand-dim);
}

.fab-mode.is-3d {
  background: #8a4a12;
  color: #ffe8cc;
}

.fab-ico,

.fab-chart {

  border: 1px solid rgba(224, 131, 36, 0.45);

  background: #1a1a1c;

  color: var(--brand);

  border-radius: 8px;

  padding: 7px 10px;

  font-size: 12px;

  font-weight: 600;

  cursor: pointer;

  white-space: nowrap;

}

.fab-ico {

  font-size: 16px;

  text-align: center;

}

.fab-chart.on {

  background: var(--brand);

  color: #111;

  border-color: var(--brand-dim);

}

.fab-sep {

  height: 1px;

  background: rgba(255, 255, 255, 0.12);

  margin: 2px 0;

}



/* 3D 全屏画布（贴顶栏下方，无黑条） */

.stage-3d {

  position: absolute;

  z-index: 12;

  left: 0;

  right: 0;

  top: 58px;

  bottom: 52px;

  display: flex;

  flex-direction: column;

  background: #0e1218;

  overflow: hidden;

  pointer-events: auto;

}

.stage-3d[hidden] {

  display: none !important;

}

.view3d-canvas {

  flex: 1;

  min-height: 0;

  background: linear-gradient(#3a6aaa, #c9b896);

  position: relative;

}

.view3d-canvas canvas {

  display: block;

  width: 100% !important;

  height: 100% !important;

}

.view3d-err {

  position: absolute;

  inset: 0;

  display: grid;

  place-items: center;

  padding: 24px;

  color: #fff;

  background: #8b1a1a;

  text-align: center;

}

.view3d-hud {

  position: absolute;

  left: 12px;

  bottom: 12px;

  display: flex;

  flex-wrap: wrap;

  gap: 10px;

  background: rgba(0, 0, 0, 0.55);

  color: #b8f5c8;

  padding: 6px 10px;

  border-radius: 6px;

  font-size: 12px;

  pointer-events: none;

  z-index: 2;

}

.view3d-hud b {

  color: #fff;

}

.view3d-hint {

  position: absolute;

  right: 12px;

  bottom: 12px;

  background: rgba(0, 0, 0, 0.4);

  color: #ccc;

  padding: 4px 10px;

  border-radius: 4px;

  font-size: 11px;

  pointer-events: none;

  z-index: 2;

}

/* 多图表停靠：由 JS 左右绝对定位，避免互相遮挡 */

.chart-dock {

  position: absolute;

  z-index: 34;

  inset: 0;

  pointer-events: none;

}

.chart-dock[hidden] {

  display: none !important;

}

.chart-card {

  position: absolute;

  left: 0;

  right: 0;

  pointer-events: auto;

  display: flex;

  flex-direction: column;

  background: rgba(14, 14, 16, 0.92);

  border: 1px solid rgba(224, 131, 36, 0.4);

  border-radius: 8px;

  overflow: hidden;

  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.4);

}

.chart-card-bar {

  display: flex;

  align-items: center;

  justify-content: space-between;

  padding: 3px 8px;

  font-size: 11px;

  font-weight: 700;

  color: #eee;

  background: rgba(0, 0, 0, 0.4);

  flex-shrink: 0;

}

.chart-card-x {

  border: none;

  background: transparent;

  color: #ccc;

  font-size: 16px;

  line-height: 1;

  cursor: pointer;

  padding: 0 2px;

}

.chart-card canvas {

  display: block;

  margin: 0 4px;

  flex: 1;

  min-height: 0;

}

.chart-card-leg {

  display: flex;

  flex-wrap: wrap;

  align-items: center;

  gap: 6px;

  padding: 2px 8px 4px;

  font-size: 10px;

  color: #aaa;

  flex-shrink: 0;

}

.chart-card-leg i {

  width: 8px;

  height: 8px;

  border-radius: 2px;

  display: inline-block;

}

.chart-card-leg em {

  font-style: normal;

  margin-right: 2px;

}



body.is-3d .map-only {

  display: none !important;

}

/* 摇杆：与姿态同风格黑底小窗，双摇杆并排 */
.sticks-card {
  display: flex;
  flex-direction: column;
}
.sticks-card[hidden] {
  display: none !important;
}
.sticks-body {
  flex: 1;
  min-height: 0;
  display: flex;
  align-items: center;
  justify-content: space-evenly;
  gap: 4px;
  padding: 4px 6px 8px;
  background: #101012;
}
.sticks-card .stick {
  position: relative;
  width: 72px;
  height: auto;
  opacity: 1;
  pointer-events: none;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  z-index: auto;
}
.sticks-card .stick-ring {
  width: 64px;
  height: 64px;
  border: 1.5px solid rgba(224, 131, 36, 0.55);
  border-radius: 50%;
  position: relative;
  background: #161618;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.06);
  overflow: hidden;
}
/* 十字底：实线元素，便于看推杆是否走直线 */
.sticks-card .stick-cross-v,
.sticks-card .stick-cross-h {
  position: absolute;
  background: rgba(224, 131, 36, 0.75);
  pointer-events: none;
  z-index: 0;
}
.sticks-card .stick-cross-v {
  left: 50%;
  top: 4px;
  bottom: 4px;
  width: 2px;
  margin-left: -1px;
}
.sticks-card .stick-cross-h {
  top: 50%;
  left: 4px;
  right: 4px;
  height: 2px;
  margin-top: -1px;
}
.sticks-card .stick-knob {
  position: absolute;
  width: 10px;
  height: 10px;
  margin: -5px 0 0 -5px;
  left: 50%;
  top: 50%;
  z-index: 1;
  background: var(--brand);
  border-radius: 50%;
  box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.35);
}
.sticks-card .stick-meta {
  display: flex;
  flex-direction: column;
  align-items: center;
  line-height: 1.15;
  font-size: 10px;
  color: #aaa;
}
.sticks-card .stick-meta .sm-t {
  color: #eee;
  font-weight: 600;
}

/* 飞行器信息：与摇杆同列黑底小窗 */
.veh-info-card {
  display: flex;
  flex-direction: column;
}
.veh-info-card[hidden] {
  display: none !important;
}
.veh-info-body {
  flex: 1;
  min-height: 0;
  overflow: auto;
  padding: 6px 8px 8px;
  background: #101012;
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-size: 11px;
  color: #bbb;
}
.veh-info-body > div {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 8px;
}
.veh-info-body b,
.veh-info-body pre {
  margin: 0;
  color: #eee;
  font-family: var(--mono), ui-monospace, monospace;
  font-weight: 700;
  font-size: 11px;
  text-align: right;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 68%;
}
.veh-serial-row {
  align-items: baseline !important;
}
.veh-serial-row pre {
  line-height: 1.25;
  max-width: 68%;
}

.hud-panel {

  position: absolute;

  left: 8px;

  bottom: 58px;

  z-index: 22;

  display: flex;

  align-items: flex-end;

  gap: 6px;

  background: transparent;

  padding: 0;

  max-width: min(760px, 96vw);

}

#hsi {

  width: 168px;

  height: 168px;

  aspect-ratio: 1 / 1;

  background: transparent;

  flex-shrink: 0;

  display: block;

  /* 防止被 flex 拉扁导致三角变形 */

  object-fit: contain;

}

.hud-grid {

  display: grid;

  grid-template-columns: repeat(6, 1fr);

  grid-template-areas:

    "h1 h1 h1 h2 h2 h2"

    "d1 d1 d1 d2 d2 d2"

    "p1 p1 p2 p2 tm tm"

    "sp sp al al co co";

  background: rgba(12, 12, 14, 0.88);

  border: 1px solid rgba(224, 131, 36, 0.35);

  border-radius: 6px;

  overflow: hidden;

  font-size: 13px;

  color: #fff;

  min-width: 420px;

  backdrop-filter: blur(3px);

}

.hg {

  display: flex;

  align-items: center;

  gap: 4px;

  padding: 7px 10px;

  border-right: 1px solid rgba(255, 255, 255, 0.22);

  border-bottom: 1px solid rgba(255, 255, 255, 0.22);

  white-space: nowrap;

}

.r1c1 { grid-area: h1; }

.r1c2 { grid-area: h2; border-right: none; }

.r2c1 { grid-area: d1; }

.r2c2 { grid-area: d2; border-right: none; }

.r3c1 { grid-area: p1; }

.r3c2 { grid-area: p2; }

.r3c3 { grid-area: tm; border-right: none; }

.r4c1 { grid-area: sp; align-items: flex-start; white-space: normal; border-bottom: none; }

.r4c2 { grid-area: al; align-items: flex-start; white-space: normal; border-bottom: none; }

.r4c3 {

  grid-area: co;

  border-right: none;

  border-bottom: none;

  flex-direction: column;

  align-items: flex-start;

  gap: 1px;

  font-size: 12px;

  font-family: var(--mono);

  white-space: normal;

}

.timer-cell {

  justify-content: center;

  font-family: var(--mono);

  font-size: 16px;

  font-weight: 700;

}

.hg .lbl {

  font-size: 12px;

  opacity: 0.9;

}

.metric {

  display: flex;

  flex-direction: column;

  gap: 2px;

  min-width: 0;

}

.metric-row {

  display: flex;

  align-items: baseline;

  gap: 2px;

  font-family: var(--mono);

}

.metric-val {

  display: inline-block;

  min-width: 4.6ch;

  text-align: right;

  font-variant-numeric: tabular-nums;

  font-feature-settings: "tnum";

  font-weight: 700;

}

.metric-val.climb {

  min-width: 4.2ch;

  margin-left: 6px;

}

.metric-unit {

  display: inline-block;

  min-width: 2.6ch;

  text-align: left;

  opacity: 0.85;

  font-size: 12px;

  font-weight: 500;

}

.hg-ico {

  opacity: 0.85;

  font-size: 12px;

}

.hud-grid b {

  font-family: var(--mono);

  font-weight: 700;

  font-variant-numeric: tabular-nums;

}



.video-stack {

  position: absolute;

  right: 12px;

  bottom: 118px;

  z-index: 22;

  display: flex;

  flex-direction: column;

  gap: 8px;

  width: 180px;

}

.video-box {

  height: 100px;

  background: #000;

  border: 1px solid #333;

  color: #888;

  display: grid;

  place-items: center;

  font-size: 13px;

  border-radius: 4px;

}



.map-meta {

  position: absolute;

  right: 8px;

  bottom: 58px;

  z-index: 21;

  font-size: 12px;

  color: #fff;

  text-shadow: 0 1px 2px #000;

  padding: 4px 6px;

  background: rgba(0, 0, 0, 0.35);

  border-radius: 4px;

  pointer-events: none;

}



.transport {

  position: absolute;

  left: 0;

  right: 0;

  bottom: 0;

  z-index: 40;

  background: var(--surface);

  color: var(--text);

  padding: 6px 10px 8px;

  border-top: 1px solid #2a2a2e;

}

.transport .row {

  display: flex;

  align-items: center;

  gap: 8px;

  margin: 4px 0;

}

.transport .row.dim {

  opacity: 0.75;

}

.transport input[type="range"] {

  flex: 1;

  accent-color: var(--brand);

}

.jump-sel {

  max-width: 160px;

  background: #2a2d33;

  color: #e8e8e8;

  border: 1px solid #3d424a;

  border-radius: 3px;

  padding: 4px 6px;

  font: inherit;

  font-size: 12px;

  cursor: pointer;

}

.jump-sel:disabled {

  opacity: 0.4;

  cursor: not-allowed;

}

.jump-sel:not(:disabled):hover {

  border-color: var(--brand);

}

.gbtn,

.file-btn {

  background: var(--brand);

  color: #111;

  border: 1px solid var(--brand-dim);

  border-radius: 3px;

  padding: 5px 10px;

  font: inherit;

  font-size: 13px;

  cursor: pointer;

  white-space: nowrap;

  font-weight: 600;

}

.gbtn:hover,

.file-btn:hover {
  filter: brightness(1.08);
}

a.back-sel-btn {
  display: inline-flex;
  align-items: center;
  text-decoration: none;
  background: transparent;
  color: var(--brand, #e08324);
  border: 1px solid rgba(224, 131, 36, 0.55);
  border-radius: 3px;
  padding: 5px 10px;
  font: inherit;
  font-size: 13px;
  font-weight: 600;
  white-space: nowrap;
  cursor: pointer;
}

a.back-sel-btn:hover {
  background: rgba(224, 131, 36, 0.16);
  border-color: var(--brand, #e08324);
  filter: none;
}

.rec-btn {
  background: transparent;
  color: #f0a0a0;
  border: 1px solid rgba(220, 80, 70, 0.55);
  border-radius: 3px;
  padding: 5px 10px;
  font: inherit;
  font-size: 13px;
  font-weight: 600;
  white-space: nowrap;
  cursor: pointer;
}

.rec-btn:hover {
  background: rgba(220, 80, 70, 0.14);
  border-color: #e85a4f;
  filter: none;
}

.rec-btn.is-rec {
  background: #c0392b;
  color: #fff;
  border-color: #e74c3c;
  animation: recPulse 1.2s ease-in-out infinite;
}

@keyframes recPulse {
  0%,
  100% {
    box-shadow: 0 0 0 0 rgba(231, 76, 60, 0.45);
  }
  50% {
    box-shadow: 0 0 0 4px rgba(231, 76, 60, 0);
  }
}

.rec-badge {
  position: absolute;
  /* 避开顶栏中央的警告 / ALERT toast */
  top: auto;
  bottom: 58px;
  left: 12px;
  transform: none;
  z-index: 60;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 12px;
  border-radius: 999px;
  background: rgba(12, 14, 18, 0.88);
  border: 1px solid rgba(231, 76, 60, 0.55);
  color: #ffe8e6;
  font-size: 13px;
  font-weight: 600;
  pointer-events: auto;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.35);
}

.rec-badge[hidden] {
  display: none !important;
}

.rec-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: #e74c3c;
  box-shadow: 0 0 0 0 rgba(231, 76, 60, 0.6);
  animation: recDot 1s ease-in-out infinite;
}

@keyframes recDot {
  0%,
  100% {
    opacity: 1;
    box-shadow: 0 0 0 0 rgba(231, 76, 60, 0.55);
  }
  50% {
    opacity: 0.55;
    box-shadow: 0 0 0 6px rgba(231, 76, 60, 0);
  }
}

.rec-badge b {
  font-family: var(--mono, Consolas, monospace);
  font-weight: 700;
  min-width: 3.2em;
  text-align: center;
}

.rec-stop {
  margin-left: 4px;
  border: 1px solid rgba(255, 255, 255, 0.25);
  background: #c0392b;
  color: #fff;
  border-radius: 999px;
  padding: 3px 10px;
  font-size: 12px;
  font-weight: 700;
  cursor: pointer;
}

.rec-stop:hover {
  filter: brightness(1.08);
}

.gbtn:disabled {

  opacity: 0.5;

  cursor: not-allowed;

}

#btnPlayPause {

  background: var(--brand);

  color: #111;

  min-width: 88px;

}

#btnPlayPause.is-playing {

  background: #8a4a12;

  color: #ffe8cc;

  border-color: #6e3a0e;

}

.transport select {

  height: 28px;

  background: var(--surface-2);

  color: var(--text);

  border: 1px solid #333;

  border-radius: 3px;

}

.transport #curDur,

.transport #totDur {

  color: var(--muted);

  font-family: var(--mono);

  font-size: 12px;

}



.drop-mask {

  position: absolute;

  inset: 0;

  z-index: 50;

  background: rgba(8, 8, 10, 0.82);

  display: grid;

  place-items: center;

  text-align: center;

  color: #eee;

}

.drop-mask h2 {

  margin: 0 0 8px;

  color: var(--brand);

}

.drop-mask .hint {

  color: #888;

  font-size: 13px;

}

.drop-mask.hidden,

.drop-mask[hidden] {

  display: none !important;

  pointer-events: none !important;

}



.popup {

  position: absolute;

  z-index: 45;

  background: #fff;

  color: #222;

  border-radius: 8px;

  box-shadow: 0 8px 28px rgba(0, 0, 0, 0.35);

  padding: 10px;

}

#popupMotors {

  top: 90px;

  left: 90px;

  max-width: 920px;

  overflow: auto;

}

#popupMotors table {

  border-collapse: collapse;

  width: 100%;

  font-size: 13px;

}

#popupMotors th,

#popupMotors td {

  border-bottom: 1px solid #e5e5e5;

  padding: 6px 10px;

  text-align: center;

}

#popupMotors tr:nth-child(even) {

  background: #f5f5f5;

}

.gps-popup {

  top: 90px;

  right: var(--fab-gutter);

  width: 260px;

}



/* 右上角信息栏日志（对齐 GCS PRO）；避开右侧 FAB */
.status-log-popup {

  top: 78px;

  right: var(--fab-gutter);

  width: min(520px, calc(100vw - var(--fab-gutter) - 24px));

  max-height: min(420px, 55vh);

  padding: 10px 12px 36px;

  border: 1px solid #222;

  border-radius: 6px;

  display: flex;

  flex-direction: column;

  pointer-events: auto;

}

.status-log-popup[hidden] {

  display: none !important;

}

.status-log-list {

  overflow: auto;

  flex: 1;

  font: 13px/1.55 Consolas, "Courier New", monospace;

  color: #111;

  white-space: pre-wrap;

  word-break: break-word;

}

.status-log-line {

  margin: 0;

  padding: 0;

}

.status-log-line.alert {

  color: #e00000;

}

.status-log-empty {

  color: #888;

  font-family: "Microsoft YaHei", sans-serif;

}

.status-log-clear {

  position: absolute;

  right: 8px;

  bottom: 6px;

  border: none;

  background: transparent;

  font-size: 18px;

  cursor: pointer;

  line-height: 1;

  padding: 4px;

  opacity: 0.85;

}

.status-log-clear:hover {

  opacity: 1;

}

.warn-btn.has-alert {

  animation: warnPulse 1.2s ease-in-out infinite;

}

@keyframes warnPulse {

  0%,

  100% {

    opacity: 1;

  }

  50% {

    opacity: 0.45;

  }

}

.gps-popup h3 {

  margin: 0 0 8px;

}

.gps-rows div {

  display: flex;

  justify-content: space-between;

  padding: 4px 0;

  border-bottom: 1px solid #eee;

}

.gps-popup a {

  display: inline-block;

  margin-top: 8px;

  color: #1a73e8;

  text-decoration: none;

}

.detail-popup {

  top: 78px;

  right: var(--fab-gutter);

  left: auto;

  transform: none;

  width: min(900px, calc(100vw - var(--fab-gutter) - 24px));

  max-height: calc(100% - 200px);

  overflow: auto;

}

.tabs {

  display: flex;

  gap: 6px;

  margin-bottom: 10px;

}

.tabs button {

  border: 1px solid #ddd;

  background: #f7f7f7;

  padding: 6px 10px;

  border-radius: 4px;

  cursor: pointer;

}

.tabs button.on {

  background: #2b6cb0;

  color: #fff;

  border-color: #2b6cb0;

}

.detail-grid {

  display: grid;

  grid-template-columns: 1fr 1fr;

  gap: 10px;

}

.card {

  border: 1px solid #e2e2e2;

  border-radius: 8px;

  padding: 10px;

  background: #fafafa;

}

.card h4 {

  margin: 0 0 6px;

}

.veh-info-rows {

  display: grid;

  gap: 4px;

  margin-bottom: 8px;

  font-size: 13px;

  line-height: 1.45;

}

.veh-info-rows > div {

  display: flex;

  justify-content: space-between;

  align-items: baseline;

  gap: 12px;

}

.veh-info-rows b {

  font-family: var(--mono), ui-monospace, monospace;

  font-weight: 700;

  color: #222;

  text-align: right;

}

.card-wide {

  grid-column: 1 / -1;

  background: #2f3238;

  border-color: #444;

  color: #eee;

}

.card-wide h4 {

  color: #fff;

}

.compass-row {

  display: grid;

  grid-template-columns: repeat(4, 1fr);

  gap: 8px;

  background: #fff;

  border-radius: 8px;

  padding: 10px 8px 8px;

  color: #222;

}

.comp-col {

  text-align: center;

  display: flex;

  flex-direction: column;

  align-items: center;

  gap: 4px;

}

.comp-name {

  font-size: 13px;

  color: #333;

}

.comp-st {

  font-size: 12px;

  color: #888;

  min-height: 16px;

}

.comp-st.ok {

  color: #1e88e5;

  font-weight: 600;

}

.comp-st.off {

  color: #9e9e9e;

}

.comp-dial {

  display: block;

}

.comp-foot {

  font-size: 12px;

  color: #333;

  min-height: 16px;

}

.comp-foot.ok {

  color: #1e88e5;

  font-weight: 600;

}

.serial-block {

  display: grid;

  grid-template-columns: 1fr auto;

  grid-template-areas:

    "lab lab"

    "pre btn";

  gap: 4px 8px;

  margin: 6px 0;

  align-items: start;

}

.serial-label {

  grid-area: lab;

  font-size: 12px;

  color: #666;

}

.serial-pre {

  grid-area: pre;

  margin: 0;

  padding: 6px 8px;

  background: #f0f0f0;

  border: 1px solid #ddd;

  border-radius: 4px;

  font-family: var(--mono);

  font-size: 13px;

  line-height: 1.35;

  white-space: nowrap;

  overflow-x: auto;

  min-width: 120px;

}

.serial-copy {

  grid-area: btn;

  align-self: center;

  border: 1px solid #bbb;

  background: #fff;

  border-radius: 4px;

  padding: 4px 8px;

  cursor: pointer;

  font-size: 12px;

}

.serial-copy:hover {

  background: #e8f0fe;

}

.mini-log {

  max-height: 120px;

  overflow: auto;

  font-size: 12px;

  font-family: var(--mono);

}



.uav-marker {

  background: transparent !important;

  border: none !important;

}

.uav-tri {

  width: 0;

  height: 0;

  border-left: 9px solid transparent;

  border-right: 9px solid transparent;

  border-bottom: 22px solid #e74c3c;

  filter: drop-shadow(0 1px 2px #000);

  transform-origin: 50% 70%;

}



@media (max-width: 1100px) {

  .video-stack {

    display: none;

  }

  .detail-grid {

    grid-template-columns: 1fr;

  }

}

.drop-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  justify-content: center;
  margin: 16px 0 8px;
}
.drop-link {
  border: 1px solid var(--brand, #e08324);
  background: var(--brand, #e08324);
  color: #111;
  font-weight: 700;
  border-radius: 8px;
  padding: 10px 16px;
  cursor: pointer;
  font-size: 14px;
  text-decoration: none;
  font-family: inherit;
}
.drop-link.primary { box-shadow: 0 4px 14px rgba(224,131,36,.35); }
.drop-link:not(.primary) {
  background: transparent;
  color: var(--brand, #e08324);
}
.drop-mask .hint a { color: #ccc; }

.load-progress {
  position: absolute;
  inset: 0;
  z-index: 80;
  display: grid;
  place-items: center;
  background: rgba(8, 8, 10, 0.72);
  pointer-events: auto;
}
.load-progress[hidden] {
  display: none !important;
}
.load-progress-card {
  width: min(420px, 88vw);
  background: rgba(18, 18, 20, 0.96);
  border: 1px solid rgba(224, 131, 36, 0.45);
  border-radius: 12px;
  padding: 18px 20px 16px;
  box-shadow: 0 12px 40px rgba(0, 0, 0, 0.45);
}
.load-progress-title {
  font-size: 15px;
  font-weight: 700;
  color: #f0f0f0;
  margin-bottom: 12px;
  word-break: break-all;
}
.load-progress-bar {
  height: 10px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.08);
  overflow: hidden;
}
.load-progress-bar i {
  display: block;
  height: 100%;
  width: 0%;
  border-radius: inherit;
  background: linear-gradient(90deg, #b8681a, #e08324);
  font-style: normal;
  transition: width 0.12s linear;
}
.load-progress-bar i.indeterminate {
  width: 40% !important;
  animation: loadPulse 1.1s ease-in-out infinite;
}
@keyframes loadPulse {
  0% { transform: translateX(-30%); }
  100% { transform: translateX(180%); }
}
.load-progress-meta {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  margin-top: 10px;
  font-size: 12px;
  color: #aaa;
  font-family: var(--mono, Consolas, monospace);
}
.load-progress-meta #loadProgressPct {
  color: var(--brand, #e08324);
  font-weight: 700;
}

