第九轮(部分):修复日报徽章配色、彻底重做PIN定位方案、清理静态文件品牌残留

- 日报卡片"已提交/未提交"状态徽章补色:DailyReportCard用<article><header><em>结构,原选择器
  要求.report-cards直接子<button>,日报卡片永远命中不了、只落到不分状态的兜底样式;月报因为
  行本身就是<button>所以没受影响。详情页.report-author em同理补了区分色(原来恒为绿色,"未
  提交"用绿色在语义上很怪)。
- 青少年模式/独立密码设置的PIN输入定位改用结构性方案,不再靠猜一个rem偏移量:给
  .auth-pin-boxes/.auth-pin-input包一层.auth-pin-wrap,输入框inset:0精确覆盖方块的真实
  渲染框,不管外层页面有没有标题、padding多少都自动对齐。上一轮的补丁(.youth-password-gate
  .auth-pin-input{top:1.75rem})把重叠率从0%提到32.5%,本轮实测确认还是不够(方块下方
  67.5%的面积点不中),根治后4个采样点(四角+中心)全部精确命中输入框。过程中额外发现并
  修复了两个更隐蔽的层叠问题:全局input[type=text]的height:2.5rem特异度反超裸class、
  textarea/input共享的margin:0.25rem重置——不清掉这两个会让inset:0看起来生效了、实际尺寸/
  位置还是被悄悄改掉。
- .report-loading(举报原因页加载态)补基础样式,原来在base.css里零匹配,吃浏览器默认<p>样式。
- 清理静态文件里的Tinode品牌残留:index.html/index-dev.html的<meta>标签(application-name/
  description/og:*/canonical,此前只改了<title>,meta标签一直没跟上)、manifest.json(name/
  short_name/description改MeetingIM;prefer_related_applications+related_applications整个
  删掉——这两个字段会让Android/Chrome"添加到主屏幕"时引导用户去装无关的第三方开源Tinode App,
  不只是文案问题);删除.well-known/assetlinks.json(声明了无关第三方App对本域名的URL处理/
  登录凭据代理权限,属于遗留模板残留,无真实对应关系,直接移除而非编造虚假内容)。

manifest.json里的图标文件(logo96.png/logo192.png/logo.svg)本身画的就是Tinode的蓝绿橙"t"标志,
是真实的视觉品牌泄漏,但重新设计一套图标涉及视觉识别决策,本次未动,留给用户决定。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Your Name
2026-09-05 18:17:48 +08:00
co-authored by Claude Sonnet 5
parent f688578714
commit d573b38d10
10 changed files with 110 additions and 107 deletions
+43 -13
View File
@@ -1099,6 +1099,13 @@
font-style: normal;
}
/* DailyReportCard renders <article><header><em>, not the <button> the two rules below (1196-1197)
assume -- so submitted/draft there always fell through to this rule's one fixed color, unable to
tell the two states apart (MonthlyReportList's own rows really are <button>s, so it never hit
this gap). Same colors as the button-based rules, just re-declared at matching structure. */
.report-cards article > header em.submitted { color: #28784f; background: #e5f5ec; }
.report-cards article > header em.draft { color: #ad6c11; background: #fff2dd; }
.report-cards article p {
display: -webkit-box;
margin: 0.8rem 0;
@@ -1288,10 +1295,14 @@
}
.report-author em {
color: #2c8257;
font-style: normal;
}
/* Was one fixed color (green) regardless of report.status's actual value -- a "未提交" (not yet
submitted) badge showing the same green as "已提交" reads backwards. */
.report-author em.submitted { color: #28784f; }
.report-author em.draft { color: #ad6c11; }
.report-detail h2,
.report-detail h3,
.report-detail p {
@@ -6795,6 +6806,20 @@ div.toast.show {
margin-top: 1.2rem;
}
/* .auth-pin-input used to be sized/positioned with hardcoded top/width/height values guessed to
match wherever .auth-pin-boxes happened to render on each page -- .auth-pin-content's <h1> and
.youth-password-gate's shorter top padding push the boxes to two different heights, so one
shared guessed `top` could only ever be right for one of them (confirmed live twice: the two
pages' real box positions differ by ~9.25rem, and a value tuned for one left the other's boxes
only ~32% overlapping the real input, still mostly unclickable). Wrapping both in their own
tightly-fitting, positioned container instead -- inset:0 on the input then always matches
.auth-pin-boxes' actual rendered box exactly, on any page, with no measured constant to keep
in sync. */
.auth-pin-wrap {
position: relative;
display: inline-block;
}
.auth-pin-boxes {
display: grid;
grid-template-columns: repeat(4, 4rem);
@@ -6812,21 +6837,19 @@ div.toast.show {
.auth-pin-input {
position: absolute;
top: 11rem;
width: 19rem;
height: 5rem;
inset: 0;
margin: 0;
opacity: 0;
}
/* .auth-pin-input's shared top:11rem was measured against .auth-pin-content's layout (6rem
top padding + an <h1> pushing .auth-pin-boxes further down) -- .youth-password-gate has no
title and only 3rem of top padding, so .auth-pin-boxes sits ~9.25rem higher here and the
invisible real input ended up entirely below the visible boxes (confirmed live: boxes at
86.7-140px, input at 210-243px, a real click on the boxes hit nothing and never refocused
the input). Re-anchored to this container's own shorter layout instead of reusing the other
page's absolute value. */
.youth-password-gate .auth-pin-input {
top: 1.75rem;
/* input[type="text"]'s global reset (2131 above) sets a fixed height:2.5rem at higher specificity
(0,1,1) than a bare .auth-pin-input's (0,1,0) -- it was winning and pinning this input to 2.5rem
tall regardless of the boxes' actual height, undoing the inset:0 fix above for the vertical axis
(width happened to still come out right only because the reset's own width:100% agrees with this
element's actual need). Selector bumped to definitively outrank it, not just happen to. */
.auth-pin-wrap .auth-pin-input {
width: 100%;
height: 100%;
}
.auth-pin-content .auth-primary {
@@ -14061,6 +14084,13 @@ div.toast.show {
font-weight: 500;
}
.report-loading {
margin: 0;
padding: 1rem;
color: #6e7781;
font-size: 0.85rem;
}
.report-reason-list {
background: #fff;
}
+1 -1
View File
File diff suppressed because one or more lines are too long