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
覆盖机制」一节的模板替换成墨黑极简(**只做一次,后续页面自动继承**)。
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-*)` 规则自动重着色,不要逐处打补丁。
3. 新增一个非 scoped `<style lang="scss">` 块,选择器全部以页面根类为锚:
4. 新增一个非 scoped `<style lang="scss">` 块,选择器全部以页面根类为锚:
- 覆盖祖先 `app-main` 画布背景(scoped 触及不到祖先);
- 重写步骤导航(全局规则带 `!important`,scoped 无法取胜,见步骤导航一节)。
4. 按按钮四级层级、字号梯度、间距规则逐区收紧。
5. 完成后用 GetDiagnostics 校验,并全文搜索蓝色旧值确认无残留。
5. 按按钮四级层级、字号梯度、间距规则逐区收紧。
6. 完成后用 GetDiagnostics 校验,并全文搜索蓝色旧值确认无残留。
## 颜色令牌
@ -246,6 +249,145 @@ scoped 里写的墨黑按钮永远不生效。**这不是"页面打补丁"能解
标题区三级关系:上方灰色宽字距小标签(11px,`#6b7280`,letter-spacing 0.12em,
无底色胶囊)→ 黑色步骤标题 → 灰色说明文字。禁止再用实底色 "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
主色按钮通过覆盖组件内 CSS 变量或 `.el-button--primary` 改墨黑。
- 工具栏 `TrainingTaskToolbar` / `TrainingMaterialButton` 按「按钮规范 · 位置 B」

@ -233,18 +233,27 @@
}
.student-training-shell .flow-steps,
/* ============================================================
* 步骤导航(墨黑极简 · 对齐 foundation new-product-survey)
* ============================================================ */
.student-training-shell .step-indicator {
display: flex !important;
flex-wrap: nowrap !important;
align-items: center !important;
justify-content: space-between !important;
gap: 4px !important;
align-items: stretch !important;
justify-content: flex-start !important;
gap: 10px !important;
width: 100% !important;
margin: 0 0 12px !important;
padding: 4px !important;
border: 1px solid var(--student-panel-border) !important;
border-radius: var(--student-radius-pill) !important;
background: #f0f6fd !important;
max-width: 100% !important;
margin: 4px 0 20px !important;
padding: 0 !important;
border: none !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 {
@ -253,36 +262,124 @@
.student-training-shell .flow-pill,
.student-training-shell .step-tab {
display: inline-flex !important;
flex: 1 1 0 !important;
flex: 0 0 auto !important;
min-width: auto !important;
max-width: none !important;
display: flex !important;
flex-direction: row !important;
align-items: center !important;
justify-content: center !important;
gap: 8px !important;
min-width: 0 !important;
width: auto !important;
min-height: var(--student-step-height) !important;
height: var(--student-step-height) !important;
padding: 0 10px !important;
border: 1px solid transparent !important;
border-radius: var(--student-radius-pill) !important;
color: #5a7a9a !important;
background: transparent !important;
height: auto !important;
min-height: 42px !important;
margin: 0 !important;
padding: 8px 14px !important;
border: 1px solid #e5e7eb !important;
border-radius: 8px !important;
background: #ffffff !important;
box-shadow: none !important;
font-size: var(--student-step-font) !important;
font-weight: 800 !important;
line-height: 1.2 !important;
color: #6b7280 !important;
font-size: 13px !important;
font-weight: 600 !important;
line-height: 1.3 !important;
letter-spacing: 0 !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 .step-tab.active {
border-color: #1e88e5 !important;
border-color: #1f2937 !important;
background: #1f2937 !important;
color: #ffffff !important;
background: linear-gradient(95deg, #1e88e5, #1565c0) !important;
box-shadow: 0 2px 8px rgba(30, 136, 229, 0.25) !important;
font-weight: 700 !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 {
display: flex !important;
flex-wrap: nowrap !important;
@ -292,9 +389,9 @@
width: 100% !important;
margin: 0 0 16px !important;
padding: 4px !important;
border: 1px solid var(--student-panel-border) !important;
border: 1px solid #e5e7eb !important;
border-radius: 60px !important;
background: #f0f6fd !important;
background: #f9fafb !important;
}
.student-training-shell .flow-step {
@ -304,37 +401,42 @@
justify-content: center !important;
gap: 6px !important;
min-width: 0 !important;
min-height: var(--student-step-height) !important;
height: var(--student-step-height) !important;
min-height: 34px !important;
height: 34px !important;
padding: 0 8px !important;
border: 1px solid transparent !important;
border-radius: var(--student-radius-pill) !important;
color: #5a7a9a !important;
border-radius: 999px !important;
color: #6b7280 !important;
background: transparent !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 {
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
flex: 0 0 24px !important;
width: 24px !important;
height: 24px !important;
flex: 0 0 22px !important;
width: 22px !important;
height: 22px !important;
margin: 0 !important;
border-radius: 50% !important;
color: #ffffff !important;
background: linear-gradient(95deg, #1e88e5, #1565c0) !important;
border-radius: 6px !important;
color: #6b7280 !important;
background: #f3f4f6 !important;
font-size: 12px !important;
font-weight: 800 !important;
font-weight: 700 !important;
line-height: 1 !important;
}
.student-training-shell .flow-step strong {
min-width: 0 !important;
color: #1e3a5f !important;
font-size: var(--student-step-font) !important;
font-weight: 800 !important;
color: inherit !important;
font-size: 12px !important;
font-weight: 600 !important;
line-height: 1.25 !important;
letter-spacing: 0 !important;
text-align: center !important;
@ -345,10 +447,10 @@
width: 100% !important;
margin: 12px 0 16px !important;
padding: 12px !important;
border: 1px solid #cfe2f5 !important;
border: 1px solid #e5e7eb !important;
border-radius: 16px !important;
background: #f0f6fd !important;
box-shadow: 0 2px 8px rgba(30, 136, 229, 0.06) !important;
background: #ffffff !important;
box-shadow: none !important;
}
.training-step-area::before {
@ -360,12 +462,12 @@
min-width: 92px !important;
margin: 0 0 14px !important;
padding: 0 14px !important;
border: 1px solid #1e88e5 !important;
border: 1px solid #e5e7eb !important;
border-radius: 999px !important;
color: #ffffff !important;
background: linear-gradient(95deg, #1e88e5, #1565c0) !important;
color: #111827 !important;
background: #f3f4f6 !important;
font-size: var(--student-fs-body) !important;
font-weight: 800 !important;
font-weight: 700 !important;
line-height: 1 !important;
letter-spacing: 0 !important;
}
@ -376,9 +478,9 @@
gap: 8px !important;
min-height: 34px !important;
margin: 10px 0 8px !important;
color: #1e3a5f !important;
color: #1f2937 !important;
font-size: 16px !important;
font-weight: 800 !important;
font-weight: 700 !important;
line-height: 1.45 !important;
letter-spacing: 0 !important;
}
@ -402,7 +504,7 @@
.training-step-area li,
.training-step-area .online,
.training-step-area .online span {
color: #2c4a6a !important;
color: #374151 !important;
font-size: var(--student-fs-body) !important;
line-height: 1.75 !important;
letter-spacing: 0 !important;
@ -422,17 +524,22 @@
height: 40px !important;
min-height: 40px !important;
padding: 0 18px !important;
border: 1px solid #1e88e5 !important;
border-radius: 6px !important;
border: 1px solid #1f2937 !important;
border-radius: 10px !important;
color: #ffffff !important;
background: linear-gradient(180deg, #42a5f5, #1e88e5) !important;
box-shadow: none !important;
background: #1f2937 !important;
box-shadow: 0 2px 6px rgba(31,41,55,.16) !important;
font-size: var(--student-fs-body) !important;
font-weight: 800 !important;
font-weight: 700 !important;
line-height: 1 !important;
letter-spacing: 0 !important;
}
.training-step-area .el-button:hover {
background: #111827 !important;
border-color: #111827 !important;
}
.training-step-area .el-button span {
color: inherit !important;
font-size: inherit !important;
@ -444,7 +551,7 @@
flex-wrap: wrap !important;
justify-content: center !important;
align-items: center !important;
gap: 20px !important;
gap: 14px !important;
margin-top: 20px !important;
padding: 0 !important;
}
@ -456,18 +563,20 @@
justify-content: center !important;
min-width: 112px !important;
width: auto !important;
height: var(--student-action-height) !important;
min-height: var(--student-action-height) !important;
padding: 0 16px !important;
border: 1px solid #1e88e5 !important;
border-radius: var(--student-radius-sm) !important;
color: #1e3a5f !important;
background: #e3f2fd !important;
height: 40px !important;
min-height: 40px !important;
padding: 0 18px !important;
border: 1px solid #e5e7eb !important;
border-radius: 10px !important;
color: #1f2937 !important;
background: #ffffff !important;
box-shadow: none !important;
font-size: var(--student-action-font) !important;
font-weight: 900 !important;
font-size: var(--student-fs-body) !important;
font-weight: 700 !important;
line-height: 1 !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,
@ -478,9 +587,33 @@
.student-training-shell .training-actions .el-button.training-action:hover:not(.is-disabled),
.student-training-shell .training-actions button.training-action:hover:not(:disabled) {
border-color: #1565c0 !important;
color: #1565c0 !important;
background: #bbdefb !important;
border-color: #1f2937 !important;
color: #1f2937 !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。统一底部提交/重置按钮规格。 */
@ -655,19 +788,28 @@
flex: 0 0 auto !important;
min-width: 0 !important;
width: auto !important;
height: 34px !important;
min-height: 34px !important;
max-height: 34px !important;
height: 40px !important;
min-height: 40px !important;
max-height: 40px !important;
margin: 0 !important;
padding: 0 12px !important;
border: 1px solid #1e88e5 !important;
border-radius: var(--student-radius-pill) !important;
color: #1e3a5f !important;
background: #e3f2fd !important;
padding: 0 18px !important;
border: 1px solid #e5e7eb !important;
border-radius: 10px !important;
color: #1f2937 !important;
background: #ffffff !important;
font-size: 13px !important;
font-weight: 800 !important;
font-weight: 700 !important;
line-height: 1 !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,
@ -681,19 +823,23 @@
gap: 8px !important;
min-width: 0 !important;
width: auto !important;
height: var(--student-upload-height) !important;
min-height: var(--student-upload-height) !important;
height: 40px !important;
min-height: 40px !important;
padding: 0 18px !important;
border: 1px solid #1e88e5 !important;
border-radius: var(--student-radius-pill) !important;
border: 1px solid #1f2937 !important;
border-radius: 10px !important;
color: #ffffff !important;
background: linear-gradient(95deg, #1e88e5, #1565c0) !important;
box-shadow: none !important;
background: #1f2937 !important;
box-shadow: 0 2px 6px rgba(31,41,55,.16) !important;
font-size: var(--student-upload-font) !important;
font-weight: 800 !important;
font-weight: 700 !important;
line-height: 1 !important;
letter-spacing: 0 !important;
white-space: nowrap !important;
&:hover {
background: #111827 !important;
border-color: #111827 !important;
}
}
.student-training-shell textarea,
@ -747,13 +893,13 @@
min-width: 136px !important;
height: 36px !important;
padding: 0 12px !important;
border: 1px solid #1e88e5 !important;
border-radius: 6px !important;
color: #1e3a5f !important;
background: #e3f2fd !important;
border: 1px solid #e5e7eb !important;
border-radius: 8px !important;
color: #1f2937 !important;
background: #ffffff !important;
box-shadow: none !important;
font-size: var(--student-fs-body) !important;
font-weight: 800 !important;
font-weight: 700 !important;
line-height: 1 !important;
letter-spacing: 0 !important;
}
@ -761,9 +907,9 @@
.legacy-training-page .top_item .el-button.active,
.legacy-training-page .top_item .active {
transform: none !important;
border-color: #1e88e5 !important;
border-color: #1f2937 !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

@ -130,11 +130,18 @@ function normalizeGoals(value) {
<style lang="scss" scoped>
.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;
border: 1px solid #90caf9;
border-radius: 20px;
background: #f0f6fd;
border: 1px solid var(--brief-panel-border);
border-radius: 12px;
background: #ffffff;
box-shadow: none;
}
@ -163,25 +170,30 @@ function normalizeGoals(value) {
justify-content: center;
gap: 8px;
min-width: 0;
height: 40px;
height: 36px;
padding: 0 12px;
border: 1px solid #90caf9;
border-radius: 6px;
color: #2c4a6a;
background: #e3f2fd;
border: 1px solid var(--brief-panel-border);
border-radius: 8px;
color: var(--brief-text-secondary);
background: var(--brief-accent-soft);
cursor: pointer;
font-size: var(--student-fs-body);
font-weight: 800;
font-size: 12px;
font-weight: 600;
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;
&:hover {
border-color: var(--brief-accent);
color: var(--brief-accent);
background: #ffffff;
}
.brief-tab:hover,
.brief-tab.is-active {
border-color: #1565c0;
color: #1e3a5f;
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,
@ -189,32 +201,32 @@ function normalizeGoals(value) {
display: inline-flex;
align-items: center;
justify-content: center;
width: 18px;
height: 18px;
flex: 0 0 18px;
width: 16px;
height: 16px;
flex: 0 0 16px;
line-height: 1;
.el-icon {
display: block;
width: 18px;
height: 18px;
font-size: 18px;
width: 16px;
height: 16px;
font-size: 16px;
line-height: 1;
}
}
.brief-tab-icon,
.brief-panel-icon,
.brief-tab--background .brief-tab-icon,
.brief-tab--goals .brief-tab-icon,
.brief-tab--requirements .brief-tab-icon {
color: #1e88e5;
.brief-tab .brief-tab-icon {
color: inherit;
}
.brief-tab.is-active .brief-tab-icon {
color: inherit;
}
.brief-panel {
border: 1px solid rgba(187, 222, 251, 0.2);
border-radius: 20px;
background: #f0f6fd;
border: 1px solid var(--brief-panel-border);
border-radius: 10px;
background: var(--brief-accent-soft);
overflow: hidden;
}
@ -222,30 +234,30 @@ function normalizeGoals(value) {
display: flex;
align-items: center;
gap: 8px;
height: 40px;
height: 36px;
padding: 0 14px;
border-bottom: 1px solid rgba(187, 222, 251, 0.2);
color: #1e3a5f;
font-size: var(--student-fs-h2);
font-weight: 900;
border-bottom: 1px solid var(--brief-panel-border);
color: var(--brief-text);
font-size: 13px;
font-weight: 700;
line-height: 1;
}
.brief-scroll {
max-height: 160px;
min-height: 110px;
min-height: 100px;
overflow-y: auto;
overscroll-behavior: contain;
scrollbar-width: thin;
scrollbar-color: #cfe2f5 #f0f6fd;
scrollbar-color: var(--brief-panel-border) var(--brief-accent-soft);
}
.brief-content {
margin: 0;
padding: 10px 16px 12px;
color: #2c4a6a;
font-size: var(--student-fs-body);
line-height: 1.85;
color: var(--brief-text-secondary);
font-size: 13px;
line-height: 1.6;
}
.brief-goals {
@ -253,8 +265,11 @@ function normalizeGoals(value) {
list-style: none;
li {
padding: 5px 0 5px 12px;
border-left: 2px solid #cfe2f5;
padding: 4px 0 4px 12px;
border-left: 2px solid var(--brief-panel-border);
color: var(--brief-text-secondary);
font-size: 13px;
line-height: 1.55;
}
li + li {
@ -263,16 +278,16 @@ function normalizeGoals(value) {
}
.brief-scroll::-webkit-scrollbar {
width: 8px;
width: 6px;
}
.brief-scroll::-webkit-scrollbar-track {
background: #f0f6fd;
background: var(--brief-accent-soft);
}
.brief-scroll::-webkit-scrollbar-thumb {
border-radius: 8px;
background: #cfe2f5;
border-radius: 6px;
background: var(--brief-panel-border);
}
@media (max-width: 768px) {
@ -289,13 +304,14 @@ function normalizeGoals(value) {
}
.brief-tab {
height: 36px;
height: 34px;
padding: 0 8px;
font-size: var(--student-fs-body);
font-size: 11px;
}
.brief-scroll {
height: 140px;
max-height: 140px;
min-height: 90px;
}
}
</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-tab {
flex: 1 1 0 !important;
max-width: 220px !important;
flex: 0 0 auto !important;
min-width: auto !important;
max-width: none !important;
display: flex !important;
flex-direction: row !important;
align-items: center !important;
justify-content: center !important;
gap: 8px !important;
min-width: 0 !important;
height: auto !important;
min-height: 42px !important;
margin: 0 !important;
padding: 8px 12px !important;
padding: 8px 14px !important;
border: 1px solid #e5e7eb !important;
border-radius: 8px !important;
background: #ffffff !important;
@ -692,7 +692,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify(buildDraft(), n
font-weight: 600 !important;
line-height: 1.3 !important;
letter-spacing: 0 !important;
white-space: normal !important;
white-space: nowrap !important;
text-align: center !important;
cursor: pointer;
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;
}
#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;
}
}

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-tab {
flex: 1 1 0 !important;
max-width: 220px !important;
flex: 0 0 auto !important;
min-width: auto !important;
max-width: none !important;
display: flex !important;
flex-direction: row !important;
align-items: center !important;
justify-content: center !important;
gap: 8px !important;
min-width: 0 !important;
height: auto !important;
min-height: 42px !important;
margin: 0 !important;
padding: 8px 12px !important;
padding: 8px 14px !important;
border: 1px solid #e5e7eb !important;
border-radius: 8px !important;
background: #ffffff !important;
@ -713,7 +713,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify(buildDraft(), n
font-weight: 600 !important;
line-height: 1.3 !important;
letter-spacing: 0 !important;
white-space: normal !important;
white-space: nowrap !important;
text-align: center !important;
cursor: pointer;
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;
}
#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;
}
}

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; }
.step-tab {
flex: 1 1 0 !important;
max-width: 220px !important;
flex: 0 0 auto !important;
min-width: auto !important;
max-width: none !important;
display: flex !important;
flex-direction: row !important;
align-items: center !important;
justify-content: center !important;
gap: 8px !important;
min-width: 0 !important;
height: auto !important;
min-height: 42px !important;
margin: 0 !important;
padding: 8px 12px !important;
padding: 8px 14px !important;
border: 1px solid #e5e7eb !important;
border-radius: 8px !important;
background: #ffffff !important;
@ -836,7 +836,7 @@ function exportOutcome() { const blob = new Blob([JSON.stringify({ taskName: tas
font-weight: 600 !important;
line-height: 1.3 !important;
letter-spacing: 0 !important;
white-space: normal !important;
white-space: nowrap !important;
text-align: center !important;
cursor: pointer;
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;
}
#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;
}
}

Loading…
Cancel
Save