/* ================= 玩法编辑器 ================= */
.ed { position: absolute; inset: 0; display: flex; flex-direction: column; background: #0e0b07; }

.ed-topbar {
  height: 50px; flex: none; display: flex; align-items: center; gap: 14px;
  padding: 0 14px; border-bottom: 1px solid var(--line);
  background: linear-gradient(180deg, #1d1509, #130d06);
}
.ed-logo { font-family: var(--font-title); font-size: 15px; letter-spacing: 3px; color: var(--gold-2); }
.ed-tabs { display: flex; gap: 4px; }
.ed-tab {
  padding: 6px 14px; font-size: 13px; cursor: pointer; border-radius: 4px;
  color: var(--text-dim); border: 1px solid transparent;
}
.ed-tab:hover { color: var(--gold-2); }
.ed-tab.active { color: #2a1b06; background: linear-gradient(180deg, #dcae5a, #a9762f); font-weight: 700; }
.ed-actions { margin-left: auto; display: flex; gap: 8px; align-items: center; }
.ed-dirty { font-size: 11px; color: var(--warn); }

.ed-body { flex: 1; min-height: 0; position: relative; }
.ed-pane { position: absolute; inset: 0; display: none; }
.ed-pane.active { display: flex; }

/* --------- 剧本图 --------- */
.ed-left {
  width: 240px; flex: none; border-right: 1px solid var(--line); display: flex; flex-direction: column;
  background: #120d07;
}
.ed-left-head { padding: 10px; border-bottom: 1px solid var(--line); display: flex; gap: 6px; flex-wrap: wrap; }
.ed-list { flex: 1; overflow: auto; padding: 8px; }
.ed-list-sec { font-size: 11px; letter-spacing: 2px; color: var(--gold); margin: 8px 4px 6px; }
.ed-li {
  padding: 7px 9px; border: 1px solid var(--line); border-radius: 4px; margin-bottom: 5px;
  font-size: 12px; cursor: pointer; background: rgba(255, 255, 255, .02);
  display: flex; align-items: center; gap: 6px;
}
.ed-li:hover { border-color: var(--line-strong); }
.ed-li.active { background: rgba(220, 174, 90, .16); border-color: var(--gold); color: var(--gold-2); }
.ed-li .nm { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ed-li .badge { font-size: 10px; color: var(--text-dim); }
.ed-li.start .nm::before { content: '★ '; color: var(--gold); }

.ed-graph { flex: 1; position: relative; overflow: hidden; background:
  linear-gradient(rgba(255, 255, 255, .025) 1px, transparent 1px) 0 0/26px 26px,
  linear-gradient(90deg, rgba(255, 255, 255, .025) 1px, transparent 1px) 0 0/26px 26px,
  radial-gradient(80% 70% at 40% 20%, #1a1207, #0b0805);
  cursor: grab;
}
.ed-graph.dragging { cursor: grabbing; }
.ed-world { position: absolute; left: 0; top: 0; transform-origin: 0 0; }
.ed-svg { position: absolute; left: 0; top: 0; overflow: visible; pointer-events: none; }
.ed-link { fill: none; stroke: rgba(232, 195, 122, .45); stroke-width: 1.6; marker-end: url(#arrow); }
.ed-link.cond { stroke: rgba(143, 176, 200, .6); stroke-dasharray: 5 4; }
.ed-link.toend { stroke: rgba(224, 112, 95, .6); }
.ed-link.mini { stroke: rgba(120, 200, 130, .7); stroke-dasharray: 2 4; }
.ed-link.sel { stroke: #ffd98a; stroke-width: 2.4; }

.gnode {
  position: absolute; left: 0; top: 0; width: 190px; border-radius: 6px; cursor: grab;
  background: linear-gradient(180deg, #241a0e, #170f07);
  border: 1px solid var(--line); box-shadow: 0 6px 18px rgba(0, 0, 0, .5);
  font-size: 12px; user-select: none; will-change: transform;
}
.gnode.dragging, .gend.dragging { cursor: grabbing; z-index: 20; box-shadow: 0 14px 34px rgba(0, 0, 0, .7); }
/* 拖动期间屏蔽其它元素的命中测试与动画，避免掉帧 */
.ed-graph.node-dragging .gnode:not(.dragging),
.ed-graph.node-dragging .gend:not(.dragging) { pointer-events: none; }
.gnode.selected { border-color: var(--gold); box-shadow: 0 0 0 1px var(--gold), 0 8px 22px rgba(0, 0, 0, .6); }
.gnode .gn-head {
  padding: 6px 8px; border-bottom: 1px solid var(--line); display: flex; align-items: center; gap: 6px;
  font-family: var(--font-title); font-size: 13px; color: var(--gold-2);
}
.gnode .gn-head .st { font-size: 10px; color: var(--gold); }
.gnode .gn-thumb { height: 74px; background: #000 center/cover no-repeat; border-bottom: 1px solid var(--line); }
.gnode .gn-thumb.empty { display: grid; place-items: center; color: #5b4c33; font-size: 11px; }
.gnode .gn-choices { padding: 5px 6px; display: flex; flex-direction: column; gap: 3px; }
.gnode .gn-c {
  display: flex; align-items: center; gap: 5px; font-size: 11px; color: var(--text-dim);
  padding: 2px 4px; border-radius: 3px; background: rgba(255, 255, 255, .03);
}
.gnode .gn-c b { color: var(--text); font-weight: 400; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gnode .gn-c .arw { color: var(--gold); }
.gnode .gn-c .gn-hidden { color: #b48aff; margin-right: 2px; }
.gnode .gn-empty { padding: 6px; font-size: 11px; color: #6b5a3d; }

.gend {
  position: absolute; left: 0; top: 0; width: 150px; border-radius: 6px; cursor: grab; user-select: none;
  background: linear-gradient(180deg, #2a1410, #170a07);
  border: 1px solid rgba(224, 112, 95, .5); padding: 8px;
  box-shadow: 0 6px 18px rgba(0, 0, 0, .5); font-size: 12px; will-change: transform;
}
.gend.good { border-color: rgba(232, 195, 122, .7); background: linear-gradient(180deg, #2c2110, #170f05); }
.gend.selected { box-shadow: 0 0 0 1px var(--gold), 0 8px 22px rgba(0, 0, 0, .6); }
.gend .ge-code { font-size: 10px; color: var(--text-dim); letter-spacing: 1px; }
.gend .ge-name { font-family: var(--font-title); font-size: 13px; color: #f3d9b0; margin-top: 2px; }

.ed-graph-tools {
  position: absolute; left: 12px; bottom: 12px; display: flex; gap: 6px; z-index: 3;
}
.ed-graph-hint {
  position: absolute; right: 12px; bottom: 12px; font-size: 11px; color: #6b5a3d; z-index: 3;
}

/* --------- 右侧检查器 --------- */
.ed-right {
  width: 400px; flex: none; border-left: 1px solid var(--line); overflow: auto; padding: 14px;
  background: #120d07;
}
.ed-right h3 {
  font-family: var(--font-title); font-size: 15px; color: var(--gold-2); margin: 0 0 10px;
  letter-spacing: 2px; display: flex; align-items: center; gap: 8px;
}
.ed-right h3 .id { font-family: var(--font-body); font-size: 10px; color: #6b5a3d; letter-spacing: 0; }
.ed-empty { padding: 40px 10px; text-align: center; color: #6b5a3d; font-size: 12px; }

.card {
  border: 1px solid var(--line); border-radius: 6px; padding: 10px; margin-bottom: 10px;
  background: rgba(255, 255, 255, .02);
}
.card-head {
  display: flex; align-items: center; gap: 6px; margin-bottom: 8px;
  font-size: 12px; color: var(--gold-2);
}
.card-head .grow { flex: 1; }
.sec-title {
  font-size: 11px; letter-spacing: 2px; color: var(--gold); margin: 16px 0 8px;
  padding-bottom: 4px; border-bottom: 1px solid var(--line);
  display: flex; align-items: center; justify-content: space-between;
}
.mini-row { display: flex; gap: 5px; align-items: center; margin-bottom: 5px; }
.mini-row select, .mini-row input { font-size: 12px; padding: 4px 6px; }
.mini-row .del { color: #c98a7c; cursor: pointer; font-size: 13px; padding: 0 3px; }
.mini-row .del:hover { color: #f0a493; }
.mini-row .grow { flex: 1; min-width: 0; }

/* 紧凑图标按钮（视频列表刷新） */
.icon-btn-sm {
  flex: none; width: 28px; height: 28px; border-radius: 4px; cursor: pointer;
  border: 1px solid var(--line-strong); background: rgba(255, 255, 255, .04);
  color: var(--gold-2); font-size: 14px; line-height: 1; display: grid; place-items: center;
  transition: .15s;
}
.icon-btn-sm:hover { background: rgba(220, 174, 90, .18); border-color: var(--gold); transform: rotate(90deg); }
.icon-btn-sm:active { transform: rotate(180deg); }
.w70 { width: 70px; flex: none; }
.w90 { width: 90px; flex: none; }
.w110 { width: 110px; flex: none; }

.vid-preview { width: 100%; border-radius: 4px; border: 1px solid var(--line); background: #000; margin-bottom: 6px; }
.thumb-preview { width: 100%; height: 120px; object-fit: cover; border-radius: 4px; border: 1px solid var(--line); background: #000; }

/* --------- 表格类页签 --------- */
.ed-table-pane { flex: 1; overflow: auto; padding: 18px 22px; }
.ed-table-pane h2 { font-family: var(--font-title); font-size: 18px; color: var(--gold-2); letter-spacing: 3px; margin: 0 0 4px; }
.ed-table-pane .desc { font-size: 12px; color: var(--text-dim); margin-bottom: 14px; line-height: 1.7; }
table.ed-table { width: 100%; border-collapse: collapse; font-size: 12px; }
table.ed-table th, table.ed-table td { border: 1px solid var(--line); padding: 6px 8px; text-align: left; }
table.ed-table th { background: rgba(255, 255, 255, .04); color: var(--gold); font-weight: 500; font-size: 11px; letter-spacing: 1px; }
table.ed-table input, table.ed-table select { padding: 4px 6px; font-size: 12px; }

.issue { font-size: 12px; padding: 7px 10px; border-radius: 4px; margin-bottom: 6px; border: 1px solid var(--line); }
.issue.error { border-color: rgba(224, 112, 95, .6); color: #f0b3a8; background: rgba(224, 112, 95, .08); }
.issue.warn { border-color: rgba(224, 182, 78, .5); color: #f0dfae; background: rgba(224, 182, 78, .07); }
.issue-ok { color: var(--ok); font-size: 13px; }

.ed-two { display: grid; grid-template-columns: 300px 1fr; gap: 18px; }
.ending-form { border: 1px solid var(--line); border-radius: 6px; padding: 14px; background: rgba(255, 255, 255, .02); }
