/* ══════════ Harness 对照（static/js/95n-bench.js）══════════
   只用 app.css 的 token，暗色由那边一并换掉。颜色只表示状态：绿 = 交付 / 我们这一方，
   砖 = 没交付，赭 = 注意；别处一律用文字色。评测页的 .ev-card / .ev-h / .ev-err 直接复用。 */
.bn-wrap{display:flex;flex-direction:column;gap:24px;max-width:1180px}
.bn-sec{display:flex;flex-direction:column;gap:12px}

/* 比分：每条泳道一张卡 */
.bn-board{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.bn-bc{padding:14px 16px;display:flex;flex-direction:column;gap:10px;min-width:0}
.bn-score{display:flex;gap:18px;flex-wrap:wrap;font-size:12.5px;color:var(--ink-2)}
.bn-score span{display:flex;align-items:baseline;gap:6px}
.bn-score strong{font-size:24px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
/* the scoreboard table is wider than a phone: it scrolls inside its card, never the page */
.bn-tbl{overflow-x:auto;max-width:100%}
.bn-mini{width:100%;border-collapse:collapse;font-size:12.5px}
.bn-mini th{font-weight:600;color:var(--ink-2);text-align:left;padding:4px 6px;border-bottom:1px solid var(--line)}
.bn-mini td{padding:5px 6px;border-bottom:1px solid var(--line);font-variant-numeric:tabular-nums}
.bn-mini td:first-child{color:var(--ink-3)}

/* 新的一组：一张卡，标签一列 + 内容一列 */
.bn-new{padding:14px 16px 16px}
.bn-row{display:grid;grid-template-columns:56px minmax(0,1fr);gap:10px;align-items:start}
.bn-k{font-size:12.5px;color:var(--ink-3);padding-top:6px}
.bn-chips{display:flex;flex-wrap:wrap;gap:6px}
.bn-chip{padding:5px 11px;border-radius:999px;border:1px solid var(--line);background:var(--surface);
  color:var(--ink-2);font:inherit;font-size:12.5px;cursor:pointer}
.bn-chip:hover{border-color:var(--line-2);color:var(--ink)}
.bn-chip[aria-pressed="true"]{border-color:var(--accent);color:var(--ink);box-shadow:inset 0 0 0 1px var(--accent)}
.bn-brief{display:flex;flex-direction:column;gap:6px}
.bn-brief textarea,.bn-brief input{width:100%}
.bn-quote{margin:0;font-size:12.5px;line-height:1.65;color:var(--ink-2);background:var(--surface-2);
  border-radius:8px;padding:9px 11px;max-height:130px;overflow:auto}
.bn-lanes{display:flex;flex-direction:column;gap:8px}
.bn-oursnote{margin:0;font-size:13px;display:flex;gap:8px;flex-wrap:wrap;align-items:baseline}
.bn-lanepick{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px}
.bn-lanepick label{display:inline-flex;align-items:center;gap:6px;min-width:230px}
.bn-lanepick label span{color:var(--ink-3)}
.bn-lanepick select{width:auto;min-width:120px;height:30px}
.bn-lanepick .bn-coui{display:inline-flex;gap:12px;padding-left:10px;border-left:1px solid var(--line)}
.bn-lanepick .bn-coui label{min-width:0;color:var(--ink-2)}
.bn-chip:disabled{opacity:.5;cursor:not-allowed}
.bn-chipx{color:var(--ink-3);font-variant-numeric:tabular-nums}
.bn-ctl{margin:0;font-variant-numeric:tabular-nums}
.bn-live-list{display:flex;flex-wrap:wrap;gap:6px;flex-basis:100%}
.bn-live-list .pill{margin-left:4px}
.bn-inline{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.bn-inline input{width:84px}
.bn-go{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:14px 0 0 66px}
.bn-live{display:inline-flex;align-items:center;gap:8px}
.bn-dot{width:8px;height:8px;border-radius:50%;background:var(--accent);display:inline-block;flex:none;
  animation:bn-pulse 1.4s ease-in-out infinite}
@keyframes bn-pulse{50%{opacity:.35}}

/* 记录：一行一组 */
.bn-rows{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}
.bn-rowbtn{display:grid;grid-template-columns:92px minmax(120px,200px) minmax(0,1fr) auto;gap:12px;align-items:center;
  padding:10px 14px;background:var(--surface);border:0;border-bottom:1px solid var(--line);text-align:left;
  font:inherit;font-size:13px;color:inherit;cursor:pointer}
.bn-rowbtn:last-child{border-bottom:0}
.bn-rowbtn:hover{background:var(--surface-2)}
/* 行和「在跑 / 排队」是真链接（/bench/<id>） */
.bn-rowbtn,.bn-live-list a{text-decoration:none}
.bn-rowbtn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.bn-when{color:var(--ink-3);font-variant-numeric:tabular-nums}
.bn-task{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bn-lss{display:flex;gap:14px;flex-wrap:wrap;color:var(--ink-2);font-size:12.5px}
.bn-ls b{color:var(--ink);font-weight:600;margin-right:4px}

/* 一组的详情：每条泳道两列 A / B */
.bn-dh{display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap}
.bn-dh>div:first-child{flex:1;min-width:240px}
.bn-title{margin:0 0 4px;font-size:20px;font-weight:600;letter-spacing:-.01em}
.bn-prompt summary{cursor:pointer;font-size:12.5px;color:var(--ink-2)}
.bn-prompt pre{white-space:pre-wrap;font-size:12.5px;line-height:1.6;background:var(--surface-2);border-radius:8px;
  padding:10px 12px;margin:8px 0 0;max-height:220px;overflow:auto}
.bn-sides{display:grid;grid-template-columns:repeat(var(--sides,2),minmax(0,1fr));gap:12px}   /* a lane's sides in one row: 2 or 3 */
.bn-side{padding:14px;display:flex;flex-direction:column;gap:10px;min-width:0;align-items:center}
.bn-sh{display:flex;align-items:center;gap:8px;align-self:stretch}
.bn-sh b{font-size:14px;font-weight:600}
.bn-st{margin-left:auto;font-size:12px;color:var(--ink-3)}
.bn-who{font-size:12px;font-weight:600;padding:2px 8px;border-radius:999px;border:1px solid var(--line-2);color:var(--ink-2)}
.bn-who.ours{border-color:var(--accent);color:var(--accent)}
/* 原型按 360×800（COUI 画布）渲染，缩到 0.8 放进卡里 */
.bn-phone{width:288px;height:640px;border-radius:20px;border:1px solid var(--line-2);overflow:hidden;background:var(--surface-2);
  flex:none;max-width:100%}
.bn-phone iframe{width:360px;height:800px;border:0;transform:scale(.8);transform-origin:0 0;background:#fff}
.bn-wait{display:flex;align-items:center;justify-content:center;gap:8px;font-size:13px;color:var(--ink-3);text-align:center;padding:24px}
.bn-strip{display:flex;gap:6px;overflow-x:auto;max-width:100%;padding-bottom:4px}
.bn-strip a{flex:none;display:block;border:1px solid var(--line);border-radius:6px;overflow:hidden;line-height:0}
.bn-strip img{width:54px;height:120px;object-fit:cover;object-position:top}
.bn-strip a:hover{border-color:var(--ink-3)}
.bn-metrics{display:grid;grid-template-columns:auto minmax(0,1fr);gap:6px 12px;margin:4px 0 0;font-size:12.5px;align-self:stretch}
.bn-find{margin:0;padding-left:16px;display:flex;flex-direction:column;gap:3px}
.bn-bad{color:var(--brick)}
.bn-warn{margin:4px 0 0;font-size:12.5px;color:var(--ochre)}
.bn-void{margin:0;padding:10px 14px;border-radius:var(--r-lg);background:var(--surface-2);font-size:13px;color:var(--ink-2)}
.bn-metrics dt{color:var(--ink-3);white-space:nowrap}
.bn-metrics dd{margin:0;color:var(--ink-2);line-height:1.55;font-variant-numeric:tabular-nums;min-width:0;overflow-wrap:anywhere}
.bn-metrics dd.bad{color:var(--brick)}
.bn-metrics dd.warn{color:var(--ochre)}
.bn-judge{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px 14px;border:1px dashed var(--line-2);border-radius:var(--r-lg)}
.bn-judge .acts{display:flex;gap:6px;flex-wrap:wrap}
.bn-judge input[name="note"]{flex:1;min-width:180px}
.bn-judge [role="status"]{flex-basis:100%;margin:0}
.bn-verdict{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px;padding:10px 14px;
  border-radius:var(--r-lg);background:var(--surface-2)}
.bn-verdict .btn{margin-left:auto}

@media (max-width:1000px){.bn-board{grid-template-columns:1fr}}
@media (max-width:760px){
  .bn-sides{grid-template-columns:1fr}
  .bn-row{grid-template-columns:1fr}
  .bn-k{padding-top:0}
  .bn-go{margin-left:0}
  .bn-rowbtn{grid-template-columns:1fr;gap:4px}
}
.bn-pre{white-space:pre-wrap}
.bn-design a{display:flex;flex-direction:column;align-items:center;gap:4px;text-decoration:none;color:var(--ink-2);font-size:12px;text-align:center}
.bn-design img{width:120px;height:auto;border:1px solid var(--line);border-radius:8px}
.bn-design code{font-size:11px;color:var(--ink-3)}
.bn-fid img{outline:1px dashed var(--line-2)}
