小改动,两件事。不要重新设计任何视觉。
src/core/opportunity/opportunity.js:77
oneLiner: String(raw.oneLiner||'').trim().length >= 6 ? ... : ''
← core 层已经正确:过短/为空就当空字符串
src/components/kf-opportunity-card.js:160
<p class="one">${o.oneLiner || '(未填写一句话说明)'}</p>
src/layout/kf-app.js:251
<div class="one">${opp.oneLiner || '(未填写一句话说明)'}</div>
← 视图层又用兜底把空值补回来了
线上实测 /pool 9 张卡:第 0 张 oneLiner 为空 → 界面显示「(未填写一句话说明)」;
其余 8 张是 31–47 字真实描述。这行灰字等于把「你没填」印在卡片上给人看。
两处 || '(未填写一句话说明)' 全部删掉,改为:oneLiner 为空时整行不渲染。
Lit 写法示例(不是唯一写法,但必须是「不产出 DOM」而不是「产出空元素」):
${o.oneLiner ? html`<p class="one">${o.oneLiner}</p>` : ''}
删掉后卡片必须仍然等高。/pool 当前 9 张卡全部 389px,
删掉一行后第 0 张会变矮 → 用 flex 让卡内剩余空间均分(justify-content 或 margin-top:auto),
不许留一个可见的空洞(>24px 连续空白判失败)。
不许改成「暂无描述」「待补充」这类替代文案——用户要的是不显示。
kf-app.js:251 那处是抽屉里的同款,一并改。
/pool 9 张卡:含「未填写」字样的元素数 = 0;CARD_CSS 在 /pool 的丢失根因(上一轮没查出)import { CARD_CSS } 之前,CARD_CSS 没有进 /pool 的 adoptedStyleSheets;
补之后才出现。现象复现了,但为什么没进没查明。/reports、/report-type、/stages 三个页面一直是正常的。view-pool.js 的 static styles 数组里到底有什么?是不是某项是 undefined
导致后面的项被跳过?(Lit 对 undefined 的处理会很安静)CARD_CSS 是 src/pages/report-card.js 导出的模块级常量。view-pool.js 有没有
通过别的路径间接依赖 report-card.js(比如 cardFooter 的 import),
造成模块循环,从而拿到 undefined?adoptedStyleSheets 的实际长度,在各页各是多少?把 /pool 补 import 前后的数字都打出来。docs/v14-report.md 写根因结论(一句话说清是什么),
附上你查证时跑的命令与输出关键行。/reports 有「两处有条件豁免」(左边多一条行内分隔线、纵向内衬归零)。
确认它们是不是因为 /pool 的容器上下文不同才需要的,如果是,说明白;
如果只是补丁,不要动(已达标),只记录下来。src/core/(opportunity.js:77 已是对的)。verify-visual-v12.mjs + verify-visual-v13.mjs 存基线,改后对比不能退步。check.mjs OK。