v85: 首页日程刻度按结束时间定范围 / Markdown 标题真正有层级

用户报了两处(网页版):

① 「今天的日程,有一个日程到下午五点半,首页日程刻度只有九点。」
   真根因:掐头去尾只按 `time`(开始时间)算范围,`end_time` 压根没参与
   ⇒ 08:30-17:30 被当成"8 点半结束",endH = 8 + 2 = 10,
     刻度只画到 09:00;色块高 540 分钟硬塞进 3 小时格子,被 min(96, …) 夹住糊成一片。
   修法:收集「开始 + 结束」两组分钟数,endH 由 max(结束) 向上取整到小时;
   保留"区间必须包含此刻"的原逻辑与下限保护。

② 「日记 markdown 代码都没解析,## 后面的是标题,现在显示的还是和正文一样。」
   真根因:渲染一直是对的(`## x` → `<h4 class="md-h">`),问题全在视觉 ——
   `h4.md-h` 是 15px,而阅读态正文 `.note-read-block` 也是 15px,字号完全同号;
   标题只有 font-weight:500,肉眼看不出层级。
   修法:h3/h4/h5/h6 分别 18/17/15.5/14.5px,父级 .md-h 字重 600、行高 1.45,
   h6 用 muted 色;`:first-child` 去掉多余的顶部外边距。

反向验证:
  _fb_v85_agenda_range.py    13/0(钉死 08:00 做 A/B + 真实 now 复核 5 条)
  _fb_v85_md_heading.py       9/0(真实 Markdown::render + 真实 CSS + 计算值)
  _fb_v85_static_falsify.py   7/0(部署静态断言 6 处注入各自都能变红)

线上真值复核(family.yangyq.net,真实库 #1853 工程管理硕士开题 08:30~17:30):
  旧模板 刻度 07~09(3 行)下沿 10:00,色块 top=50%/h=50%  —— 复现用户所见
  新模板 刻度 07~17(11 行)下沿 18:00,色块 top=13.64%/h=81.82% = 95.46% 完整在车道内
  CSS    h4.md-h 17px / 正文 15px / .md-h font-weight 600
This commit is contained in:
2026-10-24 09:31:08 +08:00
parent 4b58fec796
commit a7b3d8cfd8
2 changed files with 71 additions and 13 deletions
+27 -4
View File
@@ -5400,10 +5400,33 @@ button.btn, a.btn, summary.btn, .seg-btn, .icon-btn, .rv-act-btn, .cs-btn, .bf-b
/* ---- Markdown 渲染出来的元素(列表页/预览共用同一套)---- */
.md-p { margin: 0 0 8px; }
.md-p:last-child { margin-bottom: 0; }
.md-h { margin: 10px 0 6px; font-weight: 500; color: var(--ink); }
h3.md-h { font-size: 16px; }
h4.md-h { font-size: 15px; }
h5.md-h, h6.md-h { font-size: 14px; }
/* 🔴🔴 v85(用户 2026-10-24):「还有日记功能,markdown 代码都没解析,
`##` 后面的是标题,现在显示的还是和正文一样。」
------------------------------------------------------------------
渲染**一直是对的**(`## x` → `<h4 class="md-h">`),问题全在**视觉**:
① 旧规则 `h4.md-h { font-size: 15px }`,而阅读态正文
`.note-read-block { font-size: 15px }` —— **两者完全相同**;
② 标题只有 `font-weight: 500`,而 .md-h 继承了正文的行高与颜色
⇒ 用户看到的"标题"和"正文"逐像素一致,当然认为"没解析"。
⇒ 三条一起改,缺一条都还是"看不出是标题":
① **字号必须拉开 ≥2px 且各级之间也要分级**(h4 < h5 那种倒挂是旧 bug:
`##` 给的是 h4、`###` 给的是 h5,而旧表里 h4=15px、h5=14px 只差 1px);
② **字重加到 600**(500 在中文无衬线里与常规几乎无差);
③ **加上下边距**,让标题与正文之间出现明确的段落呼吸。
⚠️ 为什么从 h4 起而不是 h1/h2:见 `Markdown::render()` 里的说明 ——
h1/h2 留给页面本身,笔记里的标题不许盖过页面标题。
所以这里必须把 **h4/h5/h6 这三级**都调大,光调 h4 不够。 */
.md-h {
margin: 16px 0 8px;
font-weight: 600;
color: var(--ink);
line-height: 1.45;
}
.md-h:first-child { margin-top: 0; }
h3.md-h { font-size: 18px; }
h4.md-h { font-size: 17px; }
h5.md-h { font-size: 15.5px; }
h6.md-h { font-size: 14.5px; color: var(--muted); }
.md-list { margin: 4px 0 8px; padding-left: 22px; }
.md-li { margin: 2px 0; }
/* 多级清单:子层用空心点,层级一眼可分(用户第 12 条"清单可以多级") */