+ {/* 품목 + 목표가 — 구매 담당자가 위임한 기준이 무엇인지 먼저 보여준다. */}
+
+
+
{ITEM.name}
+
{ITEM.spec}
+
+
+
+
+ {/* 현재 제안가 + 진행 막대. 파랑에서 민트로 차오르며 양쪽이 만나는 지점을 그린다. */}
+
+
+ 현재 제안가
+
+ {won(current)}
+ 원
+
+
+
+
+
+
+
+ {/* 대화. 높이를 고정해 줄이 늘어도 레이아웃이 튀지 않는다. */}
+
+ {LINES.slice(0, shown).map((line, i) => (
+
+
+ {line.side === "buyer" ? "구매 담당자" : "협력사"}
+
+
+ {line.text}
+
+
+ ))}
+
+
+ {/* 낙찰 카드. 자리를 항상 차지하게 두고 내용만 켜고 끈다 — 나타날 때 아래 요소가
+ 밀리면 페이지 전체가 주기적으로 흔들린다. */}
+
+ {settled && (
+
+
+
+
+ {/* 금액은 줄바꿈을 막는다. 카드 높이가 74px 로 고정이라(등장할 때 아래가 밀리지
+ 않게 하려고) 한 줄이라도 접히면 잘린다. 좁으면 접히는 게 아니라 붙어야 한다. */}
+
+
협상 타결 → 낙찰
+
{won(FINAL)}원
+
+
+
절감액
+
+ {won(SAVED)}원 ▼{RATE.toFixed(1)}%
+
+
+
+ )}
+
+