/* ============================================================
   模型训练与微调 + 低代码（AI实验工作台）· 模块专属样式
   从宿主工程 teacher-styles.css 抽取，原样保留。
   依赖宿主已定义的 CSS 变量：--ink-0/25/50/100/150/200/250/300/400/500/600/700/800/900、
   --shadow-sm/md、--success-500、--font-num，以及公共类 .btn/.btn--primary/.btn--default、
   .form-input/.form-select/.form-textarea/.form-label/.form-row/.form-hint/.form-error、
   .modal/.modal__header/.modal__title/.modal__close/.modal__body/.modal__footer/.modal-backdrop、
   .panel、.t-page/.t-page-head/.t-page-title/.t-page-sub、.t-stub、.status-badge、.switch、
   .input/.input__icon/.input__clear、.pagination/.page-btn/.page-size/.page-jump、.alert/.alert--info、
   .kb-accent（红色主按钮覆盖，需改蓝）、.kb-spin（加载转圈）、.mono、.req。
   ============================================================ */

/* ================= 低代码 · AI实验工作台 ================= */
.lab-wrap { display: flex; flex-direction: column; height: calc(100vh - 60px); background: var(--ink-25); }
.lab-topbar { display: flex; align-items: center; gap: 18px; padding: 10px 20px; background: var(--ink-0); border-bottom: 1px solid var(--ink-150); flex: none; flex-wrap: wrap; }
.lab-image-box { display: flex; flex-direction: column; gap: 2px; }
.lab-image-label { font-size: 11px; color: var(--ink-500); }
.lab-image-cur { font-size: 12.5px; color: var(--ink-400); font-family: ui-monospace, monospace; }
.lab-image-cur.is-set { color: oklch(0.45 0.13 145); } /* 语义·成功（已选镜像）— 保留 */
.lab-image-select { display: flex; align-items: center; gap: 8px; }
.lab-field-label { font-size: 12.5px; color: var(--ink-600); white-space: nowrap; }
.lab-topbar__actions { margin-left: auto; display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.lab-btn { display: inline-flex; align-items: center; gap: 5px; height: 34px; padding: 0 13px; border: 1px solid var(--ink-200); background: var(--ink-0); border-radius: 8px; font-size: 13px; color: var(--ink-700); cursor: pointer; transition: all 0.12s; }
.lab-btn:hover { border-color: var(--ink-300); background: var(--ink-25); }
.lab-btn--ghost { border-color: oklch(0.80 0.10 260); color: oklch(0.48 0.14 260); }      /* 品牌·橙（原理课堂按钮）— 需改 */
.lab-btn--ghost:hover { background: oklch(0.97 0.04 260); }                               /* 品牌·橙 — 需改 */
.lab-btn--primary { background: oklch(0.55 0.18 260); border-color: oklch(0.55 0.18 260); color: #fff; } /* 品牌·红（主按钮 开始训练AI）— 需改蓝 */
.lab-btn--primary:hover { background: oklch(0.50 0.17 260); border-color: oklch(0.50 0.17 260); }          /* 品牌·红 — 需改蓝 */

.lab-hint-banner { display: flex; align-items: center; gap: 8px; padding: 8px 20px; background: oklch(0.97 0.025 250); border-bottom: 1px solid oklch(0.92 0.03 250); font-size: 12.5px; color: oklch(0.42 0.12 250); flex: none; } /* 信息·蓝（提示条）— 已是蓝，保留 */
.lab-hint-banner__dot { width: 7px; height: 7px; border-radius: 50%; background: oklch(0.55 0.15 250); flex: none; }
.lab-hint-banner__mode { margin-left: auto; font-weight: 500; padding: 2px 10px; background: oklch(0.93 0.05 250); border-radius: 999px; }

.lab-body { flex: 1; display: grid; grid-template-columns: 264px 1fr 312px; min-height: 0; }

/* 组件库 */
.lab-lib { border-right: 1px solid var(--ink-150); background: var(--ink-0); display: flex; flex-direction: column; min-height: 0; }
.lab-lib__head { padding: 14px 16px 10px; border-bottom: 1px solid var(--ink-100); flex: none; }
.lab-lib__title { font-size: 14px; font-weight: 600; color: var(--ink-900); }
.lab-lib__sub { font-size: 11.5px; color: var(--ink-500); margin-top: 3px; }
.lab-lib__scroll { flex: 1; overflow-y: auto; padding: 12px; }
.lab-lib-group { margin-bottom: 16px; }
.lab-lib-group__title { font-size: 12px; font-weight: 600; color: var(--ink-600); margin-bottom: 8px; padding-left: 2px; }
.lab-comp { display: flex; align-items: center; gap: 10px; padding: 10px; border: 1px solid var(--ink-150); border-radius: 10px; background: var(--ink-0); cursor: grab; margin-bottom: 8px; transition: all 0.12s; }
.lab-comp:hover { border-color: oklch(0.55 0.18 260); box-shadow: var(--shadow-sm); transform: translateY(-1px); } /* 品牌·红（hover 边框）— 需改蓝 */
.lab-comp:active { cursor: grabbing; }
.lab-comp__icon { width: 34px; height: 34px; border-radius: 9px; display: grid; place-items: center; font-size: 18px; flex: none; }
.lab-comp__main { flex: 1; min-width: 0; }
.lab-comp__name { font-size: 13px; font-weight: 500; color: var(--ink-900); }
.lab-comp__desc { font-size: 11px; color: var(--ink-500); margin-top: 2px; line-height: 1.4; }
.lab-comp__grip { color: var(--ink-300); flex: none; }

/* 画布 */
.lab-canvas-area { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
.lab-canvas-toolbar { display: flex; align-items: center; gap: 12px; padding: 8px 14px; background: var(--ink-0); border-bottom: 1px solid var(--ink-150); flex: none; }
.lab-canvas-btn { display: inline-flex; align-items: center; gap: 5px; height: 30px; padding: 0 11px; border: 1px solid var(--ink-200); background: var(--ink-0); border-radius: 7px; font-size: 12.5px; color: var(--ink-700); cursor: pointer; }
.lab-canvas-btn:hover { border-color: oklch(0.62 0.19 260); color: oklch(0.55 0.18 260); } /* 品牌·红（清空 hover）— 需改蓝 */
.lab-zoom { display: inline-flex; align-items: center; gap: 4px; border: 1px solid var(--ink-200); border-radius: 7px; padding: 2px; }
.lab-zoom__btn { width: 24px; height: 24px; border: none; background: none; color: var(--ink-600); font-size: 16px; cursor: pointer; border-radius: 5px; display: grid; place-items: center; }
.lab-zoom__btn:hover { background: var(--ink-100); }
.lab-zoom__val { font-size: 12px; color: var(--ink-700); min-width: 42px; text-align: center; }
.lab-canvas-route { font-size: 11.5px; color: var(--ink-500); }
.lab-canvas-train { margin-left: auto; height: 30px; }

.lab-canvas { flex: 1; position: relative; overflow: auto; background-color: var(--ink-25); background-image: radial-gradient(var(--ink-200) 1px, transparent 1px); background-size: 20px 20px; }
.lab-canvas-empty { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; pointer-events: none; }
.lab-canvas-empty__icon { font-size: 44px; margin-bottom: 12px; opacity: 0.55; }
.lab-canvas-empty__title { font-size: 15px; font-weight: 600; color: var(--ink-600); }
.lab-canvas-empty__hint { font-size: 12.5px; color: var(--ink-400); margin-top: 8px; line-height: 1.7; }
.lab-canvas-inner { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
.lab-edges { position: absolute; top: 0; left: 0; overflow: visible; pointer-events: none; }
.lab-edge { fill: none; stroke: var(--ink-300); stroke-width: 2; }

.lab-node { position: absolute; display: flex; align-items: center; gap: 9px; padding: 0 11px; background: var(--ink-0); border: 1.5px solid var(--ink-200); border-left: 4px solid var(--nc); border-radius: 11px; box-shadow: var(--shadow-sm); cursor: grab; user-select: none; transition: box-shadow 0.12s; } /* --nc 由内联 style 注入（节点左边色条），见 lab-page.jsx */
.lab-node:hover { box-shadow: var(--shadow-md); }
.lab-node.is-sel { border-color: var(--nc); box-shadow: 0 0 0 3px oklch(0.55 0.18 260/ 0.14), var(--shadow-md); } /* 品牌·红（选中光圈）— 需改蓝 */
.lab-node.is-linking { box-shadow: 0 0 0 3px oklch(0.65 0.16 145 / 0.3); } /* 语义·成功绿（连线中）— 保留 */
.lab-node:active { cursor: grabbing; }
.lab-node__icon { width: 34px; height: 34px; border-radius: 9px; display: grid; place-items: center; font-size: 18px; flex: none; }
.lab-node__main { flex: 1; min-width: 0; }
.lab-node__name { font-size: 13px; font-weight: 600; color: var(--ink-900); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lab-node__type { font-size: 10.5px; color: var(--ink-400); font-family: ui-monospace, monospace; }
.lab-node__del { position: absolute; top: -8px; right: -8px; width: 18px; height: 18px; border-radius: 50%; border: 1px solid var(--ink-200); background: var(--ink-0); color: var(--ink-500); cursor: pointer; display: none; place-items: center; }
.lab-node:hover .lab-node__del { display: grid; }
.lab-node__del:hover { border-color: oklch(0.62 0.19 260); color: oklch(0.55 0.18 260); } /* 品牌·红（删除 hover）— 需改蓝 或 语义·危险 */
.lab-node__port { position: absolute; top: 50%; width: 12px; height: 12px; border-radius: 50%; background: var(--ink-0); border: 2px solid var(--ink-300); transform: translateY(-50%); cursor: crosshair; }
.lab-node__port:hover { border-color: oklch(0.55 0.18 260); background: oklch(0.97 0.03 260); } /* 品牌·红（端口 hover）— 需改蓝 */
.lab-node__port--in { left: -6px; }
.lab-node__port--out { right: -6px; }

/* 右侧配置 */
.lab-config { border-left: 1px solid var(--ink-150); background: var(--ink-0); overflow-y: auto; min-height: 0; }
.lab-config-empty { height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding: 30px; }
.lab-config-empty__icon { width: 60px; height: 60px; border-radius: 16px; background: var(--ink-50); color: var(--ink-400); display: grid; place-items: center; margin-bottom: 16px; }
.lab-config-empty__title { font-size: 15px; font-weight: 600; color: var(--ink-700); }
.lab-config-empty__hint { font-size: 12.5px; color: var(--ink-500); margin-top: 7px; line-height: 1.6; max-width: 200px; }
.lab-config-body { padding: 16px; }
.lab-config-head { display: flex; align-items: center; gap: 11px; padding-bottom: 14px; border-bottom: 1px solid var(--ink-100); margin-bottom: 14px; }
.lab-config-head__icon { width: 40px; height: 40px; border-radius: 10px; display: grid; place-items: center; font-size: 20px; flex: none; }
.lab-config-head__name { font-size: 14.5px; font-weight: 600; color: var(--ink-900); }
.lab-config-head__type { font-size: 11px; color: var(--ink-400); font-family: ui-monospace, monospace; margin-top: 1px; }
.lab-config-section-title { font-size: 12px; font-weight: 600; color: var(--ink-500); margin: 16px 0 11px; }
.lab-param-list { display: flex; flex-direction: column; gap: 14px; }
.lab-param__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 7px; }
.lab-param__label { font-size: 12.5px; color: var(--ink-700); }
.lab-param__val { font-size: 12px; font-weight: 600; color: oklch(0.50 0.17 260); } /* 品牌·红（参数当前值）— 需改蓝 */
.lab-range { width: 100%; accent-color: oklch(0.55 0.18 260); } /* 品牌·红（滑块）— 需改蓝 */
.lab-upload { display: flex; align-items: center; gap: 8px; padding: 11px; border: 1.5px dashed var(--ink-200); border-radius: 9px; color: var(--ink-500); font-size: 12px; cursor: pointer; justify-content: center; }
.lab-upload:hover { border-color: oklch(0.55 0.18 260); color: oklch(0.50 0.17 260); } /* 品牌·红（上传 hover）— 需改蓝 */
.lab-principle-card { display: flex; gap: 10px; padding: 12px 13px; background: oklch(0.97 0.03 80); border: 1px solid oklch(0.90 0.05 80); border-radius: 10px; } /* 装饰·暖黄（原理卡片底）— 可保留 */
.lab-principle-card__emoji { font-size: 17px; flex: none; }
.lab-principle-card p { margin: 0; font-size: 12.5px; color: oklch(0.40 0.06 80); line-height: 1.7; } /* 装饰·暖黄文字 — 可保留 */

/* 底部状态条 */
.lab-statusbar { display: flex; align-items: center; gap: 9px; padding: 8px 20px; background: oklch(0.22 0.02 260); color: oklch(0.86 0.02 145); flex: none; font-size: 12.5px; font-family: ui-monospace, monospace; } /* 深色终端底 + 绿字 — 保留 */
.lab-status-led { width: 8px; height: 8px; border-radius: 50%; background: oklch(0.65 0.16 145); flex: none; } /* 语义·成功绿（就绪）— 保留 */
.lab-status-led.is-busy { background: oklch(0.70 0.15 60); animation: lab-blink 0.9s ease-in-out infinite; } /* 语义·警告橙（运行中）— 保留 */
@keyframes lab-blink { 50% { opacity: 0.3; } }
.lab-muted { color: var(--ink-500); }

/* 加载弹窗 */
.lab-load-modal { width: min(720px, 95vw); max-height: 88vh; display: flex; flex-direction: column; }
.lab-load-body { overflow-y: auto; }
.lab-load-bar { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; font-size: 13px; color: var(--ink-700); }
.lab-table-wrap { border: 1px solid var(--ink-150); border-radius: 10px; overflow: hidden; }
.lab-load-table { width: 100%; border-collapse: collapse; }
.lab-load-table th { text-align: left; font-size: 11.5px; font-weight: 500; color: var(--ink-500); padding: 9px 12px; background: var(--ink-25); border-bottom: 1px solid var(--ink-150); }
.lab-load-table td { padding: 10px 12px; font-size: 13px; color: var(--ink-800); border-bottom: 1px solid var(--ink-100); }
.lab-load-table tbody tr { cursor: pointer; }
.lab-load-table tbody tr:last-child td { border-bottom: none; }
.lab-load-table tbody tr:hover { background: var(--ink-25); }
.lab-load-table tbody tr.is-sel { background: oklch(0.97 0.03 260); } /* 品牌·红浅底（选中行）— 需改蓝 */
.lab-pl-name { font-weight: 500; color: var(--ink-900); }
.lab-empty-row { text-align: center; color: var(--ink-400); padding: 26px 0 !important; }
.lab-radio { display: inline-grid; place-items: center; width: 16px; height: 16px; border: 1.5px solid var(--ink-300); border-radius: 50%; }
.lab-radio.is-on { border-color: oklch(0.55 0.18 260); } /* 品牌·红（单选选中）— 需改蓝 */
.lab-radio__dot { width: 8px; height: 8px; border-radius: 50%; background: oklch(0.55 0.18 260); } /* 品牌·红 — 需改蓝 */
.lab-link { background: none; border: none; color: oklch(0.50 0.17 260); font-size: 12.5px; cursor: pointer; padding: 3px 6px; border-radius: 5px; } /* 品牌·红（文字链接）— 需改蓝 */
.lab-link:hover { background: oklch(0.97 0.03 260); } /* 品牌·红浅底 — 需改蓝 */
.lab-link--danger { color: oklch(0.55 0.18 25); } /* 语义·危险红（删除）— 保留（但与品牌红同值，改品牌色时注意区分）*/

/* 原理课堂 */
.lab-principle-modal { width: min(600px, 94vw); max-height: 88vh; display: flex; flex-direction: column; }
.lab-principle-emoji { margin-right: 8px; }
.lab-principle-body { overflow-y: auto; }
.lab-principle-section { margin-bottom: 20px; }
.lab-principle-section:last-child { margin-bottom: 0; }
.lab-principle-h { font-size: 15px; font-weight: 600; color: var(--ink-900); margin-bottom: 8px; }
.lab-principle-p { margin: 0; font-size: 13.5px; color: var(--ink-700); line-height: 1.85; }

/* ================= 模型训练与微调 · 数据集管理 ================= */
/* 上传区 */
.mt-upload-bar { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; flex-wrap: wrap; }
.mt-upload-hint { font-size: 12.5px; color: var(--ink-500); }
.mt-upload-file { display: inline-flex; align-items: center; gap: 8px; margin-left: 4px; padding: 5px 12px; background: var(--ink-25); border: 1px solid var(--ink-150); border-radius: 999px; font-size: 12.5px; color: var(--ink-700); }
.mt-upload-size { color: var(--ink-500); }
.mt-upload-status { color: oklch(0.50 0.13 250); } /* 信息·蓝（上传中）— 保留 */

/* 列表表格 */
.mt-table { width: 100%; border-collapse: collapse; }
.mt-table th { text-align: left; font-size: 11.5px; font-weight: 500; color: var(--ink-500); padding: 11px 12px; background: var(--ink-25); border-bottom: 1px solid var(--ink-150); white-space: nowrap; }
.mt-table td { padding: 12px; font-size: 13px; color: var(--ink-800); border-bottom: 1px solid var(--ink-100); }
.mt-table tbody tr:last-child td { border-bottom: none; }
.mt-table tbody tr:hover { background: var(--ink-25); }
.mt-ds-name { display: flex; align-items: center; gap: 9px; min-width: 0; }
.mt-ds-name > .mono { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mt-ds-ext { font-size: 10px; font-weight: 600; padding: 2px 6px; border-radius: 4px; background: oklch(0.94 0.05 258); color: oklch(0.42 0.16 258); flex: none; } /* 装饰·蓝（格式标签）— 可保留/统一蓝 */
.mt-row-actions { display: inline-flex; align-items: center; gap: 4px; }
.mt-row-actions .lc-link.is-danger { color: oklch(0.55 0.18 25); } /* 语义·危险红（删除）— 保留 */
.mt-row-actions .lc-link.is-danger:hover { background: oklch(0.97 0.04 25); } /* 语义·危险红浅底 — 保留 */
.mt-row-actions .lc-link:disabled { color: var(--ink-300); cursor: not-allowed; background: none; }

.mt-ds-status { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; font-weight: 500; }
.mt-ds-status--done { color: oklch(0.45 0.13 145); }   /* 语义·成功绿（解析完成）— 保留 */
.mt-ds-status--done .status-badge__dot { background: var(--success-500); }
.mt-ds-status--parsing { color: oklch(0.52 0.13 250); } /* 信息·蓝（解析中）— 保留 */
.mt-ds-status--failed { color: oklch(0.55 0.18 25); }   /* 语义·危险红（失败）— 保留 */
.mt-ds-status--failed .status-badge__dot { background: oklch(0.58 0.18 25); }

/* 详情 / 预览页 */
.mt-detail { height: calc(100vh - 60px); display: flex; flex-direction: column; }
.mt-detail__top { display: flex; align-items: center; gap: 14px; padding: 12px 24px; border-bottom: 1px solid var(--ink-150); flex: none; }
.mt-detail__title { font-size: 15px; font-weight: 600; color: var(--ink-900); }
.mt-detail__body { flex: 1; display: grid; grid-template-columns: 300px 1fr; min-height: 0; }
.mt-ds-side { border-right: 1px solid var(--ink-150); background: var(--ink-25); overflow-y: auto; padding: 12px; }
.mt-ds-item { display: flex; align-items: center; gap: 10px; padding: 10px 11px; border-radius: 9px; cursor: pointer; margin-bottom: 6px; border: 1px solid transparent; }
.mt-ds-item:hover { background: var(--ink-50); }
.mt-ds-item.is-active { background: var(--ink-0); border-color: oklch(0.55 0.18 260); box-shadow: var(--shadow-sm); } /* 品牌·红（选中条目）— 需改蓝 */
.mt-ds-item__icon { width: 32px; height: 32px; border-radius: 8px; background: oklch(0.95 0.04 258); color: oklch(0.42 0.16 258); display: grid; place-items: center; flex: none; } /* 装饰·蓝 — 可保留 */
.mt-ds-item__main { flex: 1; min-width: 0; }
.mt-ds-item__name { font-size: 12.5px; color: var(--ink-900); font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mt-ds-item__meta { font-size: 11px; color: var(--ink-500); margin-top: 2px; }
.mt-ds-item__ops { display: flex; gap: 2px; flex: none; }
.mt-ds-item__ops button { width: 26px; height: 26px; border: none; background: none; color: var(--ink-400); cursor: pointer; display: grid; place-items: center; border-radius: 6px; }
.mt-ds-item__ops button:hover { background: var(--ink-100); color: oklch(0.50 0.17 260); } /* 品牌·红（图标 hover）— 需改蓝 */

.mt-ds-preview { overflow-y: auto; padding: 24px; display: flex; align-items: flex-start; justify-content: center; }
.mt-file-card { background: var(--ink-0); border: 1px solid var(--ink-150); border-radius: 14px; padding: 32px; text-align: center; max-width: 460px; width: 100%; box-shadow: var(--shadow-sm); margin-top: 20px; }
.mt-file-card__icon { width: 72px; height: 72px; border-radius: 16px; background: oklch(0.95 0.04 258); color: oklch(0.42 0.16 258); display: grid; place-items: center; margin: 0 auto 16px; } /* 装饰·蓝 — 可保留 */
.mt-file-card__name { font-size: 15px; font-weight: 600; color: var(--ink-900); word-break: break-all; }
.mt-file-card__meta { display: flex; flex-direction: column; gap: 7px; margin: 16px 0 22px; font-size: 13px; color: var(--ink-600); }
.mt-file-card__actions { display: flex; gap: 10px; justify-content: center; }

.mt-csv { width: 100%; }
.mt-csv__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }
.mt-csv__title { font-size: 14px; font-weight: 600; color: var(--ink-900); }
.mt-csv__scroll { overflow-x: auto; border: 1px solid var(--ink-150); border-radius: 10px; }
.mt-csv-table { width: 100%; border-collapse: collapse; }
.mt-csv-table th { text-align: left; font-size: 11.5px; font-weight: 600; color: var(--ink-600); padding: 9px 12px; background: var(--ink-25); border-bottom: 1px solid var(--ink-150); white-space: nowrap; }
.mt-csv-table td { padding: 9px 12px; font-size: 12.5px; color: var(--ink-800); border-bottom: 1px solid var(--ink-100); white-space: nowrap; }
.mt-csv-table tbody tr:last-child td { border-bottom: none; }

/* 抽样预览弹窗 */
.mt-sample-modal { width: min(680px, 94vw); max-height: 88vh; display: flex; flex-direction: column; }
.mt-sample-body { overflow-y: auto; }
.mt-sample-card { border: 1px solid var(--ink-150); border-radius: 11px; padding: 14px 16px; margin-bottom: 12px; background: var(--ink-0); }
.mt-sample-card:last-child { margin-bottom: 0; }
.mt-sample-card__title { font-size: 12.5px; font-weight: 600; color: oklch(0.50 0.17 260); margin-bottom: 10px; } /* 品牌·红（Sample #N）— 需改蓝 */
.mt-sample-field { margin-bottom: 9px; }
.mt-sample-field:last-child { margin-bottom: 0; }
.mt-sample-key { display: inline-block; font-size: 11px; font-weight: 600; font-family: ui-monospace, monospace; color: oklch(0.42 0.12 258); background: oklch(0.95 0.04 258); padding: 1px 7px; border-radius: 4px; margin-bottom: 5px; } /* 装饰·蓝（字段名 tag）— 可保留 */
.mt-sample-val { font-size: 13px; color: var(--ink-800); line-height: 1.6; }
.mt-sample-val--pre { white-space: pre-wrap; font-family: ui-monospace, monospace; font-size: 12.5px; background: var(--ink-25); border: 1px solid var(--ink-100); border-radius: 7px; padding: 9px 11px; }

/* 创建训练任务弹窗 */
.mt-task-modal { width: min(640px, 94vw); max-height: 92vh; display: flex; flex-direction: column; }
.mt-task-modal__body { overflow-y: auto; }
.mt-form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.mt-form-grid--3 { grid-template-columns: 1fr 1fr 1fr; }
.mt-radio-group { display: flex; gap: 8px; flex-wrap: wrap; }
.mt-radio { display: inline-flex; align-items: center; gap: 7px; padding: 8px 14px; border: 1px solid var(--ink-200); border-radius: 8px; font-size: 12.5px; color: var(--ink-700); cursor: pointer; }
.mt-radio:hover { border-color: var(--ink-300); }
.mt-radio.is-active { border-color: oklch(0.55 0.18 260); background: oklch(0.97 0.03 260); color: var(--ink-900); } /* 品牌·红（微调方式选中）— 需改蓝 */
.mt-radio__dot { width: 15px; height: 15px; border: 1.5px solid var(--ink-300); border-radius: 50%; display: inline-grid; place-items: center; flex: none; }
.mt-radio.is-active .mt-radio__dot { border-color: oklch(0.55 0.18 260); } /* 品牌·红 — 需改蓝 */
.mt-radio__inner { width: 7px; height: 7px; border-radius: 50%; background: oklch(0.55 0.18 260); } /* 品牌·红 — 需改蓝 */
.mt-disabled-hint { font-size: 11px; color: var(--ink-400); font-weight: 400; }
.mt-task-modal .form-input:disabled { background: var(--ink-100); color: var(--ink-400); cursor: not-allowed; }

/* ================= 训练任务 ================= */
.btn--sm { height: 30px; padding: 0 12px; font-size: 12.5px; } /* 公共小按钮尺寸（若宿主已有可删）*/
.mt-train-layout { display: block; }
.mt-train-layout.has-monitor { display: grid; grid-template-columns: 1fr 420px; gap: 18px; align-items: start; }
.mt-task-col { min-width: 0; }

.mt-task-list { display: flex; flex-direction: column; gap: 12px; }
.mt-task-card { background: var(--ink-0); border: 1px solid var(--ink-150); border-radius: 12px; padding: 16px; transition: box-shadow 0.15s, border-color 0.15s; }
.mt-task-card:hover { box-shadow: var(--shadow-sm); }
.mt-task-card.is-monitoring { border-color: oklch(0.55 0.18 260); box-shadow: 0 0 0 2px oklch(0.55 0.18 260/ 0.12); } /* 品牌·红（监控中卡片）— 需改蓝 */
.mt-task-card__head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
.mt-task-card__title-wrap { display: flex; align-items: center; gap: 10px; min-width: 0; }
.mt-task-card__name { font-size: 15px; font-weight: 600; color: var(--ink-900); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mt-task-status { display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; font-weight: 500; padding: 2px 9px; border-radius: 999px; flex: none; }
.mt-task-status--waiting { background: var(--ink-100); color: var(--ink-600); }                                  /* 等待中·灰 — 保留 */
.mt-task-status--waiting .status-badge__dot { background: var(--ink-400); }
.mt-task-status--queued { background: oklch(0.95 0.05 60); color: oklch(0.48 0.13 60); }                          /* 排队中·橙（语义警告）— 保留 */
.mt-task-status--queued .status-badge__dot { background: oklch(0.65 0.15 60); }
.mt-task-status--running { background: oklch(0.95 0.05 250); color: oklch(0.45 0.14 250); }                       /* 训练中·蓝（信息）— 保留 */
.mt-task-status--done { background: oklch(0.95 0.06 145); color: oklch(0.40 0.13 145); }                          /* 已完成·绿（成功）— 保留 */
.mt-task-status--done .status-badge__dot { background: var(--success-500); }
.mt-task-status--failed { background: oklch(0.95 0.05 25); color: oklch(0.52 0.18 25); }                          /* 失败·红（危险）— 保留 */
.mt-task-status--failed .status-badge__dot { background: oklch(0.58 0.18 25); }
.mt-task-status--stopped { background: var(--ink-100); color: var(--ink-500); }                                   /* 已停止·灰 — 保留 */
.mt-task-status--stopped .status-badge__dot { background: var(--ink-400); }

.mt-task-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px 18px; padding: 12px 0; border-top: 1px solid var(--ink-100); border-bottom: 1px solid var(--ink-100); }
.mt-task-field { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.mt-task-field__label { font-size: 11px; color: var(--ink-500); }
.mt-task-field__value { font-size: 13px; color: var(--ink-800); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mt-task-card__foot { display: flex; gap: 8px; margin-top: 12px; }

/* 监控面板 */
.mt-monitor { position: sticky; top: 16px; background: var(--ink-0); border: 1px solid var(--ink-150); border-radius: 12px; overflow: hidden; }
.mt-monitor__head { padding: 13px 16px; border-bottom: 1px solid var(--ink-100); }
.mt-monitor__title { display: flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600; color: var(--ink-900); }
.mt-live-dot { width: 8px; height: 8px; border-radius: 50%; background: oklch(0.58 0.18 25); position: relative; } /* 品牌·红（实时跳点）— 可改蓝或保留为“直播红” */
.mt-live-dot::after { content: ""; position: absolute; inset: -4px; border-radius: 50%; background: oklch(0.58 0.18 25 / 0.3); animation: mt-pulse 1.4s ease-out infinite; }
@keyframes mt-pulse { 0% { transform: scale(0.6); opacity: 0.8; } 100% { transform: scale(1.8); opacity: 0; } }
.mt-monitor__meta { display: flex; flex-direction: column; gap: 5px; padding: 12px 16px; font-size: 12.5px; color: var(--ink-600); border-bottom: 1px solid var(--ink-100); }
.mt-monitor__meta strong { color: var(--ink-800); font-weight: 500; }
.mt-monitor__body { display: flex; flex-direction: column; }
.mt-chart { padding: 14px 16px; border-bottom: 1px solid var(--ink-100); }
.mt-chart__title { font-size: 12px; color: var(--ink-500); margin-bottom: 8px; }
.mt-chart__svg { width: 100%; height: 150px; display: block; } /* loss 曲线在 mt-train-page.jsx 内联用 oklch(0.55 0.18 260) 红色描边/填充 — 需改蓝 */
.mt-chart__cur { font-size: 12px; color: var(--ink-600); margin-top: 8px; text-align: right; }
.mt-logs { padding: 14px 16px; }
.mt-logs__title { font-size: 12.5px; font-weight: 600; color: var(--ink-800); margin-bottom: 8px; }
.mt-logs__connect { display: flex; align-items: center; gap: 7px; font-size: 11.5px; color: oklch(0.50 0.13 250); margin-bottom: 8px; } /* 信息·蓝（连接中）— 保留 */
.mt-logs__box { height: 220px; overflow-y: auto; background: oklch(0.20 0.015 260); border-radius: 9px; padding: 10px 12px; font-family: ui-monospace, "SF Mono", Menlo, monospace; font-size: 11.5px; line-height: 1.65; } /* 深色终端底 — 保留 */
.mt-log-line { color: oklch(0.86 0.02 145); white-space: pre-wrap; word-break: break-all; } /* 终端绿字 — 保留 */
.mt-log-line.is-sys { color: oklch(0.72 0.10 250); } /* 终端蓝字（系统日志）— 保留 */
.mt-logs__empty { color: oklch(0.60 0.02 260); }

/* 微调产物详情 */
.mt-artifact-modal { width: min(560px, 94vw); max-height: 90vh; display: flex; flex-direction: column; }
.mt-artifact-body { overflow-y: auto; }
.mt-art-section { margin-bottom: 18px; }
.mt-art-section:last-child { margin-bottom: 0; }
.mt-art-section__title { font-size: 13px; font-weight: 600; color: var(--ink-800); margin-bottom: 10px; padding-bottom: 7px; border-bottom: 1px solid var(--ink-100); }
.mt-art-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px 18px; }
.mt-art-row { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.mt-art-key { font-size: 11.5px; color: var(--ink-500); }
.mt-art-val { font-size: 13px; color: var(--ink-900); word-break: break-all; }

/* ================= 模型仓库 + 推理服务 ================= */
.mr-tabs { display: flex; gap: 2px; border-bottom: 1px solid var(--ink-150); }
.mr-tab { background: none; border: none; padding: 11px 18px; font-size: 14px; color: var(--ink-500); cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; white-space: nowrap; }
.mr-tab:hover { color: var(--ink-800); }
.mr-tab.is-active { color: oklch(0.50 0.17 260); border-bottom-color: oklch(0.55 0.18 260); font-weight: 500; } /* 品牌·红（标签选中）— 需改蓝 */

.mr-layout { display: block; }
.mr-layout.has-sandbox { display: grid; grid-template-columns: 1fr 400px; gap: 18px; align-items: start; }
.mr-main-col { min-width: 0; }

.mr-toolbar { display: flex; align-items: center; margin-bottom: 16px; }
.mr-toolbar--between { justify-content: space-between; }
.mr-toolbar__title { font-size: 15px; font-weight: 600; color: var(--ink-900); }

/* 卡片网格 */
.mr-card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 14px; }
.mr-card { background: var(--ink-0); border: 1px solid var(--ink-150); border-radius: 12px; padding: 16px; transition: box-shadow 0.15s, border-color 0.15s; }
.mr-card:hover { box-shadow: var(--shadow-sm); border-color: var(--ink-200); }
.mr-card__head { display: flex; align-items: center; gap: 10px; }
.mr-card__icon { width: 36px; height: 36px; border-radius: 9px; background: oklch(0.95 0.04 258); color: oklch(0.42 0.16 258); display: grid; place-items: center; flex: none; } /* 装饰·蓝（基座模型图标）— 可保留 */
.mr-card__icon--ft { background: oklch(0.95 0.05 160); color: oklch(0.40 0.13 160); } /* 装饰·青绿（微调成果图标）— 可保留 */
.mr-card__name { flex: 1; min-width: 0; font-size: 14px; font-weight: 600; color: var(--ink-900); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mr-status { display: inline-flex; align-items: center; gap: 5px; font-size: 11px; font-weight: 500; padding: 2px 9px; border-radius: 999px; flex: none; }
.mr-status--ok { background: oklch(0.95 0.06 145); color: oklch(0.40 0.13 145); } /* 可用·绿（成功）— 保留 */
.mr-status--ok .status-badge__dot { background: var(--success-500); }
.mr-status--fail { background: oklch(0.95 0.05 25); color: oklch(0.52 0.18 25); } /* 失败·红（危险）— 保留 */
.mr-status--fail .status-badge__dot { background: oklch(0.58 0.18 25); }

.mr-linked-tag { display: inline-flex; align-items: center; gap: 4px; margin-top: 12px; font-size: 11px; font-weight: 500; color: oklch(0.45 0.13 145); background: oklch(0.96 0.05 145); padding: 2px 9px; border-radius: 6px; } /* 当前关联·绿 — 保留 */

.mr-card__fields { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--ink-100); }
.mr-card__fields--ft { grid-template-columns: repeat(2, 1fr); }
.mr-field { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.mr-field__label { font-size: 11px; color: var(--ink-500); }
.mr-field__value { font-size: 13px; color: var(--ink-800); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mr-field__value--accent { color: oklch(0.50 0.17 260); font-weight: 600; } /* 品牌·红（综合得分高亮）— 需改蓝 */
.mr-card__foot { display: flex; gap: 8px; margin-top: 14px; }

/* 推理服务卡片 */
.mr-svc-list { display: flex; flex-direction: column; gap: 12px; }
.mr-svc-card { background: var(--ink-0); border: 1px solid var(--ink-150); border-radius: 12px; padding: 16px; }
.mr-svc-card:hover { box-shadow: var(--shadow-sm); }
.mr-svc-card__head { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; }
.mr-svc-card__name { flex: 1; min-width: 0; font-size: 14.5px; font-weight: 600; color: var(--ink-900); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mr-svc-status { display: inline-flex; align-items: center; gap: 5px; font-size: 11px; font-weight: 600; font-family: ui-monospace, monospace; padding: 2px 10px; border-radius: 999px; flex: none; }
.mr-svc-status--running { background: oklch(0.95 0.06 145); color: oklch(0.40 0.13 145); } /* running·绿（成功）— 保留 */
.mr-svc-status--stopped { background: var(--ink-100); color: var(--ink-500); }              /* stopped·灰 — 保留 */
.mr-svc-status--stopped .status-badge__dot { background: var(--ink-400); }
.mr-svc-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; padding: 12px 0; border-top: 1px solid var(--ink-100); border-bottom: 1px solid var(--ink-100); }
.mr-svc-api { display: flex; align-items: center; gap: 10px; margin-top: 12px; }
.mr-svc-api__label { font-size: 11px; color: var(--ink-500); flex: none; }
.mr-svc-api__val { font-size: 12.5px; color: var(--ink-700); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* 导入弹窗 */
.mr-import-modal { width: min(640px, 94vw); max-height: 92vh; display: flex; flex-direction: column; }
.mr-import-body { overflow-y: auto; }
.mr-form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }

/* 评测维度多选 */
.mr-dim-group { display: flex; gap: 8px; flex-wrap: wrap; }
.mr-dim { display: inline-flex; align-items: center; gap: 7px; padding: 7px 13px; border: 1px solid var(--ink-200); border-radius: 8px; font-size: 12.5px; color: var(--ink-700); cursor: pointer; }
.mr-dim:hover { border-color: var(--ink-300); }
.mr-dim.is-active { border-color: oklch(0.55 0.18 260); background: oklch(0.97 0.03 260); color: var(--ink-900); } /* 品牌·红（维度选中）— 需改蓝 */
.mr-dim__box { width: 15px; height: 15px; border: 1.5px solid var(--ink-300); border-radius: 4px; display: inline-grid; place-items: center; color: #fff; flex: none; }
.mr-dim.is-active .mr-dim__box { background: oklch(0.55 0.18 260); border-color: oklch(0.55 0.18 260); } /* 品牌·红 — 需改蓝 */

/* 在线测试沙箱 */
.mr-sandbox-col { position: sticky; top: 16px; }
.mr-sandbox-close-wrap { display: flex; justify-content: flex-end; margin-bottom: 8px; }
.mr-sandbox-close { display: inline-flex; align-items: center; gap: 5px; background: none; border: none; color: var(--ink-500); font-size: 12px; cursor: pointer; padding: 4px 6px; border-radius: 6px; }
.mr-sandbox-close:hover { background: var(--ink-100); color: var(--ink-700); }
.mr-sandbox { background: var(--ink-0); border: 1px solid var(--ink-150); border-radius: 12px; overflow: hidden; display: flex; flex-direction: column; height: 540px; }
.mr-sandbox__head { padding: 13px 16px; border-bottom: 1px solid var(--ink-100); }
.mr-sandbox__title { display: flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600; color: var(--ink-900); }
.mr-sandbox__target { display: block; font-size: 11.5px; color: var(--ink-500); margin-top: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mr-sandbox__msgs { flex: 1; overflow-y: auto; padding: 14px 16px; display: flex; flex-direction: column; gap: 12px; }
.mr-sandbox__empty { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; color: var(--ink-400); font-size: 12.5px; text-align: center; }
.mr-msg { display: flex; }
.mr-msg--user { justify-content: flex-end; }
.mr-msg__bubble { max-width: 84%; padding: 9px 13px; border-radius: 12px; font-size: 13px; line-height: 1.6; }
.mr-msg--user .mr-msg__bubble { background: oklch(0.55 0.18 260); color: #fff; border-bottom-right-radius: 4px; } /* 品牌·红（用户气泡）— 需改蓝 */
.mr-msg--assistant .mr-msg__bubble { background: var(--ink-50); color: var(--ink-800); border-bottom-left-radius: 4px; }
.mr-msg__typing { display: inline-flex; gap: 4px; align-items: center; }
.mr-msg__typing span { width: 6px; height: 6px; border-radius: 50%; background: var(--ink-400); animation: mr-typing 1.2s infinite ease-in-out; }
.mr-msg__typing span:nth-child(2) { animation-delay: 0.2s; }
.mr-msg__typing span:nth-child(3) { animation-delay: 0.4s; }
@keyframes mr-typing { 0%, 60%, 100% { transform: translateY(0); opacity: 0.4; } 30% { transform: translateY(-4px); opacity: 1; } }
.mr-sandbox__input { display: flex; gap: 8px; padding: 12px; border-top: 1px solid var(--ink-100); align-items: flex-end; }
.mr-sandbox__input textarea { flex: 1; min-height: 38px; max-height: 90px; resize: none; border: 1px solid var(--ink-200); border-radius: 9px; padding: 9px 11px; font-size: 13px; color: var(--ink-900); font-family: inherit; }
.mr-sandbox__input textarea:focus { outline: none; border-color: oklch(0.55 0.18 260); } /* 品牌·红（输入框聚焦）— 需改蓝 */

/* ================= 模型评估（评测结果看板）· me-eval ================= */
.ev-info { display: flex; align-items: center; gap: 0; padding: 14px 20px; background: var(--ink-0); border: 1px solid var(--ink-150); border-radius: 12px; flex-wrap: wrap; }
.ev-info__item { display: flex; flex-direction: column; gap: 5px; padding: 0 24px; }
.ev-info__item:first-child { padding-left: 0; }
.ev-info__label { font-size: 12px; color: var(--ink-500); }
.ev-info__value { font-size: 14px; color: var(--ink-800); }
.ev-info__value--strong { font-size: 15px; font-weight: 600; color: var(--ink-900); }
.ev-info__divider { width: 1px; height: 34px; background: var(--ink-150); flex: none; }
.ev-bench-tag { display: inline-block; font-size: 12.5px; font-weight: 500; color: oklch(0.42 0.16 258); background: oklch(0.95 0.04 258); padding: 3px 11px; border-radius: 6px; } /* 装饰·蓝 — 可保留 */

.ev-grid { display: grid; grid-template-columns: 1.15fr 1fr; gap: 16px; align-items: start; }
.ev-card { padding: 0; overflow: hidden; }
.ev-card__head { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 14px 16px; border-bottom: 1px solid var(--ink-100); flex-wrap: wrap; }
.ev-card__title { font-size: 14.5px; font-weight: 600; color: var(--ink-900); }
.ev-legend { display: flex; gap: 14px; }
.ev-legend__item { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--ink-600); }
.ev-legend__dot { width: 10px; height: 10px; border-radius: 3px; }
.ev-legend__dot--tuned { background: oklch(0.55 0.16 258); } /* 蓝（新微调模型）— 已是目标主色，保留 */
.ev-legend__dot--base { background: oklch(0.70 0.04 60); }   /* 中性灰棕（基座模型）— 保留 */

/* 雷达图 */
.ev-radar-wrap { display: flex; justify-content: center; padding: 16px 12px 22px; }
.ev-radar { width: 100%; max-width: 380px; height: auto; }
.ev-radar__ring { fill: none; stroke: var(--ink-150); stroke-width: 1; }
.ev-radar__axis { stroke: var(--ink-150); stroke-width: 1; }
.ev-radar__poly { stroke-width: 2; }
.ev-radar__poly--tuned { fill: oklch(0.55 0.16 258 / 0.22); stroke: oklch(0.55 0.16 258); } /* 蓝（新微调模型多边形）— 保留/目标主色 */
.ev-radar__poly--base { fill: oklch(0.70 0.04 60 / 0.18); stroke: oklch(0.66 0.05 60); }   /* 灰棕（基座模型多边形）— 保留 */
.ev-radar__node--tuned { fill: oklch(0.55 0.16 258); }
.ev-radar__node--base { fill: oklch(0.66 0.05 60); }
.ev-radar__label { font-size: 11.5px; fill: var(--ink-600); font-weight: 500; }

/* 评测任务列表 */
.ev-table { width: 100%; border-collapse: collapse; }
.ev-table th { text-align: left; font-size: 11.5px; font-weight: 500; color: var(--ink-500); padding: 11px 12px; background: var(--ink-25); border-bottom: 1px solid var(--ink-100); }
.ev-table td { padding: 14px 12px; font-size: 13px; color: var(--ink-800); border-bottom: 1px solid var(--ink-100); }
.ev-table tbody tr:last-child td { border-bottom: none; }
.ev-task-model { font-weight: 500; color: var(--ink-900); }
.ev-muted { color: var(--ink-500); }
.ev-score { font-size: 17px; font-weight: 700; font-family: var(--font-num, ui-monospace); color: var(--ink-700); }
.ev-score.is-up { color: oklch(0.50 0.15 258); } /* 蓝（提升分数高亮）— 保留/目标主色 */
.ev-score-unit { font-size: 11px; color: var(--ink-400); margin-left: 2px; }
.ev-status { display: inline-flex; align-items: center; gap: 3px; font-size: 11.5px; font-weight: 500; padding: 3px 10px; border-radius: 999px; white-space: nowrap; }
.ev-status--baseline { background: var(--ink-100); color: var(--ink-600); }                  /* 基线·灰 — 保留 */
.ev-status--improved { background: oklch(0.95 0.06 145); color: oklch(0.40 0.13 145); }      /* 已提升·绿（语义成功）— 保留 */
.ev-delta { display: flex; align-items: baseline; gap: 7px; padding: 14px 16px; border-top: 1px solid var(--ink-100); background: oklch(0.97 0.03 258); } /* 蓝浅底 — 保留/目标主色 */
.ev-delta__label { font-size: 12.5px; color: var(--ink-600); }
.ev-delta__value { font-size: 22px; font-weight: 700; font-family: var(--font-num, ui-monospace); color: oklch(0.50 0.15 258); } /* 蓝 — 保留/目标主色 */
.ev-delta__unit { font-size: 12px; color: var(--ink-500); }

@media (max-width: 1100px) { .ev-grid { grid-template-columns: 1fr; } }

/* 宿主旧「在线表单」遗留类,mt-dataset-page 复用 —— 补等价定义 */
.lc-link { color: oklch(0.55 0.18 260); background: none; border: none; cursor: pointer; padding: 0; font: inherit; }
.lc-link:hover { text-decoration: underline; }
.lc-link.is-danger { color: oklch(0.55 0.18 25); }
.lc-muted { color: var(--ink-400); }
