R61: 视频关键信息卡内容板块去粉红改米色系(参照旧梦留声机账号卡 #FAEEDA, 删除 vkPalette 深浅双色板, 标题渐变#8C2F1E→#C05A32; ?v=l)

This commit is contained in:
maogeigei committed 2026-09-04 15:38:02 +08:00
1 parent 170257e0a2
commit 8cd6f50d75
2 files changed
+11 -24

No files matched your search

@@ -1229,14 +1229,6 @@ function svgCut(text, maxU) { /* 超宽截断加省略号 */
const s = String(text || '');
return _uLen(s) <= maxU ? s : (svgWrap(s, maxU - 1)[0] + '…');
}
/* —— 配色:按拆解文本情绪调性选 深色系/浅色系(复用 F6 配色规范;赛道标签歧义时以情绪锚点为准) —— */
function vkPalette(analysis) {
const blob = ['赛道', '账号核心定位', '内容核心', '内容风格', '可复用的爆款内容体系'].map((k) => String((analysis || {})[k] || '')).join(' ');
const deep = /深沉|催泪|怀旧|忧郁|厚重|悲情|救赎|泪目|旧时光|岁月|思念|遗憾|守护/.test(blob);
const light = /明快|欢乐|治愈|解压|暖心|温馨|可爱|元气|清新|甜蜜|宠溺|搞笑|积极/.test(blob);
/* 深色词命中 → 深色系(如催泪向治愈);否则浅色系(默认) */
return deep && !light ? 'deep' : 'light';
}
/* 抽取拆解为「关键信息模块数据」→ [{ title, kind:'kv', rows:[[k,v]...] } | { title, kind:'blocks', blocks:[[b, [[k,v]...]]] }](无内容模块不返回) */
function vkCollect(analysis) {
if (!analysis || typeof analysis !== 'object') return [];
@@ -1290,23 +1282,18 @@ function vkCollect(analysis) {
}
/* SVG 生成器:analysis=拆解 dict,vt=视频标题(含话题标签原样,卡内自行清理),acc=账号名。
排版模型:全宽 680,白色画布(用户定稿:白底简洁版,非账号设定卡式渐变大底),头部标题框 520×170,
其下逐模块排版——模块标题(accent 色书写)→ 浅 tint 圆角内容卡;深/浅调性只作用于 accent 与卡片 tint。
其下逐模块排版——模块标题(棕红 accent 书写)→ 米色圆角内容板块(#FAEEDA,参照账号设定卡内容板块规范,09-04 去粉红定稿)。
文本折行按「全角单位」计算:中文 1u≈字号宽、ASCII 0.55u;行 y 均为 text 基线,行高按字号 + 视觉间距直接给出(无字符串后处理)。 */
function renderVideoKeySvg(analysis, vt, acc) {
const D = vkCollect(analysis);
if (!D || !D.mods || !D.mods.length) return '';
const deep = vkPalette(analysis) === 'deep';
/* 色板:白底 + tint 卡;deep=暖米棕红系(深沉向)/ light=粉白玫瑰金系(明快向) */
const P = deep ? {
bgA: '#FFFFFF', bgB: '#FFFFFF', /* 纯白底(09-04 用户定稿) */
box: '#FBF3E7', boxBd: '#EBD9BC', boxTitle: '#7B2D1B', boxText: '#6A5644', boxTag: '#C13B2F',
headBox: '#FBF3E7', headBd: '#EBD9BC', headTitleA: '#8C2F1E', headTitleB: '#C05A32', headSub: '#C13B2F', headDim: '#A08B76',
secTitle: '#8C2F1E', deco: '#EBD9BC',
} : {
bgA: '#FFFFFF', bgB: '#FFFFFF',
box: '#FDF1F5', boxBd: '#F0D3E0', boxTitle: '#A13D6B', boxText: '#6E4A5C', boxTag: '#D84A8A',
headBox: '#FDF1F5', headBd: '#F0D3E0', headTitleA: '#B03E76', headTitleB: '#E0579A', headSub: '#D84A8A', headDim: '#B193A5',
secTitle: '#A13D6B', deco: '#F0D3E0',
/* 色板(09-04 用户定稿:统一参照账号设定卡米色系——旧梦留声机账号卡内容板块 #FAEEDA,去掉粉色系);
纯白底 + 米色内容板块 + 暖棕文字 + 棕红 accent(与 F6 账号设定卡 deep 系规范一致) */
const P = {
bgA: '#FFFFFF', bgB: '#FFFFFF', /* 纯白底 */
box: '#FAEEDA', boxBd: '#EDCBA4', boxTitle: '#7B2D1B', boxText: '#6F5B4A', boxTag: '#C13B2F',
headBox: '#FAEEDA', headBd: '#EDCBA4', headTitleA: '#8C2F1E', headTitleB: '#C05A32', headSub: '#8C2F1E', headDim: '#A88770',
secTitle: '#8C2F1E', deco: '#EDCBA4',
};
const W = 680, LX = 40, CW = W - LX * 2; /* 内容区:x 40,宽 600 */
const X = (u) => Math.max(4, Math.floor(u)); /* 全角单位 → 字数 */
@@ -1326,7 +1313,7 @@ function renderVideoKeySvg(analysis, vt, acc) {
const tl = svgWrap(titleRaw, 20).slice(0, 2); /* 主标题最多 2 行,每行 ≤20 全角字 */
const tlMore = svgWrap(titleRaw, 20).length > 2;
const ty = tl.length === 2 ? headY0 + 52 : headY0 + 84;
tl.forEach((ln, i) => { T(340, ty + i * 32, (i === 1 && tlMore) ? ln + '…' : ln, 21, `url(#vkT${deep ? 'D' : 'L'})`, 700, 'middle'); });
tl.forEach((ln, i) => { T(340, ty + i * 32, (i === 1 && tlMore) ? ln + '…' : ln, 21, 'url(#vkT)', 700, 'middle'); });
T(340, headY0 + 146, '视频拆解 · 关键信息', 11, P.headSub, 600, 'middle');
T(340, headY0 + 162, `${acc ? acc + ' · ' : ''}赛道:${D.track || '未知'}`, 9.5, P.headDim, null, 'middle');
@@ -1418,7 +1405,7 @@ function renderVideoKeySvg(analysis, vt, acc) {
<stop offset="0" stop-color="${P.bgA}"/>
<stop offset="1" stop-color="${P.bgB}"/>
</linearGradient>
<linearGradient id="vkT${deep ? 'D' : 'L'}" x1="0" y1="0" x2="1" y2="0">
<linearGradient id="vkT" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="${P.headTitleA}"/>
<stop offset="1" stop-color="${P.headTitleB}"/>
</linearGradient>
@@ -43,6 +43,6 @@
<script src="app.js?v=20260904e"></script>
<script src="help-guide.js?v=20260904b"></script>
<script src="data-pages.js?v=20260904k"></script>
<script src="data-pages.js?v=20260904l"></script>
</body>
</html>