openyida 2026.9.20 → 2026.9.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/app/application-style.js +3 -1
- package/lib/app/theme-from-design.js +38 -13
- package/lib/app/update-app.js +63 -13
- package/lib/core/command-manifest.js +32 -20
- package/lib/core/locales/en.js +17 -0
- package/lib/core/locales/zh.js +17 -0
- package/lib/core/sample.js +17 -14
- package/lib/design-plan/confirmation.js +13 -0
- package/lib/design-plan/design-plan.js +44 -2
- package/lib/design-plan/entry-navigation.js +10 -2
- package/lib/design-plan/init.js +11 -7
- package/lib/design-plan/materialize.js +62 -43
- package/lib/design-plan/normalize.js +13 -14
- package/lib/design-plan/parallel.js +62 -13
- package/lib/design-plan/patch.js +21 -7
- package/lib/design-plan/rebase.js +60 -0
- package/lib/design-plan/themes.js +16 -1
- package/lib/design-plan/validate.js +6 -1
- package/lib/design-plan/visual-policy.js +18 -4
- package/lib/samples/openyida-scaffold/canvas-form-drawer.canvas.jsx +3 -3
- package/lib/samples/openyida-scaffold/canvas-nav/mixed.jsx +6 -4
- package/lib/samples/openyida-scaffold/canvas-nav/shared.jsx +5 -5
- package/lib/samples/openyida-scaffold/canvas-nav/side.jsx +1 -2
- package/lib/samples/openyida-scaffold/canvas-nav/sidebar.jsx +1 -1
- package/lib/samples/openyida-scaffold/canvas-nav/top.jsx +5 -4
- package/package.json +1 -1
- package/yida-skills/SKILL.md +2 -2
- package/yida-skills/references/yida-api.md +4 -0
- package/yida-skills/skills/yida-app/SKILL.md +12 -4
- package/yida-skills/skills/yida-app/references/entry-navigation.md +11 -9
- package/yida-skills/skills/yida-app/workflow/plan/step-4-deliver.md +1 -1
- package/yida-skills/skills/yida-app/workflow/plan/workflow.md +11 -4
- package/yida-skills/skills/yida-app/workflow/step-2-design.md +3 -3
- package/yida-skills/skills/yida-app/workflow/step-3-create-or-reuse-app.md +2 -2
- package/yida-skills/skills/yida-app/workflow/step-8-publish-navigation.md +3 -3
- package/yida-skills/skills/yida-app/workflow/step-9-output-finish.md +3 -2
- package/yida-skills/skills/yida-canvas-custom-page/SKILL.md +2 -2
- package/yida-skills/skills/yida-canvas-custom-page/references/canvas-style-implementation-guide.md +1 -1
- package/yida-skills/skills/yida-canvas-custom-page/references/canvas-theme-provider.md +1 -1
- package/yida-skills/skills/yida-canvas-custom-page/references/data-bridge-guide.md +140 -1
- package/yida-skills/skills/yida-canvas-custom-page/references/navigation-and-entry-guide.md +1 -1
- package/yida-skills/skills/yida-canvas-custom-page/scripts/canvas-theme-provider.template.jsx +1 -1
- package/yida-skills/skills/yida-canvas-data-binding/SKILL.md +7 -0
- package/yida-skills/skills/yida-create-form-page/SKILL.md +1 -1
- package/yida-skills/skills/yida-design/SKILL.md +5 -3
- package/yida-skills/skills/yida-design/references/application-style-library.md +22 -7
- package/yida-skills/skills/yida-design/references/application-theme-consistency.md +45 -5
- package/yida-skills/skills/yida-design/references/ask-human-interaction-contract.md +1 -1
- package/yida-skills/skills/yida-design/references/native-form-styles.md +1 -1
- package/yida-skills/skills/yida-design/references/navigation-decision.md +6 -4
- package/yida-skills/skills/yida-design/references/theme/app-custom-theme-template.css +62 -0
- package/yida-skills/skills/yida-design/references/theme-selection.md +10 -9
- package/yida-skills/skills/yida-design/references/visual-decision-engine.md +1 -1
- package/yida-skills/skills/yida-design/scripts/validate_design_themes.py +35 -9
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/SKILL.md +13 -3
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/build-plan-compact-schema.md +4 -2
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/build-plan-schema.md +4 -2
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/visual-design.md +3 -1
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/visual-theme-selection.md +15 -17
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/scripts/render_build_plan.py +2 -0
- package/yida-skills/skills/yida-design/templates/design-themes/README.md +15 -10
- package/yida-skills/skills/yida-design/templates/design-themes/app-amber/app_theme.css +224 -83
- package/yida-skills/skills/yida-design/templates/design-themes/app-amber/design.md +69 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-editorial/app_theme.css +224 -83
- package/yida-skills/skills/yida-design/templates/design-themes/app-editorial/design.md +69 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-executive/app_theme.css +244 -103
- package/yida-skills/skills/yida-design/templates/design-themes/app-executive/design.md +68 -13
- package/yida-skills/skills/yida-design/templates/design-themes/app-finance/app_theme.css +223 -82
- package/yida-skills/skills/yida-design/templates/design-themes/app-finance/design.md +68 -13
- package/yida-skills/skills/yida-design/templates/design-themes/app-glass/app_theme.css +225 -84
- package/yida-skills/skills/yida-design/templates/design-themes/app-glass/design.md +69 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-graphite/app_theme.css +244 -103
- package/yida-skills/skills/yida-design/templates/design-themes/app-graphite/design.md +68 -13
- package/yida-skills/skills/yida-design/templates/design-themes/app-line/app_theme.css +224 -83
- package/yida-skills/skills/yida-design/templates/design-themes/app-line/design.md +69 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-neon/app_theme.css +244 -103
- package/yida-skills/skills/yida-design/templates/design-themes/app-neon/design.md +68 -13
- package/yida-skills/skills/yida-design/templates/design-themes/app-nordic/app_theme.css +236 -89
- package/yida-skills/skills/yida-design/templates/design-themes/app-nordic/design.md +74 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-paper/app_theme.css +224 -83
- package/yida-skills/skills/yida-design/templates/design-themes/app-paper/design.md +68 -13
- package/yida-skills/skills/yida-design/templates/design-themes/app-platinum/app_theme.css +223 -82
- package/yida-skills/skills/yida-design/templates/design-themes/app-platinum/design.md +68 -13
- package/yida-skills/skills/yida-design/templates/design-themes/app-plum/app_theme.css +224 -83
- package/yida-skills/skills/yida-design/templates/design-themes/app-plum/design.md +68 -13
- package/yida-skills/skills/yida-design/templates/design-themes/app-pop/app_theme.css +240 -89
- package/yida-skills/skills/yida-design/templates/design-themes/app-pop/design.md +76 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-sage/app_theme.css +224 -83
- package/yida-skills/skills/yida-design/templates/design-themes/app-sage/design.md +69 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-teal/app_theme.css +224 -83
- package/yida-skills/skills/yida-design/templates/design-themes/app-teal/design.md +68 -13
- package/yida-skills/skills/yida-design/templates/design-themes/app-terminal/app_theme.css +254 -107
- package/yida-skills/skills/yida-design/templates/design-themes/app-terminal/design.md +74 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-ticket/app_theme.css +233 -88
- package/yida-skills/skills/yida-design/templates/design-themes/app-ticket/design.md +73 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-wire/app_theme.css +224 -83
- package/yida-skills/skills/yida-design/templates/design-themes/app-wire/design.md +69 -14
- package/yida-skills/skills/yida-design/templates/design-themes/basic-tokens.json +2 -1
- package/yida-skills/skills/yida-design/templates/design-themes/dark-inset-hairline/app_theme.css +690 -0
- package/yida-skills/skills/yida-design/templates/design-themes/{dark-inset-hairline.md → dark-inset-hairline/design.md} +103 -58
- package/yida-skills/skills/yida-design/templates/design-themes/dark-inset-hairline/form-layout.json +13 -0
- package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-fine-lines/app_theme.css +691 -0
- package/yida-skills/skills/yida-design/templates/design-themes/{dark-rail-fine-lines.md → dark-rail-fine-lines/design.md} +102 -50
- package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-fine-lines/form-layout.json +13 -0
- package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-signal-panels/app_theme.css +696 -0
- package/yida-skills/skills/yida-design/templates/design-themes/{dark-rail-signal-panels.md → dark-rail-signal-panels/design.md} +62 -12
- package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-signal-panels/form-layout.json +13 -0
- package/yida-skills/skills/yida-design/templates/design-themes/free-creative/app_theme.css +278 -115
- package/yida-skills/skills/yida-design/templates/design-themes/free-creative/design.md +57 -10
- package/yida-skills/skills/yida-design/templates/design-themes/graphite-bevel-grid/app_theme.css +692 -0
- package/yida-skills/skills/yida-design/templates/design-themes/{graphite-bevel-grid.md → graphite-bevel-grid/design.md} +60 -10
- package/yida-skills/skills/yida-design/templates/design-themes/graphite-bevel-grid/form-layout.json +13 -0
- package/yida-skills/skills/yida-design/templates/design-themes/hairline-shared-bands/app_theme.css +691 -0
- package/yida-skills/skills/yida-design/templates/design-themes/{hairline-shared-bands.md → hairline-shared-bands/design.md} +62 -12
- package/yida-skills/skills/yida-design/templates/design-themes/hairline-shared-bands/form-layout.json +13 -0
- package/yida-skills/skills/yida-design/templates/design-themes/hairline-soft-blocks/app_theme.css +691 -0
- package/yida-skills/skills/yida-design/templates/design-themes/{hairline-soft-blocks.md → hairline-soft-blocks/design.md} +57 -9
- package/yida-skills/skills/yida-design/templates/design-themes/hairline-soft-blocks/form-layout.json +13 -0
- package/yida-skills/skills/yida-design/templates/design-themes/index.json +141 -48
- package/yida-skills/skills/yida-design/templates/design-themes/ink-glow-soft-panels/app_theme.css +701 -0
- package/yida-skills/skills/yida-design/templates/design-themes/{ink-glow-soft-panels.md → ink-glow-soft-panels/design.md} +58 -8
- package/yida-skills/skills/yida-design/templates/design-themes/ink-glow-soft-panels/form-layout.json +13 -0
- package/yida-skills/skills/yida-design/templates/design-themes/inset-frame-pixel-rhythm/app_theme.css +691 -0
- package/yida-skills/skills/yida-design/templates/design-themes/{inset-frame-pixel-rhythm.md → inset-frame-pixel-rhythm/design.md} +59 -9
- package/yida-skills/skills/yida-design/templates/design-themes/inset-frame-pixel-rhythm/form-layout.json +13 -0
- package/yida-skills/skills/yida-design/templates/design-themes/outlined-texture-duotone/app_theme.css +698 -0
- package/yida-skills/skills/yida-design/templates/design-themes/{outlined-texture-duotone.md → outlined-texture-duotone/design.md} +62 -12
- package/yida-skills/skills/yida-design/templates/design-themes/outlined-texture-duotone/form-layout.json +13 -0
- package/yida-skills/skills/yida-design/templates/design-themes/soft-inset-surfaces/app_theme.css +691 -0
- package/yida-skills/skills/yida-design/templates/design-themes/{soft-inset-surfaces.md → soft-inset-surfaces/design.md} +59 -11
- package/yida-skills/skills/yida-design/templates/design-themes/soft-inset-surfaces/form-layout.json +13 -0
- package/yida-skills/skills/yida-design/templates/design-themes/soft-outline-rhythm/app_theme.css +690 -0
- package/yida-skills/skills/yida-design/templates/design-themes/{soft-outline-rhythm.md → soft-outline-rhythm/design.md} +60 -26
- package/yida-skills/skills/yida-design/templates/design-themes/soft-outline-rhythm/form-layout.json +13 -0
- package/yida-skills/skills/yida-design/templates/design-themes/soft-rail-bold-band/app_theme.css +698 -0
- package/yida-skills/skills/yida-design/templates/design-themes/{soft-rail-bold-band.md → soft-rail-bold-band/design.md} +99 -49
- package/yida-skills/skills/yida-design/templates/design-themes/soft-rail-bold-band/form-layout.json +13 -0
- package/yida-skills/skills/yida-design/templates/design-themes/soft-spectral-panels/app_theme.css +692 -0
- package/yida-skills/skills/yida-design/templates/design-themes/{soft-spectral-panels.md → soft-spectral-panels/design.md} +63 -13
- package/yida-skills/skills/yida-design/templates/design-themes/soft-spectral-panels/form-layout.json +13 -0
- package/yida-skills/skills/yida-design/templates/design-themes/warm-canvas-contrast-panels/app_theme.css +711 -0
- package/yida-skills/skills/yida-design/templates/design-themes/{warm-canvas-contrast-panels.md → warm-canvas-contrast-panels/design.md} +60 -10
- package/yida-skills/skills/yida-design/templates/design-themes/warm-canvas-contrast-panels/form-layout.json +13 -0
- package/yida-skills/skills/yida-design/templates/design-themes/warm-rail-muted-panels/app_theme.css +692 -0
- package/yida-skills/skills/yida-design/templates/design-themes/{warm-rail-muted-panels.md → warm-rail-muted-panels/design.md} +98 -50
- package/yida-skills/skills/yida-design/templates/design-themes/warm-rail-muted-panels/form-layout.json +13 -0
- package/yida-skills/skills/yida-design/templates/navigation-styles.json +769 -0
- package/yida-skills/skills/yida-design/workflow/output-design.md +5 -5
- package/yida-skills/skills/yida-design/workflow/step-2-theme-system.md +5 -3
- package/yida-skills/skills/yida-design/workflow/step-6-handoff.md +1 -1
- package/yida-skills/skills/yida-form-permission/SKILL.md +6 -0
- package/yida-skills/skills/yida-nav-shell/SKILL.md +1 -1
- package/yida-skills/skills/yida-nav-shell/references/nav-shell-patterns.md +6 -0
- package/yida-skills/skills/yida-page-config/SKILL.md +9 -0
- package/yida-skills/skills/yida-prd/SKILL.md +1 -0
- package/yida-skills/skills/yida-prd/workflow/output-prd.md +2 -2
- package/yida-skills/skills/yida-prd/workflow/step-2-information-architecture.md +1 -1
- package/yida-skills/skills/yida-requirement-analysis/references/experience-groups.md +45 -9
- package/yida-skills/skills/yida-requirement-analysis/references/handoff.md +5 -5
- package/yida-skills/skills/yida-requirement-analysis/workflow/prepare-brief.md +17 -4
- package/yida-skills/skills-index.json +2 -2
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
## 用途
|
|
4
4
|
|
|
5
5
|
- 用户已说明想要的风格,就按要求设计。
|
|
6
|
-
-
|
|
6
|
+
- Plan 没有明确完整风格时,读取本文,准备三套配色、表面层次和组件样式方案供用户选择。
|
|
7
7
|
- 用户选界面风格,AI 负责匹配实现用的主题模板。
|
|
8
8
|
|
|
9
9
|
## 核心关系
|
|
@@ -13,13 +13,14 @@
|
|
|
13
13
|
→ AI 定义项目视觉方向
|
|
14
14
|
→ 选择命名模板,或自由创意独立推演
|
|
15
15
|
→ 用户选择一套完整方向
|
|
16
|
-
→
|
|
16
|
+
→ 风格、配色和主题选择;导航结构沿用业务规划
|
|
17
|
+
→ 命名模板的导航明暗由模板派生;自由创意明确设计导航明暗
|
|
17
18
|
→ CLI 读取所选完整模板并生成 design.md
|
|
18
19
|
```
|
|
19
20
|
|
|
20
21
|
先按[设计方向比较](../../../references/theme-selection.md#设计方向比较)根据项目需求发展风格,可匹配主题索引中的模板,也可独立推演。按[应用风格与自由创意](../../../references/application-style-library.md)交付。
|
|
21
22
|
|
|
22
|
-
|
|
23
|
+
应用编排先根据业务需求确定导航结构。视觉设计沿用该结果,设计各页面共用的配色、背景、圆角和组件样式;命名模板的导航明暗采用模板 `navTheme`;自由创意由项目设计明确填写。页面内容、布局和操作顺序按业务规划执行。
|
|
23
24
|
|
|
24
25
|
主色按所选主题的公式推导,其他颜色沿用主题。已选方向承诺的画布、卡片、填充、字体或辅助色与模板不同时,将具体差异写入 `visualStyle.tokens`,不等待用户逐个指定色值。`description` 和 `colorStrategy.usage` 只说明用途,不会被编译成配色。按 [共用主题规则](../../../references/application-theme-consistency.md) 完成变量后再交接页面;渐变和图片按公共输出契约处理。Fast 与 Plan 使用相同规则。
|
|
25
26
|
|
|
@@ -40,8 +41,6 @@
|
|
|
40
41
|
"primaryColor": "#6F4E37",
|
|
41
42
|
"primaryColorName": "暖咖啡棕",
|
|
42
43
|
"contentTone": "light",
|
|
43
|
-
"navigationStructure": "side",
|
|
44
|
-
"navigationTone": "dark",
|
|
45
44
|
"recommendationReason": "适合需要持续查看关系历史和推进状态的日常工作。"
|
|
46
45
|
}
|
|
47
46
|
```
|
|
@@ -50,12 +49,12 @@
|
|
|
50
49
|
|
|
51
50
|
1. 第一项为推荐项。
|
|
52
51
|
2. `directionLabel`、`description` 和 `recommendationReason` 由 AI 根据项目的用户、任务和界面效果编写。
|
|
53
|
-
3.
|
|
54
|
-
4.
|
|
55
|
-
5.
|
|
52
|
+
3. `themeId` 必须来自索引,两个模板方向绑定不同记录,自由创意使用 catalog.creativeOption;模板路径由索引在选择后确定性补齐。
|
|
53
|
+
4. 模板候选保持已确认的导航结构,但不输出 `navigationTone`。候选可以通过不同主题呈现深色或浅色导航差异,这个差异来自主题模板,而不是 AI 单独填写字段;优先至少两项视觉维度不同。用户约束固定的部分保持不变。
|
|
54
|
+
5. 配色依据品牌素材、用户偏好和实际使用场景选择,并写清理由。用户明确菜单明暗时,将其作为主题筛选条件;用户未明确时不推导菜单明暗。
|
|
56
55
|
6. 用户明确品牌色时保留该颜色,通过主题基底、材质和组件表达形成差异。
|
|
57
|
-
7.
|
|
58
|
-
8.
|
|
56
|
+
7. 项目色彩和已确定的导航结构可覆盖模板对应输入;导航明暗不得覆盖模板 `navTheme`。用户导航明暗要求或表面层级、形状语言、组件机制等核心视觉特征与模板冲突时必须换一个基底。
|
|
57
|
+
8. 方案缺少匹配模板时走自由创意,填写独立设计决策和 Token。自由创意的导航明暗由项目设计决定,写入 navigationStyle.tone;内容与导航按[主题明暗双轴](../../../references/application-style-library.md#主题明暗双轴)分别设计。
|
|
59
58
|
|
|
60
59
|
平台导航沿用 `navigationType` 对应的顶部、侧边或 L 型布局。自定义导航由视觉设计细化顶部、侧边等菜单样式,按该入口已确定的配置范围实施。
|
|
61
60
|
|
|
@@ -124,9 +123,8 @@
|
|
|
124
123
|
},
|
|
125
124
|
"navigationStyle": {
|
|
126
125
|
"structure": "side",
|
|
127
|
-
"tone": "dark",
|
|
128
126
|
"source": "user_selected",
|
|
129
|
-
"selectionReason": "
|
|
127
|
+
"selectionReason": "持续工作场景需要稳定的侧边入口;导航明暗由所选主题模板确定。"
|
|
130
128
|
}
|
|
131
129
|
},
|
|
132
130
|
"internal": {
|
|
@@ -139,18 +137,18 @@
|
|
|
139
137
|
}
|
|
140
138
|
```
|
|
141
139
|
|
|
142
|
-
`build-plan.json` 保存选中方案;完整候选保留在 `ask_human`
|
|
140
|
+
`build-plan.json` 保存选中方案;完整候选保留在 `ask_human` 问答历史中。命名模板由 CLI 补入 `navigationStyle.tone` 和 `toneSource=theme_derived`;自由创意在 visual.json 中明确编写 tone=light|dark,CLI 标记 toneSource=project_defined,后续可通过 patch 修改该 tone。上例只展示选择事实,已选方向需要的画布、字体、辅助色等差异还须写入同级 `tokens`,见 [共用主题示例](../../../references/application-theme-consistency.md#先把风格落到变量)。
|
|
143
141
|
|
|
144
142
|
## 直接选择与自定义输入
|
|
145
143
|
|
|
146
|
-
-
|
|
147
|
-
-
|
|
144
|
+
- 只有用户已明确完整视觉风格、指定现有主题,或要求严格继承可信品牌/模板时,AI 才直接匹配一个有效基底并写入,`source=user_explicit | material_extracted`。单独的主题色、导航结构或导航明暗只作为候选约束,不视为已给出完整风格;导航明暗也不另存为可覆盖模板的输入。
|
|
145
|
+
- 用户在三套候选中明确采用推荐方案时,选择第一项,`source=user_selected`。
|
|
148
146
|
- 用户自由描述新方向时,先匹配核心视觉特征最近且不违反硬约束的模板。能够匹配则记录原文为 `customText` 并写入项目覆盖项。
|
|
149
|
-
-
|
|
147
|
+
- 所有模板都不支持时,沿用自由创意选项,从已确认业务独立推演并继续规划。
|
|
150
148
|
|
|
151
149
|
## 运行时读取边界
|
|
152
150
|
|
|
153
151
|
- Step 2 读取本规则和主题索引中的精简风格摘要,不读取候选模板全文。
|
|
154
152
|
- 候选阶段只提供方向名称、配色与体验说明。
|
|
155
|
-
-
|
|
153
|
+
- 用户选择后保存选中方向、内部主题绑定、导航结构和实现该方向所需的 token 差异;CLI 从模板读取导航明暗。
|
|
156
154
|
- 用户确认主题后,规划时读取 CLI 返回的主题上下文;CLI 仅按已确认的 selectedTheme.themeId 读取选中的完整模板生成文档。
|
package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/scripts/render_build_plan.py
CHANGED
|
@@ -941,6 +941,8 @@ def render_execution(data: dict[str, Any]) -> str:
|
|
|
941
941
|
hidden_pages = execution.get("pageNavigation") or []
|
|
942
942
|
if hidden_pages:
|
|
943
943
|
parts += ["<h3>页面导航</h3>", table(["页面", "平台页面导航"], [[item.get("name"), "隐藏" if item.get("isRenderNav") is False else "显示"] for item in hidden_pages])]
|
|
944
|
+
if execution.get("entryModeSummary"):
|
|
945
|
+
parts += ["<h3>系统怎么使用</h3>", f'<p>{esc(execution["entryModeSummary"])}</p>']
|
|
944
946
|
for entry in (execution.get("entryRecommendation") or {}).get("entries", []):
|
|
945
947
|
rows = []
|
|
946
948
|
|
|
@@ -5,24 +5,28 @@
|
|
|
5
5
|
## 文件职责
|
|
6
6
|
|
|
7
7
|
- [index.json](index.json) 维护主题 ID、用户可读名称、模板路径和选型摘要,`schemaVersion` 为 `2.0`。
|
|
8
|
-
- `<themeId
|
|
9
|
-
-
|
|
8
|
+
- `<themeId>/design.md` 保存完整 V2 主题模板,是视觉规则和 Token 数值的事实源。
|
|
9
|
+
- 每个主题目录统一包含 `design.md`、`app_theme.css`、`form-layout.json` 三个文件;CSS 保留品牌颜色占位,布局文件提供可填入业务字段的组件结构。
|
|
10
|
+
- [basic-tokens.json](basic-tokens.json) 保存 70 个全局变量及固定值,作为模板校验依据。
|
|
10
11
|
- [validate_design_themes.py](../../scripts/validate_design_themes.py) 校验索引、模板及变量引用。
|
|
11
12
|
|
|
12
13
|
每条索引记录包含以下字段:
|
|
13
14
|
|
|
14
15
|
| 字段 | 维护要求 |
|
|
15
16
|
| --- | --- |
|
|
16
|
-
| `themeId` | 唯一的小写连字符 ID,与模板 frontmatter
|
|
17
|
+
| `themeId` | 唯一的小写连字符 ID,与模板 frontmatter 和主题目录名一致 |
|
|
17
18
|
| `label` | 唯一的用户可读名称 |
|
|
18
|
-
| `templatePath` | `templates/design-themes/<themeId
|
|
19
|
-
| `
|
|
19
|
+
| `templatePath` | `templates/design-themes/<themeId>/design.md`,相对公共 `yida-design` 根目录 |
|
|
20
|
+
| `cssTemplatePath` | `templates/design-themes/<themeId>/app_theme.css` |
|
|
21
|
+
| `formLayoutPath` | `templates/design-themes/<themeId>/form-layout.json` |
|
|
22
|
+
| `legacyTemplatePath` | 已迁移主题的原 Markdown 路径,供历史方案读取;新方案使用 `templatePath` |
|
|
23
|
+
| `styleSummary` | 以“深色/浅色导航,深色/浅色内容界面。”开头,再从模板“风格摘要”精简约 150–250 字;使用自然语言,避免把 `dark` 误解为纯黑色,同时保留外观、核心差异、偏离风险与真实内容适用条件 |
|
|
20
24
|
|
|
21
|
-
|
|
25
|
+
34 个主题入口均采用三文件结构,可通过 `sample yida-design application-style --style-id <themeId>` 导出。一条索引记录对应一个主题目录,所有模板均须登记。修改风格摘要后同步修改索引摘要,不增加原文没有的特征或另一组关键词。`openyida design-plan catalog --json` 返回同一份索引;三种设计入口不得维护平行主题清单。主题不按业务领域或产品形态限制候选资格,具体布局与特色表达由真实内容决定。
|
|
22
26
|
|
|
23
27
|
## V2 模板结构
|
|
24
28
|
|
|
25
|
-
Frontmatter 包含 `name`、`description`、`themeId` 和 `tokens
|
|
29
|
+
Frontmatter 包含 `name`、`description`、`themeId`、`navTheme` 和 `tokens`;`navTheme` 只允许 `light` 或 `dark`,并与主题导航 Token 的实际明暗一致。正文依次包含五个章节:
|
|
26
30
|
|
|
27
31
|
1. 风格摘要
|
|
28
32
|
2. 页面视觉系统
|
|
@@ -34,13 +38,14 @@ Frontmatter 包含 `name`、`description`、`themeId` 和 `tokens`。正文依
|
|
|
34
38
|
|
|
35
39
|
## Token 契约
|
|
36
40
|
|
|
37
|
-
`tokens.application-global` 按 `appearance`(含表面和导航)、`colors`、`typography`、`spacing`、`rounded`、`shadow` 分组,完整定义契约中的
|
|
41
|
+
`tokens.application-global` 按 `appearance`(含表面和导航)、`colors`、`typography`、`spacing`、`rounded`、`shadow` 分组,完整定义契约中的 70 个基础变量;这是最小集合,允许按角色补充变量。`tokens.custom-page` 可为空,也可组织跨页面与组件复用的项目扩展变量,包括材质、布局、字体、动效等。两组均写入主题 CSS 的 `:root`,分组不是运行时隔离作用域,变量前缀不限定为 `--oyd-*`。递归读取以 `--` 开头的标量叶子,分组名不拼入 CSS 变量名。
|
|
38
42
|
|
|
39
43
|
- 字体与间距使用契约固定值;页面标题使用 subhead,表格正文使用 table。
|
|
40
44
|
- 颜色与圆角保留主题差异。Tooltip 固定使用 `#262626` 与 `#FFFFFF`。
|
|
41
45
|
- `--color-white` 和 `--pod-table-cell-color` 通过 `var(--pod-card-bg-color)` 继承内容表面;页面桥接 `--oyd-page-bg` 若存在,使用 `var(--pod-page-bg-color)`。
|
|
42
|
-
-
|
|
46
|
+
- `design.md` 与 `app_theme.css` 中,`--color-brand1-6` 保留 `{{PRIMARY_COLOR}}`,`--color-brand1-1` 保留品牌悬停色的同源生成占位,其他品牌档位也由主色种子推导。`<生成实际色值:…>` 属于推导指令,项目化时替换为实际 CSS 值。先完成项目 `design.md`,再运行 `sample yida-design app-theme --design-file <design.md> --output <app_theme.css>`;该命令会替换导出 CSS 的占位。
|
|
43
47
|
- 变量名在两层及各分组中均唯一;平台基础与项目扩展均在主题中声明,可无环引用,并按实际设计补充变量。声明与正文中的引用必须存在,不得循环引用,不使用后缀缩写或 `*` 通配写法。
|
|
48
|
+
- 原生导航选中项阴影统一由 `--pod-nav-menu-item-selected-shadow` 控制;不需要额外标记的主题显式写 `none`,需要标记的主题写完整 `box-shadow` 值。该值不绑定方向:左、右、下强调线分别使用正水平偏移、负水平偏移、负垂直偏移的 `inset` 阴影。公共 CSS 模板负责消费该变量,主题模板不保存平台 DOM 选择器。
|
|
44
49
|
- 标量可用双引号、单引号或普通 CSS 文本;数字可以不加引号。不使用 YAML 数组、别名、标签或多行标量。
|
|
45
50
|
|
|
46
51
|
## 项目化占位符
|
|
@@ -63,6 +68,6 @@ npm run check:skills
|
|
|
63
68
|
|
|
64
69
|
校验器只依赖 Python 3.9+ 标准库;`check:skills` 自动尝试 `python3`、`python`、Windows 的 `py -3`,找不到可用解释器时明确失败,不能跳过。`check:ci` 已包含 `check:skills`。
|
|
65
70
|
|
|
66
|
-
`check:skills` 还通过 CLI 的公共主题校验检查 `references/theme/app-custom-theme-template.css
|
|
71
|
+
`check:skills` 还通过 CLI 的公共主题校验检查 `references/theme/app-custom-theme-template.css`,包括括号、字符串和注释闭合、品牌色阶及受限内容。主题生成测试检查全部主题的 token 位于顶层 `:root`,并保留白色、灰色导航的变量引用与回退链;不能用正则匹配到变量代替作用域验证。
|
|
67
72
|
|
|
68
73
|
校验覆盖索引与模板一一对应、ID 和路径安全、五章节与四个项目占位符、分组变量声明、固定值、同源关系、未知与循环引用。测试使用真实共享库,并以缺失字段、非法路径、固定值漂移和错误引用等坏样例验证错误能被拦截。
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* --design-file <design.md> --output <app-theme.css> 生成主题。
|
|
14
14
|
* 2. 修改 design.md 后重跑同一命令,CLI 增量更新 token 并保留其他定制。
|
|
15
15
|
* 省略 --design-file 会重置模板,不用于保留已有定制的更新。
|
|
16
|
-
* 3.
|
|
16
|
+
* 3. 品牌值保留项目占位和派生说明;先完成 design.md,再生成实际主题 CSS。
|
|
17
17
|
* 4. 应用品牌色阶只使用平台实际生成的 --color-brand1-1、2、3、5、6、9、10;
|
|
18
18
|
* CLI 同时生成 --color-brand-1 至 --color-brand-4 和 --color-group,不要补造 4、7、8。
|
|
19
19
|
* 5. 若 design.md 选择其他主色,必须同步替换品牌色阶、基础色阶、图表色组,以及模板中按钮、
|
|
@@ -35,13 +35,13 @@
|
|
|
35
35
|
--color-white: var(--pod-card-bg-color);
|
|
36
36
|
|
|
37
37
|
/* brand */
|
|
38
|
-
--color-brand1-1: #
|
|
39
|
-
--color-brand1-2: #
|
|
40
|
-
--color-brand1-3: #
|
|
41
|
-
--color-brand1-5: #
|
|
42
|
-
--color-brand1-6:
|
|
43
|
-
--color-brand1-9: #
|
|
44
|
-
--color-brand1-10: #
|
|
38
|
+
--color-brand1-1: <生成实际色值:--color-brand1-6 88% + #FFFFFF 12%,sRGB 逐通道混合>;
|
|
39
|
+
--color-brand1-2: <生成实际色值:--color-brand1-6 12% + #FFFFFF 88%,sRGB 逐通道混合>;
|
|
40
|
+
--color-brand1-3: <生成实际色值:--color-brand1-6 4% + #FFFFFF 96%,sRGB 逐通道混合>;
|
|
41
|
+
--color-brand1-5: <生成实际色值:--color-brand1-6 38% + #171717 62%,sRGB 逐通道混合>;
|
|
42
|
+
--color-brand1-6: {{PRIMARY_COLOR}};
|
|
43
|
+
--color-brand1-9: <生成实际色值:--color-brand1-6 76% + #000000 24%,sRGB 逐通道混合>;
|
|
44
|
+
--color-brand1-10: <生成实际色值:--color-brand1-6 26% + #202020 74%,sRGB 逐通道混合>;
|
|
45
45
|
|
|
46
46
|
/* line */
|
|
47
47
|
--color-line1-1: #d6cbb8;
|
|
@@ -95,11 +95,11 @@
|
|
|
95
95
|
|
|
96
96
|
/* rounded */
|
|
97
97
|
--corner-zero: 0px;
|
|
98
|
-
--corner-1:
|
|
99
|
-
--corner-2:
|
|
100
|
-
--corner-3:
|
|
101
|
-
--corner-4:
|
|
102
|
-
--corner-5:
|
|
98
|
+
--corner-1: 3px;
|
|
99
|
+
--corner-2: 3px;
|
|
100
|
+
--corner-3: 3px;
|
|
101
|
+
--corner-4: 3px;
|
|
102
|
+
--corner-5: 3px;
|
|
103
103
|
--corner-circle: 50%;
|
|
104
104
|
--corner-semicircle: 500px;
|
|
105
105
|
|
|
@@ -167,12 +167,12 @@
|
|
|
167
167
|
|
|
168
168
|
/* 新主题下变量 */
|
|
169
169
|
/* shell 背景 padding 圆角 */
|
|
170
|
-
--pod-shell-bg-color-light: var(--color-brand1-2,
|
|
170
|
+
--pod-shell-bg-color-light: var(--color-brand1-2, var(--color-brand1-2));
|
|
171
171
|
--pod-shell-bg-color-white: #fff;
|
|
172
172
|
--pod-shell-bg-color-gray: var(--pod-common-bg-color, #f0f2f5);
|
|
173
|
-
--pod-shell-bg-color-dark: var(--color-brand1-5,
|
|
173
|
+
--pod-shell-bg-color-dark: var(--color-brand1-5, var(--color-brand1-5));
|
|
174
174
|
--pod-shell-padding: 4px;
|
|
175
|
-
--pod-shell-lshape-border-radius:
|
|
175
|
+
--pod-shell-lshape-border-radius: 3px;
|
|
176
176
|
/* 新版主题shell main 容器相关 暂时不需要这个变量,写死用户不可配置 */
|
|
177
177
|
--pod-shell-content-container-padding: 0px;
|
|
178
178
|
--pod-shell-content-container-margin: 0px;
|
|
@@ -212,7 +212,7 @@
|
|
|
212
212
|
--pod-formView-stickyFooter-box-shadow: none;
|
|
213
213
|
--pod-formView-stickyFooter-height: 56px;
|
|
214
214
|
--pod-formView-stickyFooter-bottom: 8px;
|
|
215
|
-
--pod-page-header-bg-color: var(--color
|
|
215
|
+
--pod-page-header-bg-color: var(--pod-shell-theme-bg-color);
|
|
216
216
|
|
|
217
217
|
/* 原生表单:按项目设计调整控件形状、密度和填充,不通过全局 input 选择器覆盖状态。 */
|
|
218
218
|
--form-element-medium-corner: 3px;
|
|
@@ -258,8 +258,8 @@
|
|
|
258
258
|
--pod-nav-page-white-bg-color: rgba(246, 247, 247, 1);
|
|
259
259
|
--pod-nav-page-padding: var(--pod-lg-gap-pad-margin, 16px);
|
|
260
260
|
--pod-nav-top-main-border-width: 1px;
|
|
261
|
-
--pod-nav-top-main-border-color: #
|
|
262
|
-
--pod-nav-l-sub-main-bg-color: var(--color
|
|
261
|
+
--pod-nav-top-main-border-color: #D1B477;
|
|
262
|
+
--pod-nav-l-sub-main-bg-color: var(--pod-shell-theme-bg-color);
|
|
263
263
|
--pod-nav-l-header-gap: 28px;
|
|
264
264
|
--pod-nav-l-header-padding: 8px 16px;
|
|
265
265
|
--pod-nav-l-aside-padding: 8px;
|
|
@@ -282,7 +282,7 @@
|
|
|
282
282
|
--pod-nav-top-tab-item-max-width: 120px;
|
|
283
283
|
--pod-nav-top-tab-item-padding: 0 12px;
|
|
284
284
|
--pod-nav-top-tab-item-inner-padding: 12px 0;
|
|
285
|
-
--pod-nav-top-tab-indicator-width:
|
|
285
|
+
--pod-nav-top-tab-indicator-width: 0px;
|
|
286
286
|
|
|
287
287
|
/* 新版导航平台 Header、内容行与操作区。 */
|
|
288
288
|
--pod-nav-platform-header-height: 48px;
|
|
@@ -296,48 +296,52 @@
|
|
|
296
296
|
--pod-nav-platform-action-badge-font-size: 9px;
|
|
297
297
|
--pod-nav-platform-action-badge-radius: 7px;
|
|
298
298
|
--pod-nav-platform-action-badge-digit-width: 6px;
|
|
299
|
-
--pod-nav-action-border:
|
|
299
|
+
--pod-nav-action-border: 1px solid #D1B477;
|
|
300
300
|
--pod-nav-ai-wenban-border-color: #ffffff3d;
|
|
301
301
|
--pod-nav-ai-wenban-bg:
|
|
302
302
|
radial-gradient(64px 24px at 31% 0%, transparent, rgba(0, 0, 0, 0.6)),
|
|
303
303
|
linear-gradient(
|
|
304
304
|
161deg,
|
|
305
|
-
var(--color-brand1-1, #
|
|
306
|
-
var(--color-brand1-5, #
|
|
307
|
-
var(--color-brand1-9, #
|
|
305
|
+
var(--color-brand1-1, #4584B3) 5.22%,
|
|
306
|
+
var(--color-brand1-5, #1F3A4E) 50.54%,
|
|
307
|
+
var(--color-brand1-9, #215780) 89.61%
|
|
308
308
|
);
|
|
309
309
|
--pod-nav-ai-wenban-text-color: var(--color-text1-5, #fff);
|
|
310
310
|
--pod-nav-logo-gap: 8px;
|
|
311
311
|
--pod-nav-logo-padding: 4px 8px;
|
|
312
|
-
--pod-nav-logo-bg: var(--
|
|
313
|
-
--pod-nav-logo-border:
|
|
314
|
-
--pod-nav-logo-icon: var(--
|
|
315
|
-
--pod-nav-logo-border-radius:
|
|
312
|
+
--pod-nav-logo-bg: var(--pod-nav-menu-bg-selected-color);
|
|
313
|
+
--pod-nav-logo-border: 1px solid #D1B477;
|
|
314
|
+
--pod-nav-logo-icon: var(--pod-nav-item-text-selected-color);
|
|
315
|
+
--pod-nav-logo-border-radius: 3px;
|
|
316
316
|
--pod-nav-logo-size: 32px;
|
|
317
317
|
--pod-nav-logo-img-size: calc(var(--pod-nav-logo-size, 32px) - 6px);
|
|
318
318
|
|
|
319
319
|
/* 新版导航搜索 & 菜单栏 & 导航项气泡 */
|
|
320
320
|
--pod-nav-search-height: var(--pod-nav-platform-row-height, 32px);
|
|
321
|
-
--pod-nav-search-border-color:
|
|
321
|
+
--pod-nav-search-border-color: #D1B477;
|
|
322
322
|
--pod-nav-search-menu-gap: 8px;
|
|
323
323
|
--pod-nav-menu-panel-search-padding-top: 8px;
|
|
324
324
|
--pod-nav-menu-panel-top: 12px;
|
|
325
325
|
--pod-nav-menu-panel-after-collapse-top: 40px;
|
|
326
326
|
--pod-nav-menu-item-height: 36px;
|
|
327
327
|
--pod-nav-menu-item-padding: 8px;
|
|
328
|
-
--pod-nav-menu-item-radius:
|
|
328
|
+
--pod-nav-menu-item-radius: 3px;
|
|
329
|
+
--pod-nav-menu-item-border: 1px solid #D1B477;
|
|
330
|
+
--pod-nav-menu-item-hover-border: 1px solid #754B13;
|
|
331
|
+
--pod-nav-menu-item-selected-border: 1px solid #593607;
|
|
329
332
|
--pod-nav-menu-font-size: 14px;
|
|
330
|
-
--pod-nav-menu-item-selected-font-weight:
|
|
333
|
+
--pod-nav-menu-item-selected-font-weight: 600;
|
|
334
|
+
--pod-nav-menu-item-selected-shadow: none;
|
|
331
335
|
--pod-nav-menu-line-height: 20px;
|
|
332
336
|
--pod-nav-menu-icon-size: 16px;
|
|
333
337
|
--pod-nav-menu-arrow-icon-size: 12px;
|
|
334
|
-
--pod-nav-menu-gap:
|
|
338
|
+
--pod-nav-menu-gap: 4px;
|
|
335
339
|
--pod-nav-menu-item-gap: 4px;
|
|
336
340
|
--pod-nav-popup-width: 220px;
|
|
337
341
|
--pod-nav-popup-max-height: 400px;
|
|
338
342
|
--pod-nav-popup-padding: 8px;
|
|
339
|
-
--pod-nav-popup-border-radius:
|
|
340
|
-
--pod-nav-popup-shadow:
|
|
343
|
+
--pod-nav-popup-border-radius: 3px;
|
|
344
|
+
--pod-nav-popup-shadow: none;
|
|
341
345
|
|
|
342
346
|
/* 侧导菜单滚动区底部渐隐遮罩高度,并预留等高底部空间。 */
|
|
343
347
|
--pod-nav-menu-fade-height: 32px;
|
|
@@ -355,12 +359,33 @@
|
|
|
355
359
|
--page-bg: var(--pod-page-bg-color, #fff);
|
|
356
360
|
--card-bg: var(--pod-card-bg-color, #fff);
|
|
357
361
|
--popup-bg: var(--color-fill1-5, #fff);
|
|
358
|
-
--pod-shell-theme-bg-color: #
|
|
359
|
-
--pod-nav-item-text-color: #
|
|
360
|
-
--pod-nav-item-text-hover-color: #
|
|
361
|
-
--pod-nav-item-text-selected-color:
|
|
362
|
-
--pod-nav-menu-bg-hover-color: #
|
|
363
|
-
--pod-nav-menu-bg-selected-color: #
|
|
362
|
+
--pod-shell-theme-bg-color: #FFF0CD;
|
|
363
|
+
--pod-nav-item-text-color: #754B13;
|
|
364
|
+
--pod-nav-item-text-hover-color: #593607;
|
|
365
|
+
--pod-nav-item-text-selected-color: #FFF8E6;
|
|
366
|
+
--pod-nav-menu-bg-hover-color: #F4DFAA;
|
|
367
|
+
--pod-nav-menu-bg-selected-color: #754B13;
|
|
368
|
+
--pod-nav-logo-text: var(--pod-nav-item-text-hover-color);
|
|
369
|
+
--pod-nav-sub-divider-color: #D1B477;
|
|
370
|
+
--pod-nav-item-text-disabled-color: rgba(24,28,31,.30);
|
|
371
|
+
--pod-nav-l-container-bg: var(--pod-shell-theme-bg-color);
|
|
372
|
+
--pod-nav-l-group-label-color: var(--pod-nav-item-text-color);
|
|
373
|
+
--pod-nav-l-search-border-color: #D1B477;
|
|
374
|
+
--pod-nav-popup-bg-color: var(--pod-shell-theme-bg-color);
|
|
375
|
+
--pod-nav-tab-line-hover-color: var(--pod-nav-item-text-hover-color);
|
|
376
|
+
--pod-nav-tab-line-selected-color: var(--pod-nav-item-text-hover-color);
|
|
377
|
+
--pod-nav-search-bg-color: var(--pod-nav-menu-bg-hover-color);
|
|
378
|
+
--pod-nav-search-bg-hover-color: var(--pod-nav-menu-bg-hover-color);
|
|
379
|
+
--pod-nav-search-bg-active-color: var(--pod-nav-menu-bg-hover-color);
|
|
380
|
+
--pod-nav-search-placeholder-color: var(--pod-nav-item-text-color);
|
|
381
|
+
--pod-nav-search-text-color: var(--pod-nav-item-text-hover-color);
|
|
382
|
+
--pod-nav-search-icon-color: var(--pod-nav-item-text-color);
|
|
383
|
+
--pod-nav-search-border-hover-color: var(--pod-nav-item-text-hover-color);
|
|
384
|
+
--pod-nav-search-border-active-color: var(--pod-nav-item-text-hover-color);
|
|
385
|
+
--pod-nav-action-icon-color: var(--pod-nav-item-text-color);
|
|
386
|
+
--pod-nav-action-border-color: #D1B477;
|
|
387
|
+
--pod-nav-action-bg-hover-color: var(--pod-nav-menu-bg-hover-color);
|
|
388
|
+
--pod-nav-action-bg-active-color: var(--pod-nav-menu-bg-hover-color);
|
|
364
389
|
--input-hover-bg-color: #fffefa;
|
|
365
390
|
--oyd-page-bg: var(--pod-page-bg-color);
|
|
366
391
|
--oyd-surface: var(--pod-card-bg-color);
|
|
@@ -378,11 +403,11 @@
|
|
|
378
403
|
--oyd-rule-style: solid;
|
|
379
404
|
--oyd-layout-columns: minmax(0, 4fr) minmax(0, 4fr) minmax(0, 4fr);
|
|
380
405
|
--oyd-surface-shadow: none;
|
|
381
|
-
--color-brand-1:
|
|
382
|
-
--color-brand-2:
|
|
383
|
-
--color-brand-3:
|
|
384
|
-
--color-brand-4:
|
|
385
|
-
--color-group:
|
|
406
|
+
--color-brand-1: var(--color-brand1-10);
|
|
407
|
+
--color-brand-2: var(--color-brand1-1);
|
|
408
|
+
--color-brand-3: var(--color-brand1-6);
|
|
409
|
+
--color-brand-4: var(--color-brand1-9);
|
|
410
|
+
--color-group: var(--color-brand1-6), var(--color-brand1-1), var(--color-brand1-5), var(--color-brand1-2), var(--color-brand1-9), var(--color-brand1-3);
|
|
386
411
|
}
|
|
387
412
|
|
|
388
413
|
/* 独立提交页(含抽屉 iframe)使用应用外衬;平台默认壳层取导航背景且不消费背景图。 */
|
|
@@ -394,6 +419,22 @@ body.pod-premium.page-type-submit .vc-shell-without-nav.pod-premium {
|
|
|
394
419
|
background-size: cover;
|
|
395
420
|
}
|
|
396
421
|
|
|
422
|
+
/* 原生详情属于内容区,独立页面和抽屉内都沿用内容画布与前景。 */
|
|
423
|
+
body.pod-premium.page-type-detail .vc-shell-without-nav.pod-premium {
|
|
424
|
+
background-color: var(--pod-page-bg-color, var(--color-white, #fff));
|
|
425
|
+
--pod-theme-text-color: var(--color-text1-4, #202020);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
/* 详情顶栏的独立图标使用内容文字色,保留按钮自身的禁用状态。 */
|
|
429
|
+
body.pod-premium.page-type-detail .top-banner-area
|
|
430
|
+
.next-yida-button-iconOnly:not([disabled]):not(.disabled) .next-icon {
|
|
431
|
+
color: var(--color-text1-3, #737373);
|
|
432
|
+
}
|
|
433
|
+
body.pod-premium.page-type-detail .top-banner-area
|
|
434
|
+
.next-yida-button-iconOnly:not([disabled]):not(.disabled):hover .next-icon {
|
|
435
|
+
color: var(--color-text1-4, #202020);
|
|
436
|
+
}
|
|
437
|
+
|
|
397
438
|
/* 按实际底栏类型适配 PC 固定提交栏,不按有无导航判断。
|
|
398
439
|
* 排除 DATA_MANAGE 和容器内 sticky 模式;抽屉提交标记按平台规则优先。
|
|
399
440
|
* 管理页、旧主题、移动端继续由各自布局负责占位。 */
|
|
@@ -448,44 +489,46 @@ body.pod-premium.page-type-submit
|
|
|
448
489
|
|
|
449
490
|
:root {
|
|
450
491
|
/* Light theme defaults. */
|
|
451
|
-
--pod-nav-logo-text: var(--
|
|
452
|
-
--pod-nav-sub-divider-color:
|
|
453
|
-
--pod-nav-item-text-color: #
|
|
454
|
-
--pod-nav-item-text-hover-color: #
|
|
455
|
-
--pod-nav-item-text-disabled-color: rgba(24,
|
|
456
|
-
--pod-nav-item-text-selected-color:
|
|
457
|
-
--pod-nav-menu-bg-hover-color: #
|
|
458
|
-
--pod-nav-menu-bg-selected-color: #
|
|
459
|
-
--pod-nav-l-container-bg:
|
|
460
|
-
--pod-nav-l-group-label-color:
|
|
461
|
-
--pod-nav-l-search-border-color:
|
|
462
|
-
--pod-nav-popup-bg-color: var(--
|
|
463
|
-
--pod-nav-tab-line-hover-color: var(--
|
|
464
|
-
--pod-nav-tab-line-selected-color: var(--
|
|
465
|
-
--pod-nav-search-bg-color: var(--
|
|
466
|
-
--pod-nav-search-bg-hover-color: var(--
|
|
467
|
-
--pod-nav-search-bg-active-color:
|
|
468
|
-
--pod-nav-search-placeholder-color: var(--
|
|
469
|
-
--pod-nav-search-text-color: var(--
|
|
470
|
-
--pod-nav-search-icon-color: var(--
|
|
471
|
-
--pod-nav-search-border-hover-color: var(--
|
|
472
|
-
--pod-nav-search-border-active-color: var(--
|
|
473
|
-
--pod-nav-action-icon-color: var(--
|
|
474
|
-
--pod-nav-action-border-color:
|
|
475
|
-
--pod-nav-action-bg-hover-color:
|
|
476
|
-
--pod-nav-action-bg-active-color:
|
|
492
|
+
--pod-nav-logo-text: var(--pod-nav-item-text-hover-color);
|
|
493
|
+
--pod-nav-sub-divider-color: #D1B477;
|
|
494
|
+
--pod-nav-item-text-color: #754B13;
|
|
495
|
+
--pod-nav-item-text-hover-color: #593607;
|
|
496
|
+
--pod-nav-item-text-disabled-color: rgba(24,28,31,.30);
|
|
497
|
+
--pod-nav-item-text-selected-color: #FFF8E6;
|
|
498
|
+
--pod-nav-menu-bg-hover-color: #F4DFAA;
|
|
499
|
+
--pod-nav-menu-bg-selected-color: #754B13;
|
|
500
|
+
--pod-nav-l-container-bg: var(--pod-shell-theme-bg-color);
|
|
501
|
+
--pod-nav-l-group-label-color: var(--pod-nav-item-text-color);
|
|
502
|
+
--pod-nav-l-search-border-color: #D1B477;
|
|
503
|
+
--pod-nav-popup-bg-color: var(--pod-shell-theme-bg-color);
|
|
504
|
+
--pod-nav-tab-line-hover-color: var(--pod-nav-item-text-hover-color);
|
|
505
|
+
--pod-nav-tab-line-selected-color: var(--pod-nav-item-text-hover-color);
|
|
506
|
+
--pod-nav-search-bg-color: var(--pod-nav-menu-bg-hover-color);
|
|
507
|
+
--pod-nav-search-bg-hover-color: var(--pod-nav-menu-bg-hover-color);
|
|
508
|
+
--pod-nav-search-bg-active-color: var(--pod-nav-menu-bg-hover-color);
|
|
509
|
+
--pod-nav-search-placeholder-color: var(--pod-nav-item-text-color);
|
|
510
|
+
--pod-nav-search-text-color: var(--pod-nav-item-text-hover-color);
|
|
511
|
+
--pod-nav-search-icon-color: var(--pod-nav-item-text-color);
|
|
512
|
+
--pod-nav-search-border-hover-color: var(--pod-nav-item-text-hover-color);
|
|
513
|
+
--pod-nav-search-border-active-color: var(--pod-nav-item-text-hover-color);
|
|
514
|
+
--pod-nav-action-icon-color: var(--pod-nav-item-text-color);
|
|
515
|
+
--pod-nav-action-border-color: #D1B477;
|
|
516
|
+
--pod-nav-action-bg-hover-color: var(--pod-nav-menu-bg-hover-color);
|
|
517
|
+
--pod-nav-action-bg-active-color: var(--pod-nav-menu-bg-hover-color);
|
|
477
518
|
--pod-theme-text-color: var(--color-text1-4, #202020);
|
|
478
519
|
--pod-page-header-text-color: var(--pod-theme-text-color, var(--color-text1-4, #202020));
|
|
479
520
|
}
|
|
480
521
|
|
|
481
522
|
.pod-premium.nav-light {
|
|
482
|
-
--pod-shell-theme-bg-color: #
|
|
483
|
-
--pod-page-header-bg-color:
|
|
523
|
+
--pod-shell-theme-bg-color: #FFF0CD;
|
|
524
|
+
--pod-page-header-bg-color: var(--pod-shell-theme-bg-color);
|
|
525
|
+
--pod-shell-lshape-border-radius: 3px;
|
|
484
526
|
}
|
|
485
527
|
|
|
486
528
|
.pod-premium.nav-dark {
|
|
487
529
|
--pod-shell-theme-bg-color: var(--pod-shell-bg-color-dark, var(--color-brand1-5, rgba(52, 50, 44, 1)));
|
|
488
530
|
--pod-page-header-bg-color: var(--pod-shell-theme-bg-color, var(--color-white, #fff));
|
|
531
|
+
--pod-shell-lshape-border-radius: 16px;
|
|
489
532
|
}
|
|
490
533
|
|
|
491
534
|
.pod-premium.nav-white {
|
|
@@ -501,15 +544,53 @@ body.pod-premium.page-type-submit
|
|
|
501
544
|
.pod-premium.is-light {
|
|
502
545
|
--pod-theme-text-color: var(--color-text1-4, #202020);
|
|
503
546
|
--pod-page-header-text-color: var(--pod-theme-text-color, var(--color-text1-4, #202020));
|
|
504
|
-
--pod-nav-logo-bg: var(--
|
|
505
|
-
--pod-nav-logo-border:
|
|
506
|
-
--pod-nav-item-text-selected-color:
|
|
507
|
-
--pod-nav-menu-bg-selected-color: #
|
|
508
|
-
--pod-nav-popup-bg-color: var(--color
|
|
509
|
-
--pod-nav-action-icon-color: var(--
|
|
510
|
-
--pod-nav-item-text-color: #
|
|
511
|
-
--pod-nav-item-text-hover-color: #
|
|
512
|
-
--pod-nav-menu-bg-hover-color: #
|
|
547
|
+
--pod-nav-logo-bg: var(--pod-nav-menu-bg-selected-color);
|
|
548
|
+
--pod-nav-logo-border: 1px solid #D1B477;
|
|
549
|
+
--pod-nav-item-text-selected-color: #FFF8E6;
|
|
550
|
+
--pod-nav-menu-bg-selected-color: #754B13;
|
|
551
|
+
--pod-nav-popup-bg-color: var(--pod-shell-theme-bg-color);
|
|
552
|
+
--pod-nav-action-icon-color: var(--pod-nav-item-text-color);
|
|
553
|
+
--pod-nav-item-text-color: #754B13;
|
|
554
|
+
--pod-nav-item-text-hover-color: #593607;
|
|
555
|
+
--pod-nav-menu-bg-hover-color: #F4DFAA;
|
|
556
|
+
--pod-nav-l-sub-main-bg-color: var(--pod-shell-theme-bg-color);
|
|
557
|
+
--pod-nav-top-main-border-width: 1px;
|
|
558
|
+
--pod-nav-top-main-border-color: #D1B477;
|
|
559
|
+
--pod-nav-top-tab-indicator-width: 0px;
|
|
560
|
+
--pod-nav-logo-text: var(--pod-nav-item-text-hover-color);
|
|
561
|
+
--pod-nav-logo-icon: var(--pod-nav-item-text-selected-color);
|
|
562
|
+
--pod-nav-logo-border-radius: 3px;
|
|
563
|
+
--pod-nav-sub-divider-color: #D1B477;
|
|
564
|
+
--pod-nav-item-text-disabled-color: rgba(24,28,31,.30);
|
|
565
|
+
--pod-nav-l-container-bg: var(--pod-shell-theme-bg-color);
|
|
566
|
+
--pod-nav-l-group-label-color: var(--pod-nav-item-text-color);
|
|
567
|
+
--pod-nav-l-search-border-color: #D1B477;
|
|
568
|
+
--pod-nav-popup-border-radius: 3px;
|
|
569
|
+
--pod-nav-popup-shadow: none;
|
|
570
|
+
--pod-nav-tab-line-hover-color: var(--pod-nav-item-text-hover-color);
|
|
571
|
+
--pod-nav-tab-line-selected-color: var(--pod-nav-item-text-hover-color);
|
|
572
|
+
--pod-nav-search-bg-color: var(--pod-nav-menu-bg-hover-color);
|
|
573
|
+
--pod-nav-search-bg-hover-color: var(--pod-nav-menu-bg-hover-color);
|
|
574
|
+
--pod-nav-search-bg-active-color: var(--pod-nav-menu-bg-hover-color);
|
|
575
|
+
--pod-nav-search-placeholder-color: var(--pod-nav-item-text-color);
|
|
576
|
+
--pod-nav-search-text-color: var(--pod-nav-item-text-hover-color);
|
|
577
|
+
--pod-nav-search-icon-color: var(--pod-nav-item-text-color);
|
|
578
|
+
--pod-nav-search-border-color: #D1B477;
|
|
579
|
+
--pod-nav-search-border-hover-color: var(--pod-nav-item-text-hover-color);
|
|
580
|
+
--pod-nav-search-border-active-color: var(--pod-nav-item-text-hover-color);
|
|
581
|
+
--pod-nav-action-border-color: #D1B477;
|
|
582
|
+
--pod-nav-action-border: 1px solid #D1B477;
|
|
583
|
+
--pod-nav-action-bg-hover-color: var(--pod-nav-menu-bg-hover-color);
|
|
584
|
+
--pod-nav-action-bg-active-color: var(--pod-nav-menu-bg-hover-color);
|
|
585
|
+
--pod-nav-menu-item-height: 36px;
|
|
586
|
+
--pod-nav-menu-item-radius: 3px;
|
|
587
|
+
--pod-nav-menu-item-border: 1px solid #D1B477;
|
|
588
|
+
--pod-nav-menu-item-hover-border: 1px solid #754B13;
|
|
589
|
+
--pod-nav-menu-item-selected-border: 1px solid #593607;
|
|
590
|
+
--pod-nav-menu-font-size: 14px;
|
|
591
|
+
--pod-nav-menu-item-selected-font-weight: 600;
|
|
592
|
+
--pod-nav-menu-line-height: 20px;
|
|
593
|
+
--pod-nav-menu-gap: 4px;
|
|
513
594
|
}
|
|
514
595
|
|
|
515
596
|
.pod-premium.is-dark {
|
|
@@ -529,7 +610,7 @@ body.pod-premium.page-type-submit
|
|
|
529
610
|
--pod-nav-l-container-bg: rgba(255, 255, 255, 0.08);
|
|
530
611
|
--pod-nav-l-group-label-color: rgba(255, 255, 255, 0.4);
|
|
531
612
|
--pod-nav-l-search-border-color: rgba(255, 255, 255, 0.05);
|
|
532
|
-
--pod-nav-popup-bg-color: var(--pod-shell-bg-color-dark, var(--color-brand1-5,
|
|
613
|
+
--pod-nav-popup-bg-color: var(--pod-shell-bg-color-dark, var(--color-brand1-5, rgba(52, 50, 44, 1)));
|
|
533
614
|
--pod-nav-tab-line-hover-color: #fff;
|
|
534
615
|
--pod-nav-tab-line-selected-color: #fff;
|
|
535
616
|
--pod-nav-search-bg-color: rgba(255, 255, 255, 0.12);
|
|
@@ -545,7 +626,67 @@ body.pod-premium.page-type-submit
|
|
|
545
626
|
--pod-nav-action-border: 0.5px solid rgba(255, 255, 255, 0.2);
|
|
546
627
|
--pod-nav-action-bg-hover-color: rgba(255, 255, 255, 0.12);
|
|
547
628
|
--pod-nav-action-bg-active-color: rgba(255, 255, 255, 0.16);
|
|
629
|
+
--pod-nav-l-sub-main-bg-color: var(--color-white, #fff);
|
|
630
|
+
--pod-nav-top-main-border-width: 1px;
|
|
631
|
+
--pod-nav-top-main-border-color: #00000014;
|
|
632
|
+
--pod-nav-top-tab-indicator-width: 2px;
|
|
633
|
+
--pod-nav-logo-icon: var(--color-text1-5, #fff);
|
|
634
|
+
--pod-nav-logo-border-radius: 6px;
|
|
635
|
+
--pod-nav-popup-border-radius: var(--corner-3);
|
|
636
|
+
--pod-nav-popup-shadow: 0 8px 24px rgba(31, 35, 41, 0.12);
|
|
637
|
+
--pod-nav-search-border-color: transparent;
|
|
638
|
+
--pod-nav-menu-item-height: 36px;
|
|
639
|
+
--pod-nav-menu-item-radius: var(--pod-sm-border-radius, 8px);
|
|
640
|
+
--pod-nav-menu-item-border: none;
|
|
641
|
+
--pod-nav-menu-item-hover-border: var(--pod-nav-menu-item-border);
|
|
642
|
+
--pod-nav-menu-item-selected-border: var(--pod-nav-menu-item-border);
|
|
643
|
+
--pod-nav-menu-font-size: 14px;
|
|
644
|
+
--pod-nav-menu-item-selected-font-weight: 400;
|
|
645
|
+
--pod-nav-menu-line-height: 20px;
|
|
646
|
+
--pod-nav-menu-gap: 8px;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
/* openyida-navigation-shape:start */
|
|
650
|
+
/* Side/L navigation and top tabs share the same theme-defined menu shape.
|
|
651
|
+
* Border widths stay constant between states; border-box keeps row height stable. */
|
|
652
|
+
.pod-premium .deep-shell-nav-menu-content .next-nav-item,
|
|
653
|
+
.pod-premium .deep-shell-nav-tab-list .next-nav-item {
|
|
654
|
+
box-sizing: border-box;
|
|
655
|
+
border-radius: var(--pod-nav-menu-item-radius, 8px);
|
|
656
|
+
border: var(--pod-nav-menu-item-border, none);
|
|
657
|
+
}
|
|
658
|
+
/* Native inner rows also have a fixed minimum height. Fit them inside the
|
|
659
|
+
* bordered item instead of letting a thick outline push content below it. */
|
|
660
|
+
.vc-shell.pod-premium .next-nav.next-line.next-ver.deep-shell-nav-menu-content:not(.next-icon-only) .next-nav-item.next-menu-item > .next-menu-item-inner,
|
|
661
|
+
.vc-shell.pod-premium .next-shell-header .next-shell-navigation .next-nav.next-line.next-hoz.deep-shell-nav-tab-list .next-nav-item.next-menu-item > .next-menu-item-inner {
|
|
662
|
+
box-sizing: border-box;
|
|
663
|
+
height: 100% !important;
|
|
664
|
+
min-height: 0 !important;
|
|
665
|
+
}
|
|
666
|
+
.pod-premium .deep-shell-nav-menu-content .next-nav-item:hover,
|
|
667
|
+
.pod-premium .deep-shell-nav-tab-list .next-nav-item:hover {
|
|
668
|
+
border: var(--pod-nav-menu-item-hover-border, var(--pod-nav-menu-item-border, none));
|
|
669
|
+
}
|
|
670
|
+
/* Platform top tabs use transparent backgrounds and zero margin !important.
|
|
671
|
+
* Match the header scope so theme surfaces and spacing can reveal their shape. */
|
|
672
|
+
.vc-shell.pod-premium .next-shell-header .next-shell-navigation .next-nav.next-line.next-hoz.deep-shell-nav-tab-list .next-nav-item.next-menu-item {
|
|
673
|
+
margin-inline: calc(var(--pod-nav-menu-gap, 8px) / 2) !important;
|
|
674
|
+
}
|
|
675
|
+
.vc-shell.pod-premium .next-shell-header .next-shell-navigation .next-nav.next-line.next-hoz.deep-shell-nav-tab-list .next-nav-item.next-menu-item:hover {
|
|
676
|
+
background: var(--pod-nav-menu-bg-hover-color) !important;
|
|
677
|
+
color: var(--pod-nav-item-text-hover-color) !important;
|
|
678
|
+
}
|
|
679
|
+
.vc-shell.pod-premium .next-shell-header .next-shell-navigation .next-nav.next-line.next-hoz.deep-shell-nav-tab-list .next-nav-item.next-menu-item.next-selected {
|
|
680
|
+
background: var(--pod-nav-menu-bg-selected-color) !important;
|
|
681
|
+
color: var(--pod-nav-item-text-selected-color) !important;
|
|
682
|
+
}
|
|
683
|
+
/* Selected state wins over hover, retaining the original inset-shadow marker. */
|
|
684
|
+
.pod-premium .deep-shell-nav-menu-content .next-nav-item.next-selected,
|
|
685
|
+
.pod-premium .deep-shell-nav-tab-list .next-nav-item.next-selected {
|
|
686
|
+
border: var(--pod-nav-menu-item-selected-border, var(--pod-nav-menu-item-border, none));
|
|
687
|
+
box-shadow: var(--pod-nav-menu-item-selected-shadow, none);
|
|
548
688
|
}
|
|
689
|
+
/* openyida-navigation-shape:end */
|
|
549
690
|
|
|
550
691
|
/* OPENYIDA APPLICATION STYLE RECIPES START
|
|
551
692
|
* Opt-in semantic classes for custom pages. Native form structure stays in Schema.
|