/* ============================================================================
   wb-ui · file-diff（文件改动 diff 卡片）
   1:1 移植自 aicss.dev FileDiff.module.css（fetched 2026-08-13）。
   行三态：ctx / add（绿实线左条 + 弱绿底）/ del（红斜纹左条 + 弱红底）。
   整卡 data-state：running / ok（正常渲染）/ error（头部染 danger）/
   empty（不渲染）。真实数据 diff 文本来自 activity.completed 的
   result_excerpt；解析不出 +/- 行时降级为普通步骤卡（.wbui-fd-plain）。
   零裸色：diff 色板走 --wbui-diff-*（契约 3.D），其余走全局 token。
   ========================================================================== */

.wbui-file-diff {
  border-radius: 12px;              /* 上游原值 */
  background: var(--wbui-surface);
  box-shadow: var(--wbui-diff-shadow);
  padding: 12px 16px 16px;
  overflow: hidden;
  font-family: var(--wbui-mono);
}
.wbui-file-diff[data-state="empty"] { display: none; }

.wbui-fd-head {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: -12px -16px 0;
  padding: 10px 12px 10px 16px;
  background: transparent;
  border-bottom: 0.5px solid var(--wbui-border);
  font-size: 12.5px;
}
.wbui-fd-filewrap { display: inline-flex; align-items: center; gap: 7px; }
.wbui-fd-icon { display: block; width: 15px; height: 15px; color: var(--wbui-ink-2); flex: none; }
.wbui-fd-file { color: var(--wbui-ink); line-height: 1; }
.wbui-file-diff[data-state="error"] .wbui-fd-file { color: var(--wbui-danger); }
.wbui-fd-stat { margin-left: auto; display: inline-flex; align-items: center; gap: 8px; font-size: 12px; line-height: 1; }
.wbui-fd-stat .wbui-fd-add { color: var(--wbui-diff-add); }
.wbui-fd-stat .wbui-fd-del { color: var(--wbui-diff-del); }

.wbui-fd-body {
  position: relative;
  margin: 0 -16px -16px;
  overflow: hidden;
  padding: 4px 0;
  font-size: 12.5px;
  line-height: 20px;
}
/* 行号列右缘的整高分隔线（32px + 32px），压在着色行之上 */
.wbui-fd-body::before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 64px;
  width: 0.5px;
  background: var(--wbui-diff-gutter);
  z-index: 1;
}

.wbui-fd-row {
  position: relative;
  display: grid;
  grid-template-columns: 32px 32px 18px 1fr;
  align-items: stretch;
}
.wbui-fd-row .wbui-fd-ln, .wbui-fd-row .wbui-fd-sign {
  user-select: none;
  color: var(--wbui-ink-2);
  font-size: 11px;
}
.wbui-fd-row .wbui-fd-ln { text-align: right; padding: 0 7px; }
.wbui-fd-row .wbui-fd-sign { text-align: center; }
.wbui-fd-row code { white-space: pre; padding: 0 12px 0 8px; color: var(--wbui-ink-2); }

/* 左缘提示条：add 实线绿，del 红色斜纹 */
.wbui-fd-row.add::before, .wbui-fd-row.del::before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  width: 3px;
}
.wbui-fd-row.add::before { background: var(--wbui-diff-add); }
.wbui-fd-row.del::before {
  background: repeating-linear-gradient(45deg, var(--wbui-diff-del) 0, var(--wbui-diff-del) 1.5px, transparent 1.5px, transparent 3px);
}
.wbui-fd-row.add { background: var(--wbui-diff-add-bg); }
.wbui-fd-row.add .wbui-fd-sign, .wbui-fd-row.add .wbui-fd-ln.new { color: var(--wbui-diff-add); }
.wbui-fd-row.add code { color: var(--wbui-ink); }
.wbui-fd-row.del { background: var(--wbui-diff-del-bg); }
.wbui-fd-row.del .wbui-fd-sign, .wbui-fd-row.del .wbui-fd-ln.old { color: var(--wbui-diff-del); }
.wbui-fd-row.del code { color: var(--wbui-ink); }

/* 降级形态：result_excerpt 解析不出 diff 行 → 普通步骤卡文本 */
.wbui-fd-plain {
  padding: 10px 16px 0;
  font-size: 12.5px;
  line-height: 20px;
  color: var(--wbui-ink-2);
  white-space: pre-wrap;
  word-break: break-word;
}
