# v14:去掉占位回退 + 查清 CARD_CSS 根因 > **小改动,两件事。不要重新设计任何视觉。** --- ## 一、占位字「(未填写一句话说明)」不要显示(用户点名) ### 现状(我已实测,这是事实) ``` src/core/opportunity/opportunity.js:77 oneLiner: String(raw.oneLiner||'').trim().length >= 6 ? ... : '' ← core 层已经正确:过短/为空就当空字符串 src/components/kf-opportunity-card.js:160
${o.oneLiner || '(未填写一句话说明)'}
src/layout/kf-app.js:251${o.oneLiner}
` : ''} ``` 2. **删掉后卡片必须仍然等高**。`/pool` 当前 9 张卡全部 389px, 删掉一行后第 0 张会变矮 → 用 flex 让卡内剩余空间均分(`justify-content` 或 `margin-top:auto`), **不许留一个可见的空洞**(>24px 连续空白判失败)。 3. **不许**改成「暂无描述」「待补充」这类替代文案——用户要的是不显示。 4. `kf-app.js:251` 那处是抽屉里的同款,一并改。 ### 验收 - 脚本量 `/pool` 9 张卡:**含「未填写」字样的元素数 = 0**; - 9 张卡高度差 **≤ 2px**; - 每张卡内最大连续空白 **≤ 24px**; - 有描述的 8 张,描述文本仍在(不能误删)。 --- ## 二、查清 `CARD_CSS` 在 `/pool` 的丢失根因(上一轮没查出) ### 已知事实 - 补 `import { CARD_CSS }` 之前,`CARD_CSS` **没有进** `/pool` 的 `adoptedStyleSheets`; 补之后才出现。现象复现了,但**为什么没进**没查明。 - `/reports`、`/report-type`、`/stages` 三个页面一直是正常的。 ### 要查的问题(按顺序,查到即停) 1. `view-pool.js` 的 `static styles` 数组里到底有什么?是不是某项是 `undefined` 导致后面的项被跳过?(Lit 对 `undefined` 的处理会很安静) 2. `CARD_CSS` 是 `src/pages/report-card.js` 导出的模块级常量。`view-pool.js` 有没有 通过别的路径间接依赖 `report-card.js`(比如 `cardFooter` 的 import), 造成模块循环,从而拿到 `undefined`? 3. `adoptedStyleSheets` 的实际长度,在各页各是多少?把 `/pool` 补 import 前后的数字都打出来。 ### 交付 - 在 `docs/v14-report.md` 写**根因结论**(一句话说清是什么), 附上你查证时跑的命令与输出关键行。 - **如果确实查不出来**,就写「未查明」并列出**已排除的假设**(每条写为什么排除)。 不许写「可能是……」当作结论。 ### 顺带 - 上一轮提到页脚对 `/reports` 有「两处有条件豁免」(左边多一条行内分隔线、纵向内衬归零)。 **确认它们是不是因为 `/pool` 的容器上下文不同才需要的**,如果是,说明白; 如果只是补丁,**不要动**(已达标),只记录下来。 --- ## 三、纪律 - 不改 `src/core/`(`opportunity.js:77` 已是对的)。 - 不动已达标项:圆角、卡片等高、hover、底部留白、筛选栏、工作台两栏、排序按钮。 改前跑 `verify-visual-v12.mjs` + `verify-visual-v13.mjs` 存基线,改后对比**不能退步**。 - 单测 46/46、`check.mjs` OK。 - 新增项要有脚本实测值,不口述。 - 撞 turn 上限就按 一 → 二 顺序落盘。