zhangxiang
4ab2f3cd8e
chore(infra): 新增 Gitea+Jenkins CI/CD 部署与凭据整改
...
- infra/cicd:docker-compose(gitea/jenkins)、JCasC(凭据统一 ${ENV} 注入,无硬编码)、
备份/恢复、健康检查、凭据轮换与 git 历史清除脚本
- docs/deployment/cicd:安装、高可用备份监控、凭据事故复盘
- .env.example 仅为占位模板;真实 .env 由 .gitignore 排除
2026-09-20 10:37:57 +08:00
zhangxiang
7df2dde438
chore(visual): refresh tablet/mobile/webkit baselines for Hero redesign
...
- Regenerate 23 tablet + 23 mobile + 23 webkit visual baselines via
playwright --update-snapshots against current HEAD (Hero redesign:
light Hero + ink engineering grid + reduced-motion guard + P5 CTA).
- Firefox baseline remains blocked by sandbox IPC (browserContext.newPage
timeout) and is excluded; requires a real-Firefox CI host.
2026-09-01 12:23:04 +08:00
zhangxiang
e177154abb
docs(audit): finalize impeccable score to 20/20 after P2-1/P3-1
...
- Anti-Patterns 3→4:P3-1 通用阴影已降级,零通用阴影套路
- 总分 19→20/20 Excellent,AI 味完全消除
2026-09-01 11:34:51 +08:00
zhangxiang
d569713534
docs(audit): mark impeccable P2-1/P3-1 resolved, score 18→19
...
- Hero 入场动画 reduced-motion 守卫已落地,Accessibility 维度 3→4
- 创始团队引言卡阴影降级,总分升至 19/20 Excellent
2026-09-01 11:29:09 +08:00
zhangxiang
8d95e41848
refactor(ui): switch remaining raw CTA pills to CTAButton across 5 pages
...
- about/contact 补 CTAButton import,移除变 unused 的 ArrowUpRight/ArrowRight
- products/standalone 次链接 StaticLink → CTAButton secondary
- 统一品牌 ArrowRight 签名与 200-300ms 过渡,保留原始尺寸
2026-09-01 11:28:04 +08:00
zhangxiang
b19d8fdc83
fix(a11y): guard Hero entrance animations with reduced-motion; tone down founder card shadow
...
- Hero 入场 motion.* 未守卫 reduced-motion,与 ScrollReveal 范式不一致
- 新增 rise() 守卫:reduce 时传空 initial/animate,元素静态可见
- 创始团队引言卡 shadow-xl 降级 shadow-sm + 品牌红 hairline 边框
2026-09-01 11:27:51 +08:00
zhangxiang
5de01531bf
fix(e2e): remove stale hero-product-visual assertions from uj-11
...
v15 removed the product mockup; assert hero-section visibility instead. 7/7 pass chromium.
docs: add impeccable AI-slop audit for Hero + FounderQuoteSection (18/20, no tells).
2026-09-01 11:07:45 +08:00
zhangxiang
2482967a22
chore(visual): refresh tablet/mobile/webkit visual baselines
...
Regenerate snapshots for 3 projects under reducedMotion so ScrollReveal renders
default-visible (no opacity:0 initial state). Firefox baselines untouched:
browser launch times out in this sandbox (pre-existing env limitation, not code).
2026-09-01 11:07:30 +08:00
zhangxiang
f744078c28
fix(visual): make founder quote visible in visual regression snapshots
...
- Set reducedMotion:'reduce' on all visual regression projects.
- ScrollReveal/StaggerReveal now render visible by default.
- Scroll to bottom then top in waitForPageStable before screenshot.
- Add L2 element snapshot for founder-quote-section.
- Redesign quote as light card (bg-bg-primary/95) with ink text.
- Verified: type-check ok; lint 0 errors; visual:update 23/23.
2026-09-01 10:33:21 +08:00
zhangxiang
b80db75c25
feat(hero): apply mono + tabular numerals to hero stats band
...
成果带数字改 font-mono + tabular-nums,强化「数据终端」语义(Stripe 惯例)
HeroStatsBand 即 Hero 真实数据面,无需臆造新浮层
门禁:type-check 0 / eslint 0 error(19 条既有 any warning)/ 单测 36 passed
2026-09-01 09:58:17 +08:00
zhangxiang
bfa49410e4
feat(hero): refine light hero tech-sense with engineering grid and tuned ink links
...
浅色 Hero 科技感变体(HERO_VARIANT='grid'):墨色工程网格 + 品牌红节点 + 墨色细连线
连线 globalAlpha 上限 0.7→0.42,加边缘径向淡出(确定性,快照零漂移)
工程网格 CSS 加 radial mask 聚焦版心(呼应 McKinsey 穿透噪声)
清理死 CSS:移除 hero-dot-grid/hero-dot-spot 及 --hero-dot-* 变量
保留 --spot-x/--spot-y(spotlight 聚光复用)
门禁:type-check 0 / eslint 0 / 单测 17 passed
2026-09-01 09:54:45 +08:00
zhangxiang
95dc07c3f7
refactor(home): 移除 Hero「数据驱动」产品视觉整个板块(非仅眉标)
...
- 删除 hero-product-visual 组件及其测试(该板块仅用于 Hero 右侧,移除后成死代码)。
- home-content-v15:移除 2 列网格的右侧列,Hero 收为单列文本 + 循环粒子层;
同步删除 HeroProductVisual 导入与过时 L3 注释("入场静止"→"持续循环漂移")。
- 删除 home-content-v15 中对已移除板块的测试断言。
注意(视觉回归):home 快照将因右侧板块消失而大幅变化,需在
CI/本地(npx playwright install chromium + npm run dev 后 npm run test)
跑 --update-snapshots 并 review 新基线。
验证:type-check ✅ / lint ✅ (0 error) / 单测 ✅ (129 套 1628 passed)。
视觉回归像素门禁:本沙箱未装 Playwright 浏览器,未实跑;且因板块移除快照
必然变更,需更新基线。
2026-09-01 09:11:35 +08:00
zhangxiang
45a92fcc2b
feat(home): Hero 粒子层改为循环漂移 + 移除「数据驱动」眉标
...
- hero-particle-field: 由「入场浮现后静止」改为 rAF 持续漂移循环;保留
reduced-motion 静态降级、DPR≤2、粒子封顶 56、品牌红单电压(面积<0.1%)、
离屏/隐藏即停、ResizeObserver 重排、无 2d 上下文安全退出。
- 视觉回归稳定:navigator.webdriver(Playwright 默认 true)下降级为静态帧,
位置由固定种子 mulberry32(0x9e3779b9) 复现,与改动前冻结帧像素一致,
快照基线零漂移,无需更新全站 baseline。
- hero-product-visual: 删除「数据驱动 · 让转型可量化」眉标(含品牌红圆点 div)。
- 同步移除 home-content-v15 对应测试断言;新增粒子层循环路径单测
(修复被前置用例污染的共享 useReducedMotion mock)。
验证:type-check ✅ / lint ✅ (0 error) / 单测 ✅ (130 套 1631 passed)。
待 CI 确认:视觉回归像素门禁(本沙箱未安装 Playwright 浏览器,未实跑)。
2026-09-01 08:49:49 +08:00
zhangxiang and 阿睿
ac4c853b71
feat(home): Hero 右侧看板 Absorb 层渐进描边
...
hero-product-visual 升级为客户端组件,趋势线改用 stroke-dashoffset 渐进描边:
滚动入视触发、600ms ease-ink 绘出,填充/端点同步淡入,补齐参考埃森哲的
Glance/Skim/Absorb 三层交互模型。reduced-motion 首帧即静态完整线、零动画;
IntersectionObserver 不可用时降级静态。刻意未做 KPI count-up(格式化串解析 hacky
且偏装饰,与动效克制偏好冲突)。
Co-Authored-By: 阿睿 <workbuddy@tencent.com >
2026-09-01 08:02:56 +08:00
zhangxiang and 阿睿
549c151c6a
feat(home): Hero 动态粒子层(入场浮现后静止)
...
新增 hero-particle-field 组件作为 Hero L3 层:品牌红点缀、Canvas + rAF
仅在 ~600ms 入场窗运行后冻结为静态帧,遵守「无持续循环动画」动效铁律;
prefers-reduced-motion 退化为一次性静态帧。固定种子 PRNG 保证视觉快照可复现。
同步更新 home-content-v15 接入与单测、home 视觉基线。
Co-Authored-By: 阿睿 <workbuddy@tencent.com >
2026-09-01 07:57:12 +08:00
zhangxiang and 阿睿
ac21936785
refactor(admin): 装饰性模型卡图标底复用 accent token 以暗黑反色
...
仪表盘模型卡/统计卡的 blue/amber/purple/teal/rose/indigo 图标底是纯装饰
多色强调(非语义状态),原用 raw bg-X-50 等 Solid 浅色,暗黑模式仍为浅色盒。
- 复用项目既有 accent 色组(bg-accent-{hue}-soft 透明浅色调 + text-accent-{hue}),
透明 soft 叠加暗黑页面底色即自动反色为深色底(与 products-content-v3 /
metric-card 既定模式一致)。
- tailwind.config.js + globals.css:accent 组补 rose/indigo 两色(DEFAULT + soft
+ rgb),blue/amber/teal/purple 已由既有 token 覆盖,无需新增。
验证:type-check 0 errors;lint 0 errors;单测 1624 passed;视觉回归 22 passed;
Playwright 实测新增 rose/indigo 变量接线正确,装饰框实际渲染色
浅 rgb(231,240,254) → 暗 rgb(16,28,47) 确认反色。
Co-Authored-By: 阿睿 <workbuddy@tencent.com >
2026-09-01 07:40:43 +08:00
zhangxiang and 阿睿
4af238bdd9
refactor(admin): tokenize 语义色并补暗黑模式变量覆盖
...
将 admin 8 文件 ~50 处 raw red/green/yellow/amber/blue 类替换为语义 token
(error/success/warning/info),使其错误/成功/警告框在暗黑模式正确反色。
- tailwind.config.js: error 补 text 子键(原缺,text-error 暗黑底仅 3.3:1 不达 AA)
- globals.css: 新增 --color-error-text;html[data-theme='dark'] 补四语义色的
*-bg(深色底)与 *-text(浅色,暗底达 AA)覆盖,原暗黑块完全漏掉这些变量
- 映射纪律:语义框 bg-<c>-bg border border-border-secondary text-<c>-text;
危险按钮 bg-error/bg-success hover:bg-*-hover text-white;字段校验 border-error
验证:type-check 0 errors;lint 0 errors;单测 1624 passed;视觉回归 22 passed;
Playwright 实测 8 变量 light/dark 翻转 + 真实登录错误框背景反色确认。
Co-Authored-By: 阿睿 <workbuddy@tencent.com >
2026-09-01 07:26:53 +08:00
zhangxiang
e0828db0cc
test(header): 补充 lucide-react mock 的 Sun/Moon 图标
...
- header 接入 ThemeToggle 后,其测试 mock 的 lucide-react 缺 Sun/Moon
- 导致 theme-toggle 内 <Sun/>/<Moon/> 导入为 undefined,14 例渲染失败
- 补齐后 14 例通过,全量单测 128 suites / 1624 passed
2026-09-01 06:50:59 +08:00
zhangxiang
37a7738431
test(visual): 更新桌面端视觉快照 16 张(切换器 UI + 真实暗黑主题)
...
- 切换器图标出现在 header,全页/导航快照随之更新
- theme-dark-main 现真实渲染深色(Phase 1 已加 html[data-theme='dark'] 覆盖块)
- 非 update 模式 16 failed → 全为 ~0.01 局部 diff,无布局回归 → update 后 22 passed
2026-09-01 06:48:03 +08:00
zhangxiang
02fec8a67b
feat(theme): add ThemeToggle and wire into header + admin top bar
...
- Add reusable client ThemeToggle at src/components/theme/theme-toggle.tsx
- Reads/writes novalon-theme localStorage key and toggles data-theme
- Placeholder on first render to avoid hydration mismatch
- Wired into public Header desktop cluster and AdminLayout top bar
2026-08-31 22:05:06 +08:00
zhangxiang
8090ba2b9e
refactor(admin): tokenize remaining admin pages for dark mode
...
- 8 个 admin 页面(users/roles/zones/media/notifications/page/content×2)全部 gray→token
- 深色面板 bg-gray-900/800 → bg-dark-bg / bg-dark-bg-secondary(两模式保持深色)
- 深色面板上的文字保留 text-white(固定亮色,两模式可读)
- 遮罩 bg-black/50 → bg-overlay/50(独立 token,不随反色)
- border-t-gray-900 → border-t-border-dark 单独处理
- 验证: type-check 0 / lint 0 / Tailwind 生成确认 token 类产出 / 无 gray- 残留
2026-08-31 21:46:59 +08:00
zhangxiang
860a7f454a
refactor(admin): 替换硬编码 gray/white 为设计 token(login + layout)
...
- login/page.tsx、admin-layout.tsx 全部 Tailwind gray-* / bg-white / bg-black/50 映射至语义 token
- 深色面板(bg-gray-900/800 激活态、头像、登录按钮)映射 bg-dark-bg / bg-dark-bg-secondary,保持两模式深色
- 深色面板上的文字用 text-dark-text-primary(固定亮色),规避 text-white 在暗黑模式反色为暗的陷阱
- 遮罩 bg-black/50 → bg-overlay/50(独立 token,不随反色)
- 验证: type-check 0 / lint 0 / 产物 CSS 已含全部映射类
2026-08-31 21:38:44 +08:00
zhangxiang
70fdb97dd8
feat(home): hero 背景层 — 点阵 token 化 + 光标聚光(Skim 层)
...
参考 Accenture 分层背景(P1/P2 批次,用户决策先上点阵+聚光、粒子暂缓):
L1 静态点阵 token 化:
- 48px / hardcoded rgba(196,30,58,0.4) / opacity 0.03(实测 1.05:1,几乎不可见)
- → 24px 网格 + 颜色/透明度走 CSS 变量(浅色 brand@0.12 =1.22:1;深底中性浅灰 text-muted@0.08 =1.20:1)
- 暗黑模式零 JS 自动反色(原硬编码在深底不反色)
L2 光标聚光(Skim 层):
- mask + 2 个 CSS 变量(--spot-x/--spot-y),无 canvas、无逐帧 JS
- 直接写 DOM 变量,零 re-render;prefers-reduced-motion 下不渲染
- 复用既有资产思路(hero-section-v2 光标跟随 / design-system inkGlow)
验证(evidence-first):
- type-check 0 errors / lint 0 errors(127 warnings 均既有)
- jest 13 passed(hero 声明先行断言未被破坏)
- 视觉回归 22 passed(点阵 1px 改动在全页截图下低于像素阈值,快照零 diff;
已 curl 确认 DOM 实为 hero-dot-grid+hero-dot-spot,硬编码已清除)
粒子(L3)按决策暂缓,待 L2 聚光效果评估
2026-08-31 21:28:41 +08:00
zhangxiang
e4bbe3822d
feat(home): hero 信息层重构 — 声明先行,数据指标下沉为独立成果带
...
参考 Accenture Radical Relevance 设计语言(方向 A,用户已决策):
- hero 内数据条移出,主张(副标题)前置,一屏只负责一句话声明 + 一个行动
- 新增 HeroStatsBand 成果带,滚动触发(Glance 层),承接下沉的指标
- H1 字重 900→700,hero 内 KPI 数字同步收敛,对齐「字重 9→3」克制
- 右侧数据看板保持单电压(仅品牌红),hero 内已无辅助色
验证(evidence-first):
- type-check 0 errors / lint 0 errors(127 warnings 均为既有、与本改无关)
- jest 13 passed(含新断言:hero 内不含 hero-stats、数据下沉成果带仍渲染)
- 视觉回归 22 passed(首页浅/深快照已 update;19 个非首页页零 diff,证明改动仅影响首页)
含 docs/design/hero-redesign-proposal.md(设计提案,未改代码)
P0 批次;P1(点阵 token 化 + L2 光标聚光)待续
2026-08-31 21:24:05 +08:00
zhangxiang
dcc2073e1e
feat(theme): 暗黑模式 Phase 2 批次 3 — product-detail/standalone/detail-hero token 化
...
- product-detail-content-v3.tsx: 9 处 bg-white → bg-bg-primary
(Hero / features / benefits / process / cases / certifications / CTA)
- standalone/[id]/client.tsx: 5 处 bg-white → bg-bg-primary
- detail-hero.tsx: 浅色 variant bg-white → bg-bg-primary(共享组件)
- detail.test.tsx: 新增常驻断言——light variant 必须用主题 token,禁止硬编码 bg-white
验证(evidence-first):
- type-check 0 / lint 0 errors
- jest 128 suites / 1624 passed(含新增断言)
- 视觉回归 22 passed(浅色基线零 diff)
- computed-style 一次性验证 4 passed: /products/erp + /products/crm 的 dark 反色
(html/body/header → #0A0E14、section 层次自动反色)+ light 零深色残留;脚本已删
Phase 2 剩余批次: 批次 4 admin 全量(user 决策: admin 也参与)
2026-08-31 18:53:47 +08:00
zhangxiang
80e3c48c5d
feat(theme): 暗黑模式 Phase 2 批次 2 — services/service-detail/solution-value token 化
...
将 services-content-v3(7 处)、service-detail-content-v4(7 处)、
solution-value(1 处)的浅色 bg-white 全部迁移到 bg-bg-primary。
浅色下值完全等价(#FFFFFF)→ 浅色视觉零差异;dark 下随 token 自动
反色为 #0A0E14,section 间 bg-bg-secondary 层次交替保留。
【变更】
- services-content-v3.tsx(7 处):Hero + section + 卡片×3 + main wrapper
(含卡片条件 className 中两个 bg-white 分支)
- service-detail-content-v4.tsx(7 处):Hero + FeaturesSection + 卡片×3 +
CasesSection + main wrapper
- solution-value.tsx(1 处):共享 section 组件
【验证】
- type-check 0 / lint 0 errors(127 warnings 既有)
- jest 128 suites / 1623 passed
- 视觉回归 22 passed(含 /services 与 /services/software 浅色快照零 diff)
- computed-style 一次性脚本验证(已删除):
dark: /services 与 /services/software 的 html/body/header → #0A0E14
section 层次 [primary, secondary, primary, secondary] 自动反色正确
light: 零深色残留
【Phase 2 剩余批次】
- 批次 3:product-detail-content-v3 + products/standalone + detail-hero 共享组件
- 批次 4:admin 全量(user决策:参与暗黑)
2026-08-31 18:31:08 +08:00
zhangxiang
cc1cc91010
feat(theme): 暗黑模式 Phase 2 批次 1 — about/brand 浅色区块 token 化
...
将 about-content-v4(8 处)与 brand-content(6 处)的浅色 bg-white 全部迁
到 bg-bg-primary,浅色下值完全等价(#FFFFFF)→ 浅色视觉零差异;dark 模式
下随 token 自动反色为 #0A0E14,section 间 bg-bg-secondary 交替保留设计层
次(#0F1419)。
【变更】
- about-content-v4.tsx:Hero×2 + section×2 + 卡片×2 + min-h-screen wrapper×2
- brand-content.tsx:main wrapper + Hero + section×2 + 卡片×2 + hover:bg-white→hover:bg-bg-primary
【验证】
- type-check 0 / lint 0 errors(127 warnings 既有)
- jest 128 suites / 1623 passed
- 视觉回归 22 passed(含关于我们 /about 全页浅色快照零 diff)
- computed-style 一次性脚本验证(已删除):
- dark: /about 与 /about/brand 的 html/body/header 背景 → rgb(10,14,20) ✓
- dark: sectionBgs = [#0A0E14, #0F1419, #0A0E14](bg-primary/bg-secondary
交替层次保留,dark 下 secondary → #0F1419 是设计意图)
- light: 零深色残留,所有 section 在浅色范围内
【设计确认】
- about/brand 的第二个 section 使用 bg-bg-secondary(#F8FAFC 浅灰)是设计
意图的层次交替,dark 下自动反色为 #0F1419(深一档),无需改动
- 一次性 computed-style 脚本对 'section 全部 #FFFFFF/#0A0E14' 的断言过严
→ 修正为'第一个 section 是预期主色 + 所有 section 不在反色范围',覆盖
真正的浅色→深色反色语义
【Phase 2 剩余批次】
- 批次 2:services-content-v3 + service-detail-content-v4 + solution-value
- 批次 3:product-detail-content-v3 + products/standalone + detail-hero
- 批次 4:admin 全量(login + media + roles + notifications + content + page)
2026-08-31 18:26:49 +08:00
zhangxiang
40c6cd612d
feat(theme): 暗黑模式 Phase 1 基础设施 + 首页试点
...
为 html[data-theme='dark'] 添加完整 CSS 变量覆盖块,建立暗黑模式基石。
--color-ink 收窄为'文字/描边跟随主题'语义,深色 UI 元素(卡片/按钮/遮罩/
代码块/页脚)迁到 --color-dark-bg / --color-overlay 独立 token,避免 ink
反色为浅色文字时连带把深色区块变浅(双语义冲突)。
【基础设施】
- globals.css:
* html/body 顶部硬编码 #FFFFFF !important 改 var() 化(保留 !important)
* :root 新增 --color-overlay / --color-overlay-rgb(遮罩/深色叠加层,
永不反色)
* 新增 html[data-theme='dark'] 覆盖块:墨色反色为浅色文字,bg/text/
border 层级反色,link 反色;保留 --color-dark-* / --color-brand-section
* pre 背景 var(--color-ink) → var(--color-dark-bg)
- tailwind.config.js:注册 overlay 色(rgb() 形式,支持 /50 /60 修饰符)
- layout.tsx:head 内联防 FOUC 同步脚本,读 localStorage['novalon-theme']
设置 data-theme(当前无切换 UI,仅作未来挂载点)
【首页试点 + 布局组件】(浅色值完全等价 → 浅色零视觉差异)
- home-content-v15.tsx:7 处 bg-white → bg-bg-primary(narrative/insights/
cases sections 与卡片),2 处 bg-ink → bg-dark-bg(案例卡 bg-dark-bg 不
随反色,保留深色画布)
- header.tsx / mega-dropdown.tsx:bg-white → bg-bg-primary(导航栏/移动
端菜单/下拉面板)
- footer.tsx:bg-[#0A0E14] → bg-dark-bg(语义统一,视觉零差异)
【全局 UI 组件】(深色区块语义统一 + 遮罩固定深色)
- button.tsx:secondary 'bg-ink hover:bg-ink-light' → bg-dark-bg / hover:bg-dark-bg-secondary;
outline 'hover:bg-ink hover:border-ink' → hover:bg-dark-bg / border-dark-bg
- stats-showcase / milestone-timeline:isDark 分支 bg-ink → bg-dark-bg
- metric-card:isDark 分支 bg-ink/50 → bg-overlay/50,hover:bg-ink → hover:bg-overlay
- dialog / alert-dialog:遮罩 bg-ink/60 → bg-overlay/60(永不反色)
- button.test.tsx:断言 bg-ink → bg-dark-bg,注释同步
【验证】
- type-check 0 errors
- lint 0 errors(127 warnings 既有,非本次引入)
- jest 128 suites / 1623 passed(button 断言同步通过)
- 视觉回归先非 update:21 passed(浅色安全门零 diff)+ 1 failed
(仅 theme-dark-main,dark 快照从浅色名义变真正深色 = 语义修复预期)
- update-snapshots:22 passed,仅 theme-dark-main 基线重写
- computed-style 权威验证(一次性脚本,已删除):
dark 7 项断言全过(html/body/hero/导航栏/案例卡→深色 #0A0E14;
body 文字→浅色 #F8FAFC;footer/overlay→保持深色);light 4 项零回归
【未在 Phase 1 范围】(已识别,留待 Phase 2/3 决策)
- service-detail-content-v4.tsx 等营销页 bg-white:Phase 2 批量 token 化
- admin 页面 bg-white + RichTextEditor:admin 边界决策 + Phase 3
- 品牌红 #C41E3A 在深色底对比度复检:Phase 3
2026-08-31 18:15:58 +08:00
zhangxiang
7f83ef68f7
fix(ui): about hero 下划线不再遮挡副标题 + home hero 移除重复 Logo
...
- about-content-v4: hero 标题强调下划线 absolute -bottom-2 → bottom-0,
不再向下溢出侵入下一行文字(浏览器几何验证:下划线 642-645px 位于
'专业核心团队'(521-629) 与 '的转型伙伴'(656-764) 间隙,零遮挡)
- home-content-v15: hero 删除品牌 Logo(与导航栏重复),slogan badge
成为首元素;移除 Image import
- 测试:hero logo 断言改为 'hero 内不重复渲染 img(与 header 去重)'
- 视觉基线更新 4 张:home-fullpage / about-fullpage / theme-light-main / theme-dark-main
2026-08-31 18:02:18 +08:00
zhangxiang
f64e9648ff
refactor(ui): HeroProductVisual 硬编码 bg-white token 化(bg-bg-primary)
...
- 消除暗黑模式 token 反色时的冲突隐患(浅色下视觉零变化,22 passed 确认)
2026-08-31 17:51:28 +08:00
zhangxiang
fea5da7917
feat(home): Hero 浅色化(暗黑模式 token 友好)+ 视觉基线更新
...
- 撤销 P4 hero 深色全出血(bg-ink),回归浅色方案:bg-bg-primary + text-ink
- 全部使用 CSS 变量 token(bg-bg-primary/text-ink/text-text-secondary/text-brand),
暗黑模式可直接覆盖 token 实现适配,无需逐元素反色
- logo-white.svg → logo.svg(浅色画布深色版)、点阵纹理淡化(0.06→0.03)
- 测试同步:hero logo 断言 /logo-white.svg → /logo.svg
- 视觉基线更新 3 张:home-fullpage / theme-light-main / theme-dark-main
- 附带修复:hero 背景原误用无效类 bg-primary(Tailwind 嵌套色名应为
bg-bg-primary),全项目排查无同类误用
2026-08-31 17:47:38 +08:00
zhangxiang
0ed1331d1f
chore(test): jest 全局 lucide mock 兜底 + playwright 显式 outputDir
...
- jest.setup.js: Proxy 兜底所有 lucide 命名导入,防 P5 CTAButton 后
未显式 mock 的图标 undefined 导致渲染崩溃(测试内显式 mock 仍可覆盖)
- playwright.config.ts: outputDir 显式指向 e2e/test-results,避免项目根
test-results 触发 WorkBuddy 沙箱 safe-delete BULK_GUARD(fs.rm ≥50 被拦)
2026-08-31 17:47:26 +08:00
zhangxiang
39b2043c1f
test(visual): 更新桌面端视觉快照 17 张(rgb 修复 + P5 全站 CTA 切换后基线)
...
基线更新范围与之前 17 个 failed 一一对应:
- 营销页:home / products / product-erp / solutions / solution-manufacturing
services / service-software / news / news-detail / team / methodology
- 共享:about / contact / header / footer / theme-light / theme-dark
根因:HEAD bf9c992 基线是在 globals.css rgb 变量仍是逗号分隔(bug 状态)、
CTAButton 切换未完成时生成的快照。当前代码已是修复+切换后状态:
- globals.css 22 个 rgb 变量空格分隔(commit 011189a)
- CTAButton 全站 27 处切换(commit 5c1b883)
size diff 佐证:team-fullpage 230K→648K(深色 CTA 从透明 bug 变为真实深色背景)。
2026-08-31 17:28:58 +08:00
zhangxiang
5c1b883abf
feat(ui): CTAButton 可复用组件 + P5 全站 CTA 签名切换(17 页面 27 处)
...
feat(ui): 抽离 CTAButton 为 src/components/ui/cta-button.tsx
- 4 variant 覆盖全站 CTA 场景:
* primary:品牌红填充 pill(hero 主行动 / 底部大 CTA)
* secondary:描边墨色 pill(浅色 section 次行动)
* dark:描边浅色 pill(深色区块 bg-dark-bg 内次行动,如 brand/team 底部 CTA)
* inline:透明 + 小箭头(卡片内次行动)
- 品牌箭头签名化:内置 ArrowRight + hover translate-x 微交互
- 200-300ms transition,对齐项目动效四原则
- data-testid 透传避免破坏既有测试
style(cta): P5 全站 CTA 签名切换(17 页面 27 处)
- home V15 / news×3 / products×4(含 erp)/ cases / services×2 / solutions×2
- brand / methodology / team(hero 2 + L4 2 = 4 处,含 dark variant)
- error / not-found(保留 onClick 功能按钮与卡片式导航 StaticLink)
- 清理:StaticLink / Button / ArrowRight / ChevronRight unused import
test(marketing): services/solutions lucide-react mock 补 ArrowRight
- CTAButton 内部用 ArrowRight,原 mock 漏导导致渲染崩(4 测试失败已修)
- 对齐 home-content-v15.test.tsx 既有 mock 范式
2026-08-31 17:25:08 +08:00
zhangxiang
011189a38c
fix(css): globals.css 22 个 rgb 变量格式修复(逗号→空格)
...
Tailwind v3 颜色配置 rgb(var(--color-X-rgb) / <alpha-value>) 要求 RGB 分量空格分隔。
原逗号分隔 'R, G, B' 与 <alpha-value> 组合生成无效 CSS 'rgb(10, 14, 20 / 1)',
浏览器解析失败回退 rgba(0,0,0,0) 透明,导致 bg-ink / bg-brand/15 / border-brand/30
等所有依赖 alpha 的颜色全站不可见(Hero H1、立即咨询按钮、slogan badge 隐形)。
修复后将 22 个 --color-*-rgb 变量改为空格分隔,恢复颜色正确显示。
2026-08-31 17:24:59 +08:00
zhangxiang
bf9c992300
test(visual): 更新桌面端视觉快照 20 张(V15 首页/CTA Pill 化)+ 清理旧格式快照目录
2026-08-31 16:17:54 +08:00
zhangxiang
8cbe7e266b
chore(seed): page-copy 新增 insights/founderQuote/news 首页区块字段 + CONTEXT 记录对标埃森哲决策
2026-08-31 16:17:47 +08:00
zhangxiang
88578a7433
style(cta): 全站 CTA Pill 化(Button 组件 + 11 个营销页内联按钮 rounded-full 对齐签名化)
2026-08-31 16:17:42 +08:00
zhangxiang
1ae918e391
feat(home): 首页对标埃森哲重构 V15(深色 Hero + Insights/FounderQuote/News 支柱 + 案例 Client Spotlight)删除 v14
2026-08-31 16:17:34 +08:00
zhangxiang
b65ddd1ff7
fix(a11y): 无障碍与 lint 修复(对比度/alt 属性/触控目标收窄)+ Geist 本地字体系统
2026-08-31 12:03:32 +08:00
zhangxiang
0786af3db9
docs(consistency): 文档-代码一致性治理 + 全链路审计报告
2026-08-31 12:03:26 +08:00
zhangxiang
2297f01e60
refactor(middleware): 迁移 middleware 至 proxy(Next 16 弃用约定)
2026-08-31 12:03:25 +08:00
zhangxiang
08a020105f
refactor(link): 营销页站内链接统一 StaticLink(静态托管适配)+ 删除 0 引用死代码组件 + QA 页 client/server 拆分
2026-08-31 12:03:12 +08:00
zhangxiang
77b455c04e
fix(seo): 移除空案例列表页 sitemap 条目(case-study 暂无已发布数据)
2026-08-31 12:03:03 +08:00
zhangxiang
4c85b3cbdf
fix(tailwind): arbitrary-value 改映射类,消除 ambiguous warnings
2026-08-31 12:03:03 +08:00
zhangxiang
2af6d01396
style(design): 中度软化设计 token(圆角/阴影/边框色/大屏字号/section 节奏)
2026-08-31 12:03:03 +08:00
zhangxiang
45d0c51366
chore(gitignore): 忽略本地数据库与工作记忆目录
2026-08-31 12:03:03 +08:00
zhangxiang
6a1f5a9c95
chore(docker): 瘦身构建上下文避免生产磁盘不足
...
.dockerignore 排除 dist 除 standalone/static 外的开发与缓存产物
(dev/cache/server/node_modules 等)及服务器 dist_backup_* 备份目录,
将 docker 构建上下文从约 4.4G 降至约 200M,修复生产容器重建时
"no space left on device" 失败。
2026-08-20 12:11:23 +08:00
zhangxiang
d4caa7bef3
fix(deploy): 修复生产 CMS 解密失败与媒体库 500
...
- deploy.sh 构建时从 .env.production 显式注入 NEXT_PUBLIC_ENCRYPTION_SECRET,
避免 .env.local 开发密钥覆盖生产密钥,导致前端 chunk 与后端 ENCRYPTION_SECRET
不匹配,CMS 所有列表/仪表盘解密失败(The operation failed for an
operation-specific reason)
- Dockerfile.prod 新增 sharp-deps 阶段,为 Alpine 容器补充 @img/sharp-linuxmusl-x64
平台依赖,修复媒体库接口缺失 musl 二进制导致的 500
2026-08-20 12:06:34 +08:00
zhangxiang
417463ee9a
docs: 精简 README(压缩项目规划与进度章节)
2026-08-20 10:28:18 +08:00