/* 与飞同行 · 上架准备页（只做这一页的样式，不引别处的规则） */
html,
body {
  height: 100%;
  margin: 0;
  overflow: hidden;
  background: #f4f6f3;
  color: #222b26;
  font-family: "SF Pro Text", "PingFang SC", "Microsoft YaHei UI", system-ui, -apple-system, "Segoe UI", sans-serif;
  font-size: 12.5px;
  -webkit-font-smoothing: antialiased;
}

* { box-sizing: border-box; }

button, input, select, textarea { font: inherit; letter-spacing: 0; }
button { cursor: pointer; }
[hidden] { display: none !important; }

/* 页面外壳：<body class="listing-prep-page">（发布门禁会检查这条规则在不在） */
.listing-prep-page {
  width: 100%;
  height: 100%;
  min-height: 0;
  overflow: hidden;
  background: #f4f6f3;
}

.prep-shell {
  width: 100%;
  height: 100%;
  min-height: 0;
  padding: 10px;
  display: flex;
  flex-direction: column;
  gap: 9px;
}

.prep-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
  padding: 8px 10px;
  background: #fff;
  border: 1px solid #e4eae5;
  border-radius: 10px;
  box-shadow: 0 1px 2px rgba(24, 45, 33, .04);
}
.prep-toolbar-main,
.prep-toolbar-side {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
  flex-wrap: wrap;
}
.prep-toolbar-side { justify-content: flex-end; }
.prep-kicker { color: #77857c; font-size: 11.5px; white-space: nowrap; }

.prep-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 28px;
  padding: 0 10px;
  border-radius: 7px;
  border: 1px solid #dfe6e0;
  background: #fbfcfb;
  color: #2c3a32;
  font-size: 12px;
  line-height: 1;
  white-space: nowrap;
  transition: background .15s ease, border-color .15s ease, transform .06s ease;
}
.prep-btn:hover { background: #f2f5f2; }
.prep-btn:active { transform: translateY(1px); }
.prep-btn:disabled { opacity: .55; cursor: default; transform: none; }
.prep-btn.primary {
  background: #2f6b4f;
  border-color: #2f6b4f;
  color: #fff;
  font-weight: 600;
}
.prep-btn.primary:hover { background: #2a6046; }

.prep-file {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 28px;
  padding: 0 10px;
  border-radius: 7px;
  border: 1px solid #dfe6e0;
  background: #fbfcfb;
  color: #2c3a32;
  font-size: 12px;
  white-space: nowrap;
}
.prep-file:hover { background: #f2f5f2; }
.prep-file input { display: none; }

.prep-select {
  height: 28px;
  padding: 0 8px;
  border-radius: 7px;
  border: 1px solid #dfe6e0;
  background: #fbfcfb;
  color: #2c3a32;
  max-width: 270px;
}

.prep-status { color: #5d6b63; font-size: 12px; }
.prep-status.busy { color: #a06a12; }
.prep-status.ok { color: #1f6b41; }
.prep-status.bad { color: #a8412d; }

.prep-helper {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 9px;
  border-radius: 999px;
  background: #fff;
  border: 1px solid #e2e8e3;
  color: #4a5850;
  font-size: 11.5px;
  white-space: nowrap;
}
.prep-dot { width: 7px; height: 7px; border-radius: 50%; background: #c9d2cb; }
.prep-helper.ok .prep-dot { background: #2f9e5f; box-shadow: 0 0 0 3px rgba(47, 158, 95, .14); }
.prep-helper.bad .prep-dot { background: #d0604a; box-shadow: 0 0 0 3px rgba(208, 96, 74, .14); }
.prep-helper.ok { color: #1f6b41; }
.prep-helper.bad { color: #a8412d; }

.prep-panel {
  background: #fff;
  border: 1px solid #e4eae5;
  border-radius: 10px;
  padding: 10px 12px 12px;
  box-shadow: 0 1px 2px rgba(24, 45, 33, .04);
  min-width: 0;
}
.prep-panel-fill { display: flex; flex-direction: column; min-height: 0; }
.prep-panel-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 8px;
}
.prep-panel-title { display: flex; align-items: center; min-width: 0; }
.prep-panel-head h2 { margin: 0; font-size: 13px; font-weight: 650; }
.prep-panel-tools { display: flex; align-items: center; justify-content: flex-end; gap: 8px; min-width: 0; flex-wrap: wrap; }
.prep-panel-note { color: #77857c; font-size: 11.5px; }
.prep-panel-actions { display: flex; align-items: center; gap: 10px; margin-top: 10px; flex-wrap: wrap; }

.prep-offline h2 { margin: 0 0 8px; font-size: 14px; }
.prep-offline p { margin: 4px 0; color: #4a5850; line-height: 1.6; }
.prep-path {
  display: inline-block;
  padding: 4px 8px;
  border-radius: 7px;
  background: #f4f7f4;
  border: 1px dashed #cfdbd2;
  font-family: "SFMono-Regular", Consolas, monospace;
  font-size: 12px;
}
.prep-offline .prep-btn { margin-top: 8px; }

.prep-hint { color: #5d6b63; padding: 9px 12px; }
.prep-hint p { margin: 0; line-height: 1.55; }
.prep-hint.good { background: #f2f9f4; border-color: #cfe8d7; color: #1f6b41; }
.prep-hint.bad { background: #fdf5f3; border-color: #f0d6cf; color: #a8412d; }

.prep-columns {
  flex: 1 1 auto;
  min-height: 0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(330px, 1fr));
  gap: 9px;
  align-items: stretch;
}
.prep-col {
  min-width: 0;
  min-height: 0;
  overflow: auto;
  display: flex;
  flex-direction: column;
  gap: 9px;
  padding-right: 2px;
}
.prep-col[hidden] { display: none !important; }

.prep-file-list { display: flex; flex-direction: column; gap: 6px; }
.prep-file-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 7px 8px;
  border: 1px solid #e9eee9;
  border-radius: 7px;
  background: #fbfcfb;
}
.prep-file-name { min-width: 0; font-weight: 500; color: #26332c; word-break: break-all; font-size: 12px; }
.prep-file-meta { color: #869389; font-size: 11px; margin-left: 6px; white-space: nowrap; }
.prep-file-actions { display: flex; gap: 6px; flex: none; }
.prep-link {
  border: none;
  background: none;
  color: #2f6b4f;
  padding: 0;
  text-decoration: underline;
  text-underline-offset: 3px;
  font-size: 12px;
}

.prep-table-wrap { overflow-x: auto; }
.prep-table { width: 100%; border-collapse: collapse; font-size: 12px; }
.prep-table th, .prep-table td {
  text-align: left;
  padding: 6px 8px;
  border-bottom: 1px solid #eef2ee;
  vertical-align: top;
}
.prep-table th { color: #77857c; font-weight: 500; white-space: nowrap; }
.prep-table td.mono { font-family: "SFMono-Regular", Consolas, monospace; }
.prep-table tr:last-child td { border-bottom: none; }
.prep-table input, .prep-table select {
  height: 28px;
  border-radius: 7px;
  border: 1px solid #dfe6e0;
  background: #fff;
  padding: 0 7px;
  width: 100%;
  min-width: 112px;
}

.prep-log {
  margin: 0;
  max-height: none;
  overflow: visible;
  padding: 8px 9px;
  border-radius: 7px;
  background: #f7f9f7;
  border: 1px solid #e9eee9;
  font-family: "SFMono-Regular", Consolas, monospace;
  font-size: 11.5px;
  line-height: 1.55;
  white-space: pre-wrap;
  word-break: break-all;
}

.prep-pending-tip { margin: 0 0 8px; line-height: 1.5; }
.prep-pending-tip strong { color: #2c3a32; font-weight: 650; }

/* 类目行上的「放弃 / 取消放弃」 */
.prep-btn.prep-ignore {
  height: 25px;
  padding: 0 8px;
  font-size: 11.5px;
  white-space: nowrap;
}
.prep-table tr.is-ignored td { background: #f7f8f7; color: #869389; }
.prep-table tr.is-ignored td.mono { text-decoration: line-through; }
.prep-table tr.is-ignored .prep-btn.prep-ignore { background: #fdf5f3; border-color: #f0d6cf; color: #a8412d; }

/* 问题报告：默认折起来，不占地方 */
.prep-report-panel { padding: 10px 12px; }
.prep-report > summary {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 8px;
  width: 100%;
  padding: 2px 0;
  cursor: pointer;
  list-style: none;
}
.prep-report > summary::-webkit-details-marker { display: none; }
.prep-report > summary::before { content: "▸ "; color: #869389; }
.prep-report[open] > summary::before { content: "▾ "; }
.prep-report[open] > summary { margin-bottom: 8px; }
.prep-report-title { font-size: 13px; font-weight: 650; color: #26332c; }

@media (max-width: 760px) {
  html, body { overflow: auto; }
  .listing-prep-page { height: auto; min-height: 100%; overflow: visible; }
  .prep-shell { height: auto; min-height: 100%; }
  .prep-columns { grid-template-columns: 1fr; }
  .prep-col { overflow: visible; }
}
/* 2026-09-30（第五十批）：本轮总览 + 上传队列 + 模板体检台账 + 加模板后的自动回归 */
.prep-overview {
  display: flex;
  align-items: stretch;
  gap: 8px;
  flex-wrap: wrap;
}
.prep-stat {
  flex: 1 1 0;
  min-width: 108px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 7px 10px;
  background: #fff;
  border: 1px solid #e4eae5;
  border-radius: 10px;
  box-shadow: 0 1px 2px rgba(24, 45, 33, .04);
}
.prep-stat-label { color: #77857c; font-size: 11px; white-space: nowrap; }
.prep-stat strong { font-size: 15px; font-weight: 650; color: #26332c; line-height: 1.25; }
.prep-stat.is-warn strong { color: #a06a12; }
.prep-stat.is-good strong { color: #1f6b41; }
.prep-stat.is-bad strong { color: #a8412d; }

.prep-queue { display: flex; flex-direction: column; min-height: 0; }
.prep-queue .prep-panel-head { margin-bottom: 6px; }
.prep-queue-tip { margin: 0 0 8px; line-height: 1.55; }
.prep-queue-progress { font-weight: 600; color: #2f6b4f; }
/* 2026-09-30（第五十四批）：店铺输入框 + 一键自动上传的进度块。 */
.prep-store-wrap { display: inline-flex; align-items: center; gap: 6px; }
.prep-store-input {
  height: 28px;
  width: 88px;
  padding: 0 8px;
  border-radius: 7px;
  border: 1px solid #dfe6e0;
  background: #fbfcfb;
  color: #2c3a32;
  font-size: 12px;
}
.prep-store-input:focus { outline: none; border-color: #2f6b4f; background: #fff; }
.prep-auto-status { display: flex; flex-direction: column; gap: 6px; margin: 0 0 8px; }
.prep-auto-status .prep-log { max-height: 30vh; overflow: auto; }
.prep-queue #prepFileList { max-height: 46vh; overflow: auto; padding-right: 2px; }

.prep-file-row.is-uploaded { background: #f2f9f4; border-color: #cfe8d7; }
.prep-file-row.is-uploaded .prep-file-name { color: #5d6b63; }
.prep-file-index {
  flex: none;
  width: 22px;
  color: #869389;
  font-family: "SFMono-Regular", Consolas, monospace;
  font-size: 11px;
  text-align: right;
}
.prep-file-row-main { display: flex; align-items: center; gap: 8px; min-width: 0; flex: 1 1 auto; }

.prep-audit-list { display: flex; flex-direction: column; gap: 6px; }
.prep-audit-line {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 6px 8px;
  border: 1px solid #e9eee9;
  border-radius: 7px;
  background: #fbfcfb;
  font-size: 11.5px;
  color: #4a5850;
}
.prep-audit-line strong { color: #26332c; font-weight: 600; }
.prep-audit-line.is-bad strong { color: #a8412d; }
.prep-audit-line.is-warn strong { color: #a06a12; }
.prep-audit-line.is-good strong { color: #1f6b41; }

.prep-regression-body { display: flex; flex-direction: column; gap: 6px; }
.prep-regression-msg { margin: 0; line-height: 1.55; font-size: 12px; color: #4a5850; }
.prep-regression-list { margin: 0; padding-left: 18px; color: #a8412d; font-size: 11.5px; line-height: 1.6; }
.prep-regression-list.warn { color: #a06a12; }
.prep-regression-meta { display: flex; gap: 8px; flex-wrap: wrap; }
.prep-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 8px;
  border-radius: 999px;
  background: #f4f7f4;
  border: 1px solid #e2e8e3;
  color: #4a5850;
  font-size: 11.5px;
}
.prep-chip.is-good { background: #f2f9f4; border-color: #cfe8d7; color: #1f6b41; }
.prep-chip.is-warn { background: #fdf7ee; border-color: #f0e0c7; color: #a06a12; }
.prep-chip.is-bad { background: #fdf5f3; border-color: #f0d6cf; color: #a8412d; }

@media (max-width: 760px) {
  .prep-overview { flex-wrap: wrap; }
  .prep-stat { min-width: 96px; }
}
/* 2026-10-01（自愈计划第 1 步）：问题收件箱 —— 每天自动巡检，异常躺在这里等处理。 */
.prep-inbox-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.prep-inbox-row {
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 8px 10px;
  align-items: start;
  padding: 8px 10px;
  border: 1px solid rgba(148, 163, 184, .25);
  border-radius: 8px;
  background: rgba(148, 163, 184, .06);
}
.prep-inbox-row.is-fail { border-color: rgba(248, 113, 113, .45); background: rgba(248, 113, 113, .08); }
.prep-inbox-row.is-warn { border-color: rgba(251, 191, 36, .40); background: rgba(251, 191, 36, .07); }
.prep-inbox-row.is-ok { border-color: rgba(52, 211, 153, .35); background: rgba(52, 211, 153, .06); }
.prep-inbox-dot {
  width: 8px; height: 8px; margin-top: 6px; border-radius: 50%;
  background: #34d399; flex: none;
}
.prep-inbox-row.is-fail .prep-inbox-dot { background: #f87171; }
.prep-inbox-row.is-warn .prep-inbox-dot { background: #fbbf24; }
.prep-inbox-main { min-width: 0; }
.prep-inbox-name { font-size: 13px; font-weight: 600; }
.prep-inbox-msg { font-size: 12px; opacity: .82; margin-top: 2px; word-break: break-word; }
.prep-inbox-hint { font-size: 12px; opacity: .62; margin-top: 2px; word-break: break-word; }
.prep-inbox-tools { display: flex; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
.prep-inbox-tools .prep-btn { padding: 3px 9px; font-size: 12px; }
.prep-inbox-empty { font-size: 12px; opacity: .7; padding: 6px 2px; }

/* 2026-10-01（自愈计划第 3 步）：AI 初诊回的那段「原因 / 建议动作 / 需要你做什么」。 */
.prep-inbox-ai {
  margin: 6px 0 0;
  padding: 6px 8px;
  border-radius: 6px;
  background: rgba(37, 99, 235, .06);
  border: 1px solid rgba(37, 99, 235, .18);
  color: inherit;
  font-size: 12px;
  line-height: 1.55;
  white-space: pre-wrap;
  word-break: break-word;
}
/* 2026-10-03（第一百三十四批 · 老板要求）：上架准备页只留「可以上传的 xlsx」。
   其余面板的 DOM 已经在 index.html 里删干净了，这里只把栅格收成单列。 */
#prepColumns { grid-template-columns: minmax(0, 1fr) !important; }

/* 2026-10-03（第一百三十八批·老板要求：「把右上角的『美国站 · Generic · 库存 73 · GTIN 已豁免』
   设计得好一点，越简单越实用越高级越好」）。原来四个信息挤成一行纯文字，看着像提示错误。
   现在收成一枚安静的「默认」小标签 + 几片信息，平时低调，鼠标停上去才用 tooltip 解释。 */
.prep-env {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  height: 22px;
  padding: 0 9px 0 3px;
  border: 1px solid #e6ece7;
  border-radius: 999px;
  background: #f8faf8;
  color: #7b8a80;
  font-size: 11.5px;
  white-space: nowrap;
  cursor: default;
  transition: border-color .15s ease, background .15s ease;
}
.prep-env:hover { border-color: #d5e0d8; background: #f3f8f4; color: #57665c; }
.prep-env-tag {
  display: inline-flex;
  align-items: center;
  height: 16px;
  padding: 0 7px;
  border-radius: 999px;
  background: #eaf1eb;
  color: #4a6b55;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: .2px;
}
.prep-env-item { color: inherit; }
.prep-env-item + .prep-env-item::before { content: "·"; margin-right: 5px; color: #c3cec6; }
/* 2026-10-03（第一百三十九批·B3）：本轮认类目命中率 —— 三枚安静的小片，不抢视线。 */
.prep-hitrate{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:0 0 10px;font-size:12px;color:#6b7280;line-height:1.7}
.prep-hitrate-chip{display:inline-flex;align-items:center;gap:5px;padding:2px 10px;border-radius:999px;background:#f4f5f7;color:#5b6270;border:1px solid #e6e8ec}
.prep-hitrate-chip b{font-weight:600;color:#1f2430}
.prep-hitrate-chip.good{background:#eefaf3;border-color:#d3f0e0;color:#0f7a4d}
.prep-hitrate-chip.good b{color:#0f7a4d}
.prep-hitrate-chip.warn{background:#fff9ec;border-color:#f6e2b3;color:#9a6412}
.prep-hitrate-chip.warn b{color:#9a6412}

/* ==========================================================================
   2026-10-04（第一百七十四批·老板要求）
   老板原话：「到了生成上架表那一步的时候，直接整个界面都是几个马上要上传的文件和
   『一键导出全部 / 张佳佳 / 一键自动上传 + 自动修错』这三个功能按钮，其他都不需要展示。」

   做法：上架准备页 6.0 —— 只有一列居中的文件清单 + 一行居中的三颗按钮。
   保留在 DOM、只是不上屏（全自动流水线仍按 id 读 / 点）：
     生成上架表（#prepGenerateBtn）、状态字（#prepStatus）、清空已上传、打开后台上传页、
     面板标题 / 本轮说明 / 队列进度 / 命中率 / 运行日志。
   删掉这一段即回退到 v208 的版式。
   ========================================================================== */
.listing-prep-page .prep-shell { align-items: center; padding: 12px 16px 14px; gap: 10px; }
.listing-prep-page .prep-shell > * { width: 100%; max-width: 880px; }
.listing-prep-page .prep-columns { flex: 1 1 auto; }
.listing-prep-page .prep-toolbar-auto { display: none !important; }
.listing-prep-page #prepResultPanel > .prep-panel-head { display: none !important; }
.listing-prep-page #prepResultPanel > .prep-queue-tip { display: none !important; }
.listing-prep-page #prepResultPanel > .prep-hitrate { display: none !important; }
.listing-prep-page #prepAutoLog { display: none !important; }
.listing-prep-page #prepResultPanel { padding: 12px 14px 14px; }
.listing-prep-page .prep-queue #prepFileList { max-height: 56vh; }
.listing-prep-page .prep-file-row { padding: 8px 12px; border-radius: 9px; }
.listing-prep-page .prep-file-name { font-weight: 550; }

/* 三颗按钮：居中一行，主按钮深绿、其余安静 */
.listing-prep-page .prep-launch {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px solid #eef2ee;
}
.listing-prep-page .prep-launch .prep-btn { height: 32px; padding: 0 16px; border-radius: 9px; font-size: 12.5px; }
.listing-prep-page .prep-launch .prep-store-input { height: 32px; width: 104px; border-radius: 9px; }

/* 自动上传的一行进度：安静地贴在清单下面 */
.listing-prep-page .prep-auto-status { margin: 8px 0 0; align-items: center; text-align: center; }
.listing-prep-page .prep-auto-status .prep-panel-note { color: #5d6b63; font-size: 12px; }
