style: 统一实训页面步骤导航与卡片样式,完成墨黑主题升级

1. 重构全局步骤导航样式,替换旧蓝色主题为墨黑极简风格
2. 统一三个业务页面的步骤标签样式:调整flex布局、内边距和文字换行规则
3. 重写TrainingTaskBrief组件样式,替换为新的task-header内联实训头部设计
4. 更新全局实训主题scss变量与样式规则,统一按钮、边框、配色规范
fix/exam-question-access-material-excel-delete-draft
qinzhenpen 3 weeks ago
parent f89a5649fa
commit dbc3239ec3

@ -180,13 +180,16 @@ scoped 里写的墨黑按钮永远不生效。**这不是"页面打补丁"能解
定位 `student-training.scss` 和子组件中的旧蓝色规则;按「全局 !important 定位 `student-training.scss` 和子组件中的旧蓝色规则;按「全局 !important
覆盖机制」一节的模板替换成墨黑极简(**只做一次,后续页面自动继承**)。 覆盖机制」一节的模板替换成墨黑极简(**只做一次,后续页面自动继承**)。
1. 读目标页,确认根类(如 `.xxx-page.student-training-shell`)和现有 DOM。 1. 读目标页,确认根类(如 `.xxx-page.student-training-shell`)和现有 DOM。
2. 在页面 scoped 样式的根类块内定义全部令牌(见下),让所有 2. **搭建页面头部**:按「页面头部:task-header + 内联 task-brief」一节
替换旧 `<TrainingTaskBrief>` 组件为内联 `task-brief`,确保有
`task-head-main` 包裹层和 `briefOpen` ref。
3. 在页面 scoped 样式的根类块内定义全部令牌(见下),让所有
`var(--student-*)` 规则自动重着色,不要逐处打补丁。 `var(--student-*)` 规则自动重着色,不要逐处打补丁。
3. 新增一个非 scoped `<style lang="scss">` 块,选择器全部以页面根类为锚: 4. 新增一个非 scoped `<style lang="scss">` 块,选择器全部以页面根类为锚:
- 覆盖祖先 `app-main` 画布背景(scoped 触及不到祖先); - 覆盖祖先 `app-main` 画布背景(scoped 触及不到祖先);
- 重写步骤导航(全局规则带 `!important`,scoped 无法取胜,见步骤导航一节)。 - 重写步骤导航(全局规则带 `!important`,scoped 无法取胜,见步骤导航一节)。
4. 按按钮四级层级、字号梯度、间距规则逐区收紧。 5. 按按钮四级层级、字号梯度、间距规则逐区收紧。
5. 完成后用 GetDiagnostics 校验,并全文搜索蓝色旧值确认无残留。 6. 完成后用 GetDiagnostics 校验,并全文搜索蓝色旧值确认无残留。
## 颜色令牌 ## 颜色令牌
@ -246,6 +249,145 @@ scoped 里写的墨黑按钮永远不生效。**这不是"页面打补丁"能解
标题区三级关系:上方灰色宽字距小标签(11px,`#6b7280`,letter-spacing 0.12em, 标题区三级关系:上方灰色宽字距小标签(11px,`#6b7280`,letter-spacing 0.12em,
无底色胶囊)→ 黑色步骤标题 → 灰色说明文字。禁止再用实底色 "STEP 01" 胶囊。 无底色胶囊)→ 黑色步骤标题 → 灰色说明文字。禁止再用实底色 "STEP 01" 胶囊。
## 页面头部:task-header + 内联 task-brief
每个实训页的头部是一个独立白卡片(`.task-header`),包含 badge + 标题 + 一行
实训背景(可展开目标与要求),右侧可选工具栏按钮。**必须内联实现,禁止使用
`TrainingTaskBrief.vue` 组件**——该组件是旧蓝 tab 切换风,与墨黑极简不兼容。
### 标准 DOM 结构
```html
<section class="task-header">
<div class="task-head-main">
<span class="task-badge"><el-icon><DataAnalysis /></el-icon> 核心实训 · 市场洞察与需求分析</span>
<h1 class="task-title">{{ taskTitle }}</h1>
<p class="task-brief">
<span class="task-brief-text">{{ taskBackground }}</span>
<button type="button" class="task-brief-toggle" @click="briefOpen = !briefOpen">
{{ briefOpen ? "收起" : "展开目标与要求" }}
</button>
<span v-if="briefOpen" class="task-brief-more">
<b>实训目标</b>
<ul><li v-for="goal in taskGoals" :key="goal">{{ goal }}</li></ul>
<b>实训要求</b>
<p>{{ taskRequirement }}</p>
</span>
</p>
</div>
<!-- 右侧工具栏(可选,二选一) -->
<TrainingTaskToolbar class="xxx-toolbar" :task-key="TASK_KEY" ... />
<!-- 或 -->
<div class="xxx-toolbar">
<TrainingMaterialButton :material-name="..." :material-url="..." />
<button type="button" class="outline-action" @click="exportOutcome">导出实训成果</button>
</div>
</section>
```
### Script 必备变量
```js
const briefOpen = ref(false);
const taskTitle = computed(() => taskConfig.value?.taskName || "页面默认标题");
const taskBackground = computed(() => taskConfig.value?.background || defaultBackground);
const taskGoals = computed(() => parseArray(taskConfig.value?.objectives, defaultGoals));
const taskRequirement = computed(() => taskConfig.value?.requirements || defaultRequirement);
```
### Scoped 样式(直接照抄)
```scss
.task-header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 12px;
margin: 0;
padding: 16px;
border: 1px solid #e7e9ed;
border-radius: 16px;
background: #ffffff;
}
.task-head-main {
display: grid;
justify-items: start;
gap: 8px;
min-width: 0;
flex: 1 1 auto;
}
.task-badge {
display: inline-flex;
align-items: center;
gap: 7px;
padding: 4px 12px;
border: 1px solid var(--student-panel-border);
border-radius: 999px;
color: var(--student-accent-deep);
background: var(--student-accent-soft);
font-size: 12px;
font-weight: 700;
}
.task-title {
margin: 0;
color: var(--student-text);
font-size: var(--student-fs-display);
font-weight: 700;
line-height: 1.35;
}
.task-brief {
margin: 0;
color: var(--student-text-secondary);
font-size: 12px;
line-height: 1.6;
}
.task-brief-text {
display: -webkit-box;
overflow: hidden;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
}
.task-brief-toggle {
padding: 0;
border: 0;
color: var(--student-accent-deep);
background: transparent;
font: inherit;
font-weight: 700;
cursor: pointer;
&:hover { text-decoration: underline; }
}
.task-brief-more {
display: grid;
gap: 6px;
margin-top: 8px;
padding-top: 8px;
border-top: 1px solid var(--student-panel-border);
b { color: var(--student-text); font-size: 12px; }
ul { display: grid; gap: 4px; margin: 0; padding-left: 18px; }
p { margin: 0; }
}
```
### 实现要点
1. **`<TrainingTaskBrief>` 组件已弃用**:旧组件是 tab 切换 + 独立卡片的蓝色风,
与墨黑极简冲突。直接把实训背景内联在 task-header 里,不要 import 该组件。
2. **`task-head-main` 必须有**:它是 badge + title + brief 的 grid 容器,
`gap: 8px`、`flex: 1 1 auto`,右侧工具栏才不会被挤到下一行。
3. **`task-brief-text` 单行截断**:`-webkit-line-clamp: 1` 保证默认只显示
一行背景摘要,点击按钮展开全部目标和要求。
4. **右侧工具栏可选**:简单页直接用 `<TrainingTaskToolbar>` 一个组件搞定
提交/重置/导出;需要下载案例资料的页用 `<TrainingMaterialButton>` +
原生 `<button class="outline-action">` 组合。
## 步骤导航:按钮切换风 ## 步骤导航:按钮切换风
每个步骤是一枚等宽分段按钮:白底灰边、圆角矩形,编号收成左侧小徽章; 每个步骤是一枚等宽分段按钮:白底灰边、圆角矩形,编号收成左侧小徽章;
@ -439,6 +581,10 @@ loading 态保持原配色。
## 子组件换肤要点 ## 子组件换肤要点
- **`TrainingTaskBrief.vue` 已弃用**:旧组件是 tab 切换 + 独立卡片的蓝色风,
与墨黑极简完全不兼容。新页面**禁止 import 该组件**,实训背景/目标/要求
直接内联在 `.task-header` 里(见「页面头部:task-header + 内联 task-brief」)。
旧组件目前仍被 foundation 三页引用,暂不删除,但新页面一律不使用。
- AI 侧栏面板、气泡、输入框、发送按钮全部中性灰白;其内部 Element Plus - AI 侧栏面板、气泡、输入框、发送按钮全部中性灰白;其内部 Element Plus
主色按钮通过覆盖组件内 CSS 变量或 `.el-button--primary` 改墨黑。 主色按钮通过覆盖组件内 CSS 变量或 `.el-button--primary` 改墨黑。
- 工具栏 `TrainingTaskToolbar` / `TrainingMaterialButton` 按「按钮规范 · 位置 B」 - 工具栏 `TrainingTaskToolbar` / `TrainingMaterialButton` 按「按钮规范 · 位置 B」

@ -233,18 +233,27 @@
} }
.student-training-shell .flow-steps, .student-training-shell .flow-steps,
/* ============================================================
* 步骤导航(墨黑极简 · 对齐 foundation new-product-survey)
* ============================================================ */
.student-training-shell .step-indicator { .student-training-shell .step-indicator {
display: flex !important; display: flex !important;
flex-wrap: nowrap !important; flex-wrap: nowrap !important;
align-items: center !important; align-items: stretch !important;
justify-content: space-between !important; justify-content: flex-start !important;
gap: 4px !important; gap: 10px !important;
width: 100% !important; width: 100% !important;
margin: 0 0 12px !important; max-width: 100% !important;
padding: 4px !important; margin: 4px 0 20px !important;
border: 1px solid var(--student-panel-border) !important; padding: 0 !important;
border-radius: var(--student-radius-pill) !important; border: none !important;
background: #f0f6fd !important; border-radius: 0 !important;
background: transparent !important;
box-shadow: none !important;
overflow-x: auto !important;
overflow-y: hidden !important;
scrollbar-width: thin !important;
-webkit-overflow-scrolling: touch !important;
} }
.student-training-shell .flow-arrow { .student-training-shell .flow-arrow {
@ -253,36 +262,124 @@
.student-training-shell .flow-pill, .student-training-shell .flow-pill,
.student-training-shell .step-tab { .student-training-shell .step-tab {
display: inline-flex !important; flex: 0 0 auto !important;
flex: 1 1 0 !important; min-width: auto !important;
max-width: none !important;
display: flex !important;
flex-direction: row !important;
align-items: center !important; align-items: center !important;
justify-content: center !important; justify-content: center !important;
gap: 8px !important; gap: 8px !important;
min-width: 0 !important; height: auto !important;
width: auto !important; min-height: 42px !important;
min-height: var(--student-step-height) !important; margin: 0 !important;
height: var(--student-step-height) !important; padding: 8px 14px !important;
padding: 0 10px !important; border: 1px solid #e5e7eb !important;
border: 1px solid transparent !important; border-radius: 8px !important;
border-radius: var(--student-radius-pill) !important; background: #ffffff !important;
color: #5a7a9a !important;
background: transparent !important;
box-shadow: none !important; box-shadow: none !important;
font-size: var(--student-step-font) !important; color: #6b7280 !important;
font-weight: 800 !important; font-size: 13px !important;
line-height: 1.2 !important; font-weight: 600 !important;
line-height: 1.3 !important;
letter-spacing: 0 !important; letter-spacing: 0 !important;
white-space: nowrap !important; white-space: nowrap !important;
text-align: center !important;
cursor: pointer;
transition: background-color .16s ease, color .16s ease, border-color .16s ease !important;
.step-bar { display: none !important; }
.step-no,
&:has(.step-no) .step-no {
position: static !important;
flex: 0 0 auto !important;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
min-width: 22px !important;
height: 22px !important;
padding: 0 5px !important;
border-radius: 6px !important;
background: #f3f4f6 !important;
color: #6b7280 !important;
font-family: ui-monospace, "SF Mono", Consolas, monospace !important;
font-size: 12px !important;
font-weight: 700 !important;
line-height: 1 !important;
letter-spacing: 0 !important;
&::after { display: none !important; }
}
.step-name { color: inherit !important; }
}
.student-training-shell .flow-pill:hover:not(.active):not(.complete),
.student-training-shell .step-tab:hover:not(.active):not(.complete) {
border-color: #1f2937 !important;
background: #f9fafb !important;
color: #1f2937 !important;
.step-no,
&:has(.step-no) .step-no {
background: #1f2937 !important;
color: #ffffff !important;
}
}
.student-training-shell .flow-pill.complete:not(.active),
.student-training-shell .step-tab.complete:not(.active) {
border-color: #dce9e2 !important;
color: #374151 !important;
.step-no,
&:has(.step-no) .step-no {
background: rgba(74,157,110,.12) !important;
color: #3f8a5f !important;
}
&:hover {
border-color: #4a9d6e !important;
background: #f9fafb !important;
color: #374151 !important;
.step-no,
&:has(.step-no) .step-no {
background: #4a9d6e !important;
color: #ffffff !important;
}
}
} }
.student-training-shell .flow-pill.active, .student-training-shell .flow-pill.active,
.student-training-shell .step-tab.active { .student-training-shell .step-tab.active {
border-color: #1e88e5 !important; border-color: #1f2937 !important;
background: #1f2937 !important;
color: #ffffff !important; color: #ffffff !important;
background: linear-gradient(95deg, #1e88e5, #1565c0) !important; font-weight: 700 !important;
box-shadow: 0 2px 8px rgba(30, 136, 229, 0.25) !important; box-shadow: 0 2px 6px rgba(31,41,55,.16) !important;
.step-no,
&:has(.step-no) .step-no {
background: #ffffff !important;
color: #1f2937 !important;
}
&:hover {
background: #111827 !important;
border-color: #111827 !important;
}
} }
/* 窄屏步骤导航横向滑动 */
@media (max-width: 900px) {
.student-training-shell .step-indicator {
overflow-x: auto !important;
flex-wrap: nowrap !important;
justify-content: flex-start !important;
}
.student-training-shell .step-tab,
.student-training-shell .flow-pill {
flex: 0 0 auto !important;
min-width: 140px !important;
}
}
/* flow-rail 旧布局兼容(保留但改色) */
.student-training-shell .flow-rail { .student-training-shell .flow-rail {
display: flex !important; display: flex !important;
flex-wrap: nowrap !important; flex-wrap: nowrap !important;
@ -292,9 +389,9 @@
width: 100% !important; width: 100% !important;
margin: 0 0 16px !important; margin: 0 0 16px !important;
padding: 4px !important; padding: 4px !important;
border: 1px solid var(--student-panel-border) !important; border: 1px solid #e5e7eb !important;
border-radius: 60px !important; border-radius: 60px !important;
background: #f0f6fd !important; background: #f9fafb !important;
} }
.student-training-shell .flow-step { .student-training-shell .flow-step {
@ -304,37 +401,42 @@
justify-content: center !important; justify-content: center !important;
gap: 6px !important; gap: 6px !important;
min-width: 0 !important; min-width: 0 !important;
min-height: var(--student-step-height) !important; min-height: 34px !important;
height: var(--student-step-height) !important; height: 34px !important;
padding: 0 8px !important; padding: 0 8px !important;
border: 1px solid transparent !important; border: 1px solid transparent !important;
border-radius: var(--student-radius-pill) !important; border-radius: 999px !important;
color: #5a7a9a !important; color: #6b7280 !important;
background: transparent !important; background: transparent !important;
box-shadow: none !important; box-shadow: none !important;
font-size: 12px !important;
font-weight: 600 !important;
letter-spacing: 0 !important;
text-align: center !important;
overflow-wrap: anywhere !important;
} }
.student-training-shell .flow-step span { .student-training-shell .flow-step span {
display: inline-flex !important; display: inline-flex !important;
align-items: center !important; align-items: center !important;
justify-content: center !important; justify-content: center !important;
flex: 0 0 24px !important; flex: 0 0 22px !important;
width: 24px !important; width: 22px !important;
height: 24px !important; height: 22px !important;
margin: 0 !important; margin: 0 !important;
border-radius: 50% !important; border-radius: 6px !important;
color: #ffffff !important; color: #6b7280 !important;
background: linear-gradient(95deg, #1e88e5, #1565c0) !important; background: #f3f4f6 !important;
font-size: 12px !important; font-size: 12px !important;
font-weight: 800 !important; font-weight: 700 !important;
line-height: 1 !important; line-height: 1 !important;
} }
.student-training-shell .flow-step strong { .student-training-shell .flow-step strong {
min-width: 0 !important; min-width: 0 !important;
color: #1e3a5f !important; color: inherit !important;
font-size: var(--student-step-font) !important; font-size: 12px !important;
font-weight: 800 !important; font-weight: 600 !important;
line-height: 1.25 !important; line-height: 1.25 !important;
letter-spacing: 0 !important; letter-spacing: 0 !important;
text-align: center !important; text-align: center !important;
@ -345,10 +447,10 @@
width: 100% !important; width: 100% !important;
margin: 12px 0 16px !important; margin: 12px 0 16px !important;
padding: 12px !important; padding: 12px !important;
border: 1px solid #cfe2f5 !important; border: 1px solid #e5e7eb !important;
border-radius: 16px !important; border-radius: 16px !important;
background: #f0f6fd !important; background: #ffffff !important;
box-shadow: 0 2px 8px rgba(30, 136, 229, 0.06) !important; box-shadow: none !important;
} }
.training-step-area::before { .training-step-area::before {
@ -360,12 +462,12 @@
min-width: 92px !important; min-width: 92px !important;
margin: 0 0 14px !important; margin: 0 0 14px !important;
padding: 0 14px !important; padding: 0 14px !important;
border: 1px solid #1e88e5 !important; border: 1px solid #e5e7eb !important;
border-radius: 999px !important; border-radius: 999px !important;
color: #ffffff !important; color: #111827 !important;
background: linear-gradient(95deg, #1e88e5, #1565c0) !important; background: #f3f4f6 !important;
font-size: var(--student-fs-body) !important; font-size: var(--student-fs-body) !important;
font-weight: 800 !important; font-weight: 700 !important;
line-height: 1 !important; line-height: 1 !important;
letter-spacing: 0 !important; letter-spacing: 0 !important;
} }
@ -376,9 +478,9 @@
gap: 8px !important; gap: 8px !important;
min-height: 34px !important; min-height: 34px !important;
margin: 10px 0 8px !important; margin: 10px 0 8px !important;
color: #1e3a5f !important; color: #1f2937 !important;
font-size: 16px !important; font-size: 16px !important;
font-weight: 800 !important; font-weight: 700 !important;
line-height: 1.45 !important; line-height: 1.45 !important;
letter-spacing: 0 !important; letter-spacing: 0 !important;
} }
@ -402,7 +504,7 @@
.training-step-area li, .training-step-area li,
.training-step-area .online, .training-step-area .online,
.training-step-area .online span { .training-step-area .online span {
color: #2c4a6a !important; color: #374151 !important;
font-size: var(--student-fs-body) !important; font-size: var(--student-fs-body) !important;
line-height: 1.75 !important; line-height: 1.75 !important;
letter-spacing: 0 !important; letter-spacing: 0 !important;
@ -422,17 +524,22 @@
height: 40px !important; height: 40px !important;
min-height: 40px !important; min-height: 40px !important;
padding: 0 18px !important; padding: 0 18px !important;
border: 1px solid #1e88e5 !important; border: 1px solid #1f2937 !important;
border-radius: 6px !important; border-radius: 10px !important;
color: #ffffff !important; color: #ffffff !important;
background: linear-gradient(180deg, #42a5f5, #1e88e5) !important; background: #1f2937 !important;
box-shadow: none !important; box-shadow: 0 2px 6px rgba(31,41,55,.16) !important;
font-size: var(--student-fs-body) !important; font-size: var(--student-fs-body) !important;
font-weight: 800 !important; font-weight: 700 !important;
line-height: 1 !important; line-height: 1 !important;
letter-spacing: 0 !important; letter-spacing: 0 !important;
} }
.training-step-area .el-button:hover {
background: #111827 !important;
border-color: #111827 !important;
}
.training-step-area .el-button span { .training-step-area .el-button span {
color: inherit !important; color: inherit !important;
font-size: inherit !important; font-size: inherit !important;
@ -444,7 +551,7 @@
flex-wrap: wrap !important; flex-wrap: wrap !important;
justify-content: center !important; justify-content: center !important;
align-items: center !important; align-items: center !important;
gap: 20px !important; gap: 14px !important;
margin-top: 20px !important; margin-top: 20px !important;
padding: 0 !important; padding: 0 !important;
} }
@ -456,18 +563,20 @@
justify-content: center !important; justify-content: center !important;
min-width: 112px !important; min-width: 112px !important;
width: auto !important; width: auto !important;
height: var(--student-action-height) !important; height: 40px !important;
min-height: var(--student-action-height) !important; min-height: 40px !important;
padding: 0 16px !important; padding: 0 18px !important;
border: 1px solid #1e88e5 !important; border: 1px solid #e5e7eb !important;
border-radius: var(--student-radius-sm) !important; border-radius: 10px !important;
color: #1e3a5f !important; color: #1f2937 !important;
background: #e3f2fd !important; background: #ffffff !important;
box-shadow: none !important; box-shadow: none !important;
font-size: var(--student-action-font) !important; font-size: var(--student-fs-body) !important;
font-weight: 900 !important; font-weight: 700 !important;
line-height: 1 !important; line-height: 1 !important;
letter-spacing: 0 !important; letter-spacing: 0 !important;
cursor: pointer;
transition: background-color .16s ease, border-color .16s ease, transform .16s ease, box-shadow .16s ease !important;
} }
.student-training-shell .training-actions .el-button.training-action span, .student-training-shell .training-actions .el-button.training-action span,
@ -478,9 +587,33 @@
.student-training-shell .training-actions .el-button.training-action:hover:not(.is-disabled), .student-training-shell .training-actions .el-button.training-action:hover:not(.is-disabled),
.student-training-shell .training-actions button.training-action:hover:not(:disabled) { .student-training-shell .training-actions button.training-action:hover:not(:disabled) {
border-color: #1565c0 !important; border-color: #1f2937 !important;
color: #1565c0 !important; color: #1f2937 !important;
background: #bbdefb !important; background: #f9fafb !important;
transform: translateY(-1px) !important;
box-shadow: 0 3px 10px rgba(31,41,55,.14) !important;
}
.student-training-shell .training-actions .el-button.training-action.primary,
.student-training-shell .training-actions button.training-action.primary {
border: 1px solid #1f2937 !important;
color: #ffffff !important;
background: #1f2937 !important;
box-shadow: 0 2px 6px rgba(31,41,55,.16) !important;
}
.student-training-shell .training-actions .el-button.training-action.primary:hover:not(.is-disabled),
.student-training-shell .training-actions button.training-action.primary:hover:not(:disabled) {
background: #111827 !important;
border-color: #111827 !important;
box-shadow: 0 4px 12px rgba(31,41,55,.24) !important;
}
.student-training-shell .training-actions .el-button.training-action.is-disabled,
.student-training-shell .training-actions button.training-action:disabled {
opacity: .5 !important;
transform: none !important;
box-shadow: none !important;
} }
/* 新产品调查等页面使用 task-actions,而非 training-action。统一底部提交/重置按钮规格。 */ /* 新产品调查等页面使用 task-actions,而非 training-action。统一底部提交/重置按钮规格。 */
@ -655,19 +788,28 @@
flex: 0 0 auto !important; flex: 0 0 auto !important;
min-width: 0 !important; min-width: 0 !important;
width: auto !important; width: auto !important;
height: 34px !important; height: 40px !important;
min-height: 34px !important; min-height: 40px !important;
max-height: 34px !important; max-height: 40px !important;
margin: 0 !important; margin: 0 !important;
padding: 0 12px !important; padding: 0 18px !important;
border: 1px solid #1e88e5 !important; border: 1px solid #e5e7eb !important;
border-radius: var(--student-radius-pill) !important; border-radius: 10px !important;
color: #1e3a5f !important; color: #1f2937 !important;
background: #e3f2fd !important; background: #ffffff !important;
font-size: 13px !important; font-size: 13px !important;
font-weight: 800 !important; font-weight: 700 !important;
line-height: 1 !important; line-height: 1 !important;
white-space: nowrap !important; white-space: nowrap !important;
cursor: pointer;
transition: background-color .16s ease, border-color .16s ease, transform .16s ease, box-shadow .16s ease !important;
&:hover {
border-color: #1f2937 !important;
background: #f9fafb !important;
color: #1f2937 !important;
transform: translateY(-1px) !important;
box-shadow: 0 3px 10px rgba(31,41,55,.14) !important;
}
} }
.student-training-shell .el-button.upload-action, .student-training-shell .el-button.upload-action,
@ -681,19 +823,23 @@
gap: 8px !important; gap: 8px !important;
min-width: 0 !important; min-width: 0 !important;
width: auto !important; width: auto !important;
height: var(--student-upload-height) !important; height: 40px !important;
min-height: var(--student-upload-height) !important; min-height: 40px !important;
padding: 0 18px !important; padding: 0 18px !important;
border: 1px solid #1e88e5 !important; border: 1px solid #1f2937 !important;
border-radius: var(--student-radius-pill) !important; border-radius: 10px !important;
color: #ffffff !important; color: #ffffff !important;
background: linear-gradient(95deg, #1e88e5, #1565c0) !important; background: #1f2937 !important;
box-shadow: none !important; box-shadow: 0 2px 6px rgba(31,41,55,.16) !important;
font-size: var(--student-upload-font) !important; font-size: var(--student-upload-font) !important;
font-weight: 800 !important; font-weight: 700 !important;
line-height: 1 !important; line-height: 1 !important;
letter-spacing: 0 !important; letter-spacing: 0 !important;
white-space: nowrap !important; white-space: nowrap !important;
&:hover {
background: #111827 !important;
border-color: #111827 !important;
}
} }
.student-training-shell textarea, .student-training-shell textarea,
@ -747,13 +893,13 @@
min-width: 136px !important; min-width: 136px !important;
height: 36px !important; height: 36px !important;
padding: 0 12px !important; padding: 0 12px !important;
border: 1px solid #1e88e5 !important; border: 1px solid #e5e7eb !important;
border-radius: 6px !important; border-radius: 8px !important;
color: #1e3a5f !important; color: #1f2937 !important;
background: #e3f2fd !important; background: #ffffff !important;
box-shadow: none !important; box-shadow: none !important;
font-size: var(--student-fs-body) !important; font-size: var(--student-fs-body) !important;
font-weight: 800 !important; font-weight: 700 !important;
line-height: 1 !important; line-height: 1 !important;
letter-spacing: 0 !important; letter-spacing: 0 !important;
} }
@ -761,9 +907,9 @@
.legacy-training-page .top_item .el-button.active, .legacy-training-page .top_item .el-button.active,
.legacy-training-page .top_item .active { .legacy-training-page .top_item .active {
transform: none !important; transform: none !important;
border-color: #1e88e5 !important; border-color: #1f2937 !important;
color: #ffffff !important; color: #ffffff !important;
background: linear-gradient(95deg, #1e88e5, #1565c0) !important; background: #1f2937 !important;
} }
// Keep long step names inside the navigation rail. Their complete name remains // Keep long step names inside the navigation rail. Their complete name remains

@ -130,11 +130,18 @@ function normalizeGoals(value) {
<style lang="scss" scoped> <style lang="scss" scoped>
.training-task-brief { .training-task-brief {
margin-bottom: 14px; --brief-accent: #1f2937;
--brief-accent-deep: #111827;
--brief-accent-soft: #f3f4f6;
--brief-panel-border: #e5e7eb;
--brief-text: #1f2937;
--brief-text-secondary: #6b7280;
margin-bottom: 10px;
padding: 12px 16px; padding: 12px 16px;
border: 1px solid #90caf9; border: 1px solid var(--brief-panel-border);
border-radius: 20px; border-radius: 12px;
background: #f0f6fd; background: #ffffff;
box-shadow: none; box-shadow: none;
} }
@ -163,25 +170,30 @@ function normalizeGoals(value) {
justify-content: center; justify-content: center;
gap: 8px; gap: 8px;
min-width: 0; min-width: 0;
height: 40px; height: 36px;
padding: 0 12px; padding: 0 12px;
border: 1px solid #90caf9; border: 1px solid var(--brief-panel-border);
border-radius: 6px; border-radius: 8px;
color: #2c4a6a; color: var(--brief-text-secondary);
background: #e3f2fd; background: var(--brief-accent-soft);
cursor: pointer; cursor: pointer;
font-size: var(--student-fs-body); font-size: 12px;
font-weight: 800; font-weight: 600;
line-height: 1; line-height: 1;
transition: border-color 0.18s ease, color 0.18s ease, background 0.18s ease, box-shadow 0.18s ease; transition: border-color 0.16s ease, color 0.16s ease, background 0.16s ease;
}
.brief-tab:hover, &:hover {
.brief-tab.is-active { border-color: var(--brief-accent);
border-color: #1565c0; color: var(--brief-accent);
color: #1e3a5f; background: #ffffff;
background: #bbdefb; }
box-shadow: none;
&.is-active {
border-color: var(--brief-accent);
color: #ffffff;
background: var(--brief-accent);
box-shadow: 0 2px 6px rgba(17, 24, 39, 0.18);
}
} }
.brief-tab-icon, .brief-tab-icon,
@ -189,32 +201,32 @@ function normalizeGoals(value) {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
width: 18px; width: 16px;
height: 18px; height: 16px;
flex: 0 0 18px; flex: 0 0 16px;
line-height: 1; line-height: 1;
.el-icon { .el-icon {
display: block; display: block;
width: 18px; width: 16px;
height: 18px; height: 16px;
font-size: 18px; font-size: 16px;
line-height: 1; line-height: 1;
} }
} }
.brief-tab-icon, .brief-tab .brief-tab-icon {
.brief-panel-icon, color: inherit;
.brief-tab--background .brief-tab-icon, }
.brief-tab--goals .brief-tab-icon,
.brief-tab--requirements .brief-tab-icon { .brief-tab.is-active .brief-tab-icon {
color: #1e88e5; color: inherit;
} }
.brief-panel { .brief-panel {
border: 1px solid rgba(187, 222, 251, 0.2); border: 1px solid var(--brief-panel-border);
border-radius: 20px; border-radius: 10px;
background: #f0f6fd; background: var(--brief-accent-soft);
overflow: hidden; overflow: hidden;
} }
@ -222,30 +234,30 @@ function normalizeGoals(value) {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 8px; gap: 8px;
height: 40px; height: 36px;
padding: 0 14px; padding: 0 14px;
border-bottom: 1px solid rgba(187, 222, 251, 0.2); border-bottom: 1px solid var(--brief-panel-border);
color: #1e3a5f; color: var(--brief-text);
font-size: var(--student-fs-h2); font-size: 13px;
font-weight: 900; font-weight: 700;
line-height: 1; line-height: 1;
} }
.brief-scroll { .brief-scroll {
max-height: 160px; max-height: 160px;
min-height: 110px; min-height: 100px;
overflow-y: auto; overflow-y: auto;
overscroll-behavior: contain; overscroll-behavior: contain;
scrollbar-width: thin; scrollbar-width: thin;
scrollbar-color: #cfe2f5 #f0f6fd; scrollbar-color: var(--brief-panel-border) var(--brief-accent-soft);
} }
.brief-content { .brief-content {
margin: 0; margin: 0;
padding: 10px 16px 12px; padding: 10px 16px 12px;
color: #2c4a6a; color: var(--brief-text-secondary);
font-size: var(--student-fs-body); font-size: 13px;
line-height: 1.85; line-height: 1.6;
} }
.brief-goals { .brief-goals {
@ -253,8 +265,11 @@ function normalizeGoals(value) {
list-style: none; list-style: none;
li { li {
padding: 5px 0 5px 12px; padding: 4px 0 4px 12px;
border-left: 2px solid #cfe2f5; border-left: 2px solid var(--brief-panel-border);
color: var(--brief-text-secondary);
font-size: 13px;
line-height: 1.55;
} }
li + li { li + li {
@ -263,16 +278,16 @@ function normalizeGoals(value) {
} }
.brief-scroll::-webkit-scrollbar { .brief-scroll::-webkit-scrollbar {
width: 8px; width: 6px;
} }
.brief-scroll::-webkit-scrollbar-track { .brief-scroll::-webkit-scrollbar-track {
background: #f0f6fd; background: var(--brief-accent-soft);
} }
.brief-scroll::-webkit-scrollbar-thumb { .brief-scroll::-webkit-scrollbar-thumb {
border-radius: 8px; border-radius: 6px;
background: #cfe2f5; background: var(--brief-panel-border);
} }
@media (max-width: 768px) { @media (max-width: 768px) {
@ -289,13 +304,14 @@ function normalizeGoals(value) {
} }
.brief-tab { .brief-tab {
height: 36px; height: 34px;
padding: 0 8px; padding: 0 8px;
font-size: var(--student-fs-body); font-size: 11px;
} }
.brief-scroll { .brief-scroll {
height: 140px; max-height: 140px;
min-height: 90px;
} }
} }
</style> </style>

File diff suppressed because one or more lines are too long

@ -671,18 +671,18 @@ function exportOutcome() { const blob = new Blob([JSON.stringify(buildDraft(), n
.step-connector { display: none !important; } .step-connector { display: none !important; }
.step-tab { .step-tab {
flex: 1 1 0 !important; flex: 0 0 auto !important;
max-width: 220px !important; min-width: auto !important;
max-width: none !important;
display: flex !important; display: flex !important;
flex-direction: row !important; flex-direction: row !important;
align-items: center !important; align-items: center !important;
justify-content: center !important; justify-content: center !important;
gap: 8px !important; gap: 8px !important;
min-width: 0 !important;
height: auto !important; height: auto !important;
min-height: 42px !important; min-height: 42px !important;
margin: 0 !important; margin: 0 !important;
padding: 8px 12px !important; padding: 8px 14px !important;
border: 1px solid #e5e7eb !important; border: 1px solid #e5e7eb !important;
border-radius: 8px !important; border-radius: 8px !important;
background: #ffffff !important; background: #ffffff !important;
@ -692,7 +692,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify(buildDraft(), n
font-weight: 600 !important; font-weight: 600 !important;
line-height: 1.3 !important; line-height: 1.3 !important;
letter-spacing: 0 !important; letter-spacing: 0 !important;
white-space: normal !important; white-space: nowrap !important;
text-align: center !important; text-align: center !important;
cursor: pointer; cursor: pointer;
transition: background-color 0.16s ease, color 0.16s ease, border-color 0.16s ease !important; transition: background-color 0.16s ease, color 0.16s ease, border-color 0.16s ease !important;
@ -779,7 +779,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify(buildDraft(), n
overflow-x: auto !important; overflow-x: auto !important;
} }
#app .studentLayout section.app-main:has(.competitive-analysis-page) .step-indicator .step-tab { #app .studentLayout section.app-main:has(.competitive-analysis-page) .step-indicator .step-tab {
flex: 0 0 148px !important; flex: 0 0 auto !important;
max-width: none !important; max-width: none !important;
} }
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -692,18 +692,18 @@ function exportOutcome() { const blob = new Blob([JSON.stringify(buildDraft(), n
.step-connector { display: none !important; } .step-connector { display: none !important; }
.step-tab { .step-tab {
flex: 1 1 0 !important; flex: 0 0 auto !important;
max-width: 220px !important; min-width: auto !important;
max-width: none !important;
display: flex !important; display: flex !important;
flex-direction: row !important; flex-direction: row !important;
align-items: center !important; align-items: center !important;
justify-content: center !important; justify-content: center !important;
gap: 8px !important; gap: 8px !important;
min-width: 0 !important;
height: auto !important; height: auto !important;
min-height: 42px !important; min-height: 42px !important;
margin: 0 !important; margin: 0 !important;
padding: 8px 12px !important; padding: 8px 14px !important;
border: 1px solid #e5e7eb !important; border: 1px solid #e5e7eb !important;
border-radius: 8px !important; border-radius: 8px !important;
background: #ffffff !important; background: #ffffff !important;
@ -713,7 +713,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify(buildDraft(), n
font-weight: 600 !important; font-weight: 600 !important;
line-height: 1.3 !important; line-height: 1.3 !important;
letter-spacing: 0 !important; letter-spacing: 0 !important;
white-space: normal !important; white-space: nowrap !important;
text-align: center !important; text-align: center !important;
cursor: pointer; cursor: pointer;
transition: background-color 0.16s ease, color 0.16s ease, border-color 0.16s ease !important; transition: background-color 0.16s ease, color 0.16s ease, border-color 0.16s ease !important;
@ -799,7 +799,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify(buildDraft(), n
overflow-x: auto !important; overflow-x: auto !important;
} }
#app .studentLayout section.app-main:has(.industry-pest-page) .step-indicator .step-tab { #app .studentLayout section.app-main:has(.industry-pest-page) .step-indicator .step-tab {
flex: 0 0 148px !important; flex: 0 0 auto !important;
max-width: none !important; max-width: none !important;
} }
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -815,18 +815,18 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ taskName: tas
> i { display: none !important; } > i { display: none !important; }
.step-tab { .step-tab {
flex: 1 1 0 !important; flex: 0 0 auto !important;
max-width: 220px !important; min-width: auto !important;
max-width: none !important;
display: flex !important; display: flex !important;
flex-direction: row !important; flex-direction: row !important;
align-items: center !important; align-items: center !important;
justify-content: center !important; justify-content: center !important;
gap: 8px !important; gap: 8px !important;
min-width: 0 !important;
height: auto !important; height: auto !important;
min-height: 42px !important; min-height: 42px !important;
margin: 0 !important; margin: 0 !important;
padding: 8px 12px !important; padding: 8px 14px !important;
border: 1px solid #e5e7eb !important; border: 1px solid #e5e7eb !important;
border-radius: 8px !important; border-radius: 8px !important;
background: #ffffff !important; background: #ffffff !important;
@ -836,7 +836,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ taskName: tas
font-weight: 600 !important; font-weight: 600 !important;
line-height: 1.3 !important; line-height: 1.3 !important;
letter-spacing: 0 !important; letter-spacing: 0 !important;
white-space: normal !important; white-space: nowrap !important;
text-align: center !important; text-align: center !important;
cursor: pointer; cursor: pointer;
transition: background-color 0.16s ease, color 0.16s ease, border-color 0.16s ease !important; transition: background-color 0.16s ease, color 0.16s ease, border-color 0.16s ease !important;
@ -924,7 +924,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ taskName: tas
overflow-x: auto !important; overflow-x: auto !important;
} }
#app .studentLayout section.app-main:has(.opportunity-page) .step-indicator .step-tab { #app .studentLayout section.app-main:has(.opportunity-page) .step-indicator .step-tab {
flex: 0 0 148px !important; flex: 0 0 auto !important;
max-width: none !important; max-width: none !important;
} }
} }

Loading…
Cancel
Save