/* ================= 全局 ================= */
* { box-sizing: border-box; }

html, body {
  margin: 0;
  height: 100%;
  overflow: hidden;
  background: #0d0f13;
  color: #d8dce4;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
               "Microsoft YaHei", Roboto, sans-serif;
  font-size: 13px;
  -webkit-font-smoothing: antialiased;
}

#app {
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;   /* 防止 iframe 溢出产生滚动条 */
}

#viewport {
  display: block;
  width: 100%;
  height: 100%;
  cursor: grab;
  touch-action: none;
  position: relative;   /* 建立层级 */
  z-index: 1;           /* 在 iframe 之下 */
}
#viewport.dragging { cursor: grabbing; }

/* ================= 对话页 iframe ================= */
#dialog-frame {
  position: absolute;
  top: 0;
  right: 0;
  left: auto;              /* 不再从左侧开始 */
  width: 380px;            /* 侧栏宽度，可调 */
  height: 100%;
  border: none;
  z-index: 2;
  background: #0d0f13;
  display: none;
}

#dialog-frame.visible {
  display: block;
}

/* ================= HUD ================= */
#hud {
  position: absolute;
  inset: 0;
  z-index: 3;               /* 必须高于 #dialog-frame */
  pointer-events: none;
  user-select: none;
}

#mode-bar {
  position: absolute;
  top: 14px;
  left: 14px;
  display: flex;
  align-items: center;
  gap: 8px;
  pointer-events: auto;
}

.mode-btn {
  padding: 7px 16px;
  border-radius: 8px;
  border: 1px solid #2c3140;
  background: rgba(24, 27, 34, 0.9);
  color: #9aa3b2;
  font-size: 13px;
  cursor: pointer;
  transition: all 0.15s;
  backdrop-filter: blur(8px);
}
.mode-btn:hover { border-color: #3d4557; color: #cfd6e2; }
.mode-btn.active {
  background: linear-gradient(180deg, #3b82f6, #2563eb);
  border-color: #60a5fa;
  color: #fff;
  box-shadow: 0 2px 12px rgba(59, 130, 246, 0.35);
}

#fps, #status {
  padding: 5px 10px;
  border-radius: 6px;
  background: rgba(24, 27, 34, 0.85);
  border: 1px solid #232833;
  color: #6f7a8d;
  font-size: 12px;
  font-variant-numeric: tabular-nums;
  backdrop-filter: blur(8px);
}
#status.error { color: #f87171; border-color: #7f1d1d; }

/* ================= 面板 ================= */
.panel {
  position: absolute;
  top: 60px;
  left: 14px;
  width: 330px;
  max-height: calc(100% - 80px);
  overflow-y: auto;
  overflow-x: hidden;
  padding: 12px;
  border-radius: 12px;
  border: 1px solid #232833;
  background: rgba(18, 20, 26, 0.93);
  backdrop-filter: blur(12px);
  pointer-events: auto;
  box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
  scrollbar-width: thin;
  scrollbar-color: #333a48 transparent;
}
.panel::-webkit-scrollbar { width: 8px; }
.panel::-webkit-scrollbar-thumb { background: #2b3140; border-radius: 4px; }
.panel::-webkit-scrollbar-track { background: transparent; }

.panel.hidden { display: none; }

.panel-section + .panel-section {
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px solid #232833;
}

#panel-manual {
  width: 340px;
  padding: 0;
  max-height: calc(100% - 80px);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

/* 修复：ID 优先级高于 .panel.hidden，需要显式覆盖 */
#panel-manual.hidden,
#panel-auto.hidden {
  display: none;
}

/* --- Tab 切换栏 --- */
.tab-bar {
  display: flex;
  padding: 6px 6px 0;
  gap: 4px;
  position: relative;
  border-bottom: 1px solid #20252f;
  background: rgba(15, 17, 22, 0.6);
}

.tab-btn {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  padding: 9px 10px;
  border: none;
  background: transparent;
  color: #6f7a8d;
  font-size: 12px;
  font-weight: 500;
  cursor: pointer;
  border-radius: 7px 7px 0 0;
  position: relative;
  transition: color 0.15s, background 0.15s;
}

.tab-btn:hover {
  color: #b6bfcd;
  background: rgba(255, 255, 255, 0.03);
}

.tab-btn.active {
  color: #e6ebf2;
  background: rgba(59, 130, 246, 0.10);
}

.tab-btn.active::after {
  content: '';
  position: absolute;
  left: 12px;
  right: 12px;
  bottom: -1px;
  height: 2px;
  border-radius: 1px;
  background: #3b82f6;
  box-shadow: 0 0 8px rgba(59, 130, 246, 0.6);
}

.tab-icon {
  font-size: 12px;
  opacity: 0.7;
  transform: translateY(-0.5px);
}
.tab-btn.active .tab-icon { opacity: 1; color: #60a5fa; }

/* Tab 内容区：占据剩余空间，自身滚动 */
.tab-body {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 10px 12px 12px;
  scrollbar-width: thin;
  scrollbar-color: #333a48 transparent;
}
.tab-body::-webkit-scrollbar { width: 8px; }
.tab-body::-webkit-scrollbar-thumb { background: #2b3140; border-radius: 4px; }
.tab-body::-webkit-scrollbar-track { background: transparent; }

.tab-pane { display: none; }
.tab-pane.active { display: block; animation: fadeIn 0.18s ease-out; }

@keyframes fadeIn {
  from { opacity: 0; transform: translateY(2px); }
  to   { opacity: 1; transform: translateY(0); }
}

.pane-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 8px;
}

.pane-hint {
  font-size: 10px;
  color: #5a6473;
  letter-spacing: 0.2px;
}

/* ================= 表情滑块（4 列：序号 / 名字 / 滑块 / 数值） ============ */
.slider-list { display: flex; flex-direction: column; gap: 1px; }

.slider-row {
  display: grid;
  grid-template-columns: 26px 72px 1fr 40px;
  align-items: center;
  gap: 6px;
  padding: 2px 0;
  border-radius: 4px;
  transition: background 0.1s;
}
.slider-row:hover { background: rgba(255, 255, 255, 0.03); }

.slider-num {
  font-size: 10px;
  color: #4a5464;
  font-variant-numeric: tabular-nums;
  text-align: right;
  letter-spacing: 0.3px;
}
.slider-row:hover .slider-num { color: #6f7a8d; }

.slider-name {
  font-size: 11px;
  color: #9aa3b2;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.slider-value {
  font-size: 10px;
  color: #6f7a8d;
  text-align: right;
  font-variant-numeric: tabular-nums;
}

/* 关节行的轴标签样式 */
.slider-label {
  font-size: 10px;
  color: #4a5464;
  font-variant-numeric: tabular-nums;
  text-align: right;
  letter-spacing: 0.3px;
}

/* 关节行只有 3 个元素：轴标签 / 滑块 / 数值 */
.joint-body .slider-row {
  grid-template-columns: 26px 1fr 40px;
}

/* ================= 分组小标题 ================= */
.slider-group-title {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 12px 0 5px;
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: #5a6473;
}
.slider-group-title:first-child { margin-top: 0; }
.slider-group-title::after {
  content: '';
  flex: 1;
  height: 1px;
  background: linear-gradient(to right, #2a3040, transparent);
}

input[type="range"] {
  -webkit-appearance: none;
  appearance: none;
  width: 100%;
  height: 16px;
  background: transparent;
  cursor: pointer;
  margin: 0;
}
input[type="range"]::-webkit-slider-runnable-track {
  height: 3px;
  border-radius: 2px;
  background: #2b3140;
}
input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 11px;
  height: 11px;
  margin-top: -4px;
  border-radius: 50%;
  background: #4b8ef7;
  border: none;
  transition: transform 0.1s;
}
input[type="range"]::-webkit-slider-thumb:hover { transform: scale(1.25); }
input[type="range"]::-moz-range-track {
  height: 3px; border-radius: 2px; background: #2b3140;
}
input[type="range"]::-moz-range-thumb {
  width: 11px; height: 11px; border-radius: 50%;
  background: #4b8ef7; border: none;
}

/* ================= 关节折叠项 ================= */
details.joint-item {
  border-radius: 6px;
  background: #161a22;
  border: 1px solid #20252f;
  overflow: hidden;
}
details.joint-item[open] { background: #171c25; border-color: #2a3040; }

details.joint-item > summary {
  padding: 5px 9px;
  font-size: 11px;
  color: #7c8798;
  cursor: pointer;
  list-style: none;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
details.joint-item > summary::-webkit-details-marker { display: none; }
details.joint-item > summary::after {
  content: "▸";
  font-size: 9px;
  color: #4a5464;
  transition: transform 0.15s;
}
details.joint-item[open] > summary::after { transform: rotate(90deg); }
details.joint-item > summary:hover { color: #b6bfcd; }

.joint-body { padding: 2px 9px 8px; }

/* ================= 其他 ================= */
.row {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 8px;
}
.row-label { font-size: 11px; color: #6f7a8d; white-space: nowrap; }
.row-value {
  font-size: 11px;
  color: #9aa3b2;
  font-variant-numeric: tabular-nums;
  margin-left: auto;
}
.row input[type="range"] { flex: 1; }

.hint {
  font-size: 11px;
  line-height: 1.7;
  color: #6f7a8d;
}
.hint code {
  background: #1c212b;
  padding: 1px 5px;
  border-radius: 4px;
  color: #7aa7f0;
  font-size: 10px;
}

/* ================= 动作选择器 ================= */
.action-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px;
}

.action-btn {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 9px 10px;
  min-height: 38px;
  border-radius: 8px;
  border: 1px solid #232a36;
  background: #161a22;
  color: #9aa3b2;
  font-size: 12px;
  text-align: left;
  cursor: pointer;
  transition: all 0.15s;
  position: relative;
  overflow: hidden;
}
.action-btn:hover:not(:disabled) {
  border-color: #3d4557;
  color: #cfd6e2;
  background: #1c222c;
  transform: translateY(-1px);
}
.action-btn.active {
  background: linear-gradient(180deg, rgba(59,130,246,0.18), rgba(37,99,235,0.10));
  border-color: #3b82f6;
  color: #e6ebf2;
  box-shadow: 0 0 12px rgba(59, 130, 246, 0.20);
}
.action-btn:disabled {
  opacity: 0.32;
  cursor: not-allowed;
}

.action-btn .icon {
  font-size: 13px;
  opacity: 0.7;
  flex-shrink: 0;
}
.action-btn.active .icon { opacity: 1; color: #60a5fa; }

.action-btn .label {
  flex: 1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.action-btn .badge {
  font-size: 9px;
  padding: 1px 4px;
  border-radius: 3px;
  background: #232a36;
  color: #6f7a8d;
  flex-shrink: 0;
}
.action-btn.active .badge {
  background: rgba(59, 130, 246, 0.45);
  color: #d5e3ff;
}

.current-action {
  font-size: 11px;
  font-weight: 500;
  color: #60a5fa;
}

/* ================= Qt WASM 无界面容器 ================= */
#qt-screen {
  position: fixed;
  top: -10000px;
  left: -10000px;
  width: 1px;
  height: 1px;
  overflow: hidden;
  pointer-events: none;
}