/* v3-k-hardware/css/k-flash-app.css：烧录页应用外壳（k-flash-app.js，2026-10-19 决策）。html.k-flashapp 只在 #/flash（≥768）时存在。
   页头收成一条细栏；文档不滚动，各区域自己滚动；左侧页签 72px；右侧面板 280–480px（--k-side-w）；底部状态栏 28px。 */

/* ---------- 站点外壳收起 ---------- */
html.k-flashapp { --ds-header-h: 52px; height: 100%; overflow: hidden; }
html.k-flashapp body { height: 100%; overflow: hidden; display: flex; flex-direction: column; }
html.k-flashapp #k-header { flex: none; }
html.k-flashapp #main, html.k-flashapp .k-wbwrap { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }
html.k-flashapp #k-footer, html.k-flashapp .ds-preview-banner, html.k-flashapp .ds-header .ds-nav, html.k-flashapp .ds-header__search, html.k-flashapp .ds-header__mobile-search,
html.k-flashapp .ds-hbtn--login, html.k-flashapp .ds-hbtn--burger, html.k-flashapp .ds-brand__text { display: none !important; }
/* 页头在应用模式下用普通表面色（工业蓝主题的深色页头上放不下表单控件） */
html.k-flashapp .ds-header { position: relative; --ds-header-bg: var(--ds-surface); --ds-header-fg: var(--ds-text); --ds-header-fg-2: var(--ds-text-2); --ds-header-border: var(--ds-border);
  --ds-header-ctl: var(--ds-surface-2); --ds-header-focus: var(--ds-focus); -webkit-backdrop-filter: none; backdrop-filter: none; }
html.k-flashapp .ds-header > .ds-container { max-width: none; padding: 0 var(--ds-sp-4) 0 var(--ds-sp-5); }
html.k-flashapp .ds-header__inner { gap: var(--ds-sp-3); }
html.k-flashapp .ds-header__tools .ds-hide-m:not(.ds-hbtn--login) { display: inline-flex !important; }
html.k-flashapp[data-flash-busy] .ds-header { box-shadow: inset 0 -2px 0 var(--ds-warn); }

/* ---------- 细栏（在页头里） ---------- */
.k-tb--slim { position: sticky; top: 0; flex: 1 1 auto; min-width: 0; display: flex; align-items: center; gap: var(--ds-sp-4); background: none; border: 0; z-index: auto; }
.k-tb--slim[data-demo] { box-shadow: none; }
.k-tb--slim .k-tb__main { flex: 1 1 auto; min-width: 0; display: flex; align-items: center; gap: var(--ds-sp-3); padding-left: var(--ds-sp-3); border-left: 1px solid var(--ds-border); }
.k-tb--slim .k-tb__title { flex: 0 1 auto; max-width: 62%; min-width: min(14em, 40%); display: flex; align-items: center; flex-wrap: nowrap; gap: 6px; margin: 0; font-size: var(--ds-fs-md); }
.k-tb--slim .k-tb__title > .ds-icon { color: var(--ds-link); flex: none; }
.k-tb--slim .k-tb__fw { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; overflow-wrap: normal; }
.k-tb--slim .k-tb__ver { flex: none; }
.k-tb--slim .k-tb__target { flex: 0 1000 auto; min-width: 0; overflow: hidden; flex-wrap: nowrap; margin: 0; white-space: nowrap; }
.k-tb__tg { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.k-tb--slim .k-tb__target .ds-badge { flex: none; }
.k-tb--slim .k-tb__tools { flex: none; flex-wrap: nowrap; gap: var(--ds-sp-2); }
.k-tb--slim .k-tb__seg { min-height: 28px; }
.k-tb--slim .k-demo-badge { flex: none; margin: 0; }
.k-tb__fin:empty { display: none; }
.k-tb__side[aria-expanded="true"] { --_bg: var(--ds-primary-soft); --_bd: var(--ds-primary-border); --_fg: var(--ds-text); }
@media (max-width: 1279px) { .k-tb--slim .k-tb__seg .k-tb__segl { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; } .k-tb--slim .k-tb__target .ds-badge { display: none; } }

/* ---------- 外壳网格 ---------- */
.k-app { --k-side-w: 320px; flex: 1 1 auto; min-height: 0; display: grid; grid-template-columns: 72px minmax(0, 1fr); grid-template-rows: minmax(0, 1fr) 28px; grid-template-areas: "rail body" "sb sb"; background: var(--ds-bg); padding: 0; }
.k-app__body { grid-area: body; position: relative; min-height: 0; min-width: 0; display: grid; grid-template-columns: minmax(0, 1fr) 6px var(--k-side-w); }
.k-app[data-side="closed"] .k-app__body, .k-app[data-side-mode="drawer"] .k-app__body { grid-template-columns: minmax(0, 1fr); }
.k-app__centre { min-width: 0; min-height: 0; position: relative; }
.k-app__panel { position: absolute; inset: 0; overflow: auto; overscroll-behavior: contain; }
.k-app__panel[hidden] { display: none; }
.k-app__panel:focus-visible { outline: 0; box-shadow: inset 0 0 0 2px var(--ds-focus); }

/* ---------- 左侧页签 ---------- */
.k-ar { grid-area: rail; display: flex; flex-direction: column; justify-content: space-between; min-height: 0; padding: var(--ds-sp-2) 0; background: var(--ds-surface); border-right: 1px solid var(--ds-border); overflow: auto; }
.k-ar__tabs { display: flex; flex-direction: column; gap: 4px; padding: 0 6px; }
.k-ar__tab, .k-ar__btn { position: relative; display: grid; justify-items: center; gap: 3px; width: 100%; min-height: 56px; padding: 8px 2px 6px; border: 0; border-radius: var(--ds-r-sm); background: none;
  color: var(--ds-text-2); font: var(--ds-fw-medium) var(--ds-fs-xs)/1.2 var(--ds-font); text-align: center; cursor: pointer; text-decoration: none !important; }
.k-ar__tab:hover, .k-ar__btn:hover { background: var(--ds-surface-2); color: var(--ds-text); }
.k-ar__tab[aria-selected="true"] { background: var(--ds-primary-soft); color: var(--ds-text); font-weight: var(--ds-fw-semibold); }
.k-ar__tab[aria-selected="true"]::before { content: ""; position: absolute; left: -6px; top: 10px; bottom: 10px; width: 3px; border-radius: 0 3px 3px 0; background: var(--ds-primary); }
.k-ar__tab[aria-selected="true"] .ds-icon { color: var(--ds-link); }
[data-theme="high-contrast"] .k-ar__tab[aria-selected="true"] { background: var(--ds-primary); color: var(--ds-on-primary); }
[data-theme="high-contrast"] .k-ar__tab[aria-selected="true"] .ds-icon { color: var(--ds-on-primary); }
.k-ar__l { overflow-wrap: anywhere; }
.k-ar__dot { position: absolute; top: 7px; right: 14px; width: 9px; height: 9px; border-radius: 50%; background: var(--ds-primary); box-shadow: 0 0 0 2px var(--ds-surface); }
.k-ar__dot[data-kind="err"] { background: var(--ds-danger); }
.k-ar__foot { display: grid; gap: 4px; padding: var(--ds-sp-2) 6px 0; border-top: 1px solid var(--ds-divider); }
.k-ar__demo { flex-direction: column; gap: 4px; padding: 6px 0; font-size: var(--ds-fs-xs); color: var(--ds-text-2); justify-content: center; width: 100%; }
.k-ar__btn.k-flback__a { min-height: 52px; }

/* ---------- 分隔条 + 右侧面板 ---------- */
.k-app__sep { position: relative; display: grid; place-items: center; cursor: ew-resize; touch-action: none; background: var(--ds-bg); border-left: 1px solid var(--ds-border); }
.k-app__sep[hidden] { display: none; }
.k-app__grip { width: 3px; height: 40px; border-radius: 3px; background: var(--ds-text-3); } /* text-3 在 bg 上 ≥ 4.5:1，满足非文字 3:1 */
.k-app__sep:hover .k-app__grip, .k-app__sep[data-drag] .k-app__grip { background: var(--ds-primary); }
.k-app__sep:focus-visible { outline: 0; box-shadow: inset 0 0 0 2px var(--ds-focus); border-radius: 0; }
.k-side { min-width: 0; min-height: 0; display: flex; flex-direction: column; background: var(--ds-surface); border-left: 1px solid var(--ds-border); }
.k-side[hidden] { display: none; }
.k-side__head { flex: none; display: flex; align-items: center; gap: var(--ds-sp-2); padding: var(--ds-sp-2) var(--ds-sp-2) var(--ds-sp-2) var(--ds-sp-3); border-bottom: 1px solid var(--ds-border); }
.k-side__tabs { flex: 1; display: inline-flex; padding: 2px; gap: 2px; background: var(--ds-surface-2); border: 1px solid var(--ds-border); border-radius: var(--ds-r-sm); }
.k-side__tab { flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 30px; padding: 0 var(--ds-sp-2); border: 0; border-radius: calc(var(--ds-r-sm) - 2px);
  background: none; color: var(--ds-text-2); font: var(--ds-fw-medium) var(--ds-fs-sm)/1 var(--ds-font); cursor: pointer; white-space: nowrap; }
.k-side__tab:hover { color: var(--ds-text); }
.k-side__tab[aria-selected="true"] { background: var(--ds-surface); color: var(--ds-text); font-weight: var(--ds-fw-semibold); box-shadow: var(--ds-shadow-1), inset 0 0 0 1px var(--ds-border); }
[data-theme="high-contrast"] .k-side__tab[aria-selected="true"] { background: var(--ds-primary); color: var(--ds-on-primary); }
.k-side__panel { flex: 1 1 auto; min-height: 0; overflow: auto; overscroll-behavior: contain; padding: var(--ds-sp-3) var(--ds-sp-4) var(--ds-sp-5); }
.k-side__panel[hidden] { display: none; }
.k-side__panel:focus-visible { outline: 0; box-shadow: inset 0 0 0 2px var(--ds-focus); border-radius: 0; }
.k-side .k-exp { grid-template-columns: minmax(0, 1fr); gap: var(--ds-sp-4); }
/* 1024–1279 / 768–1023：右侧面板是浮层抽屉 */
.k-app[data-side-mode="drawer"] .k-side { position: absolute; top: 0; right: 0; bottom: 0; width: min(var(--k-side-w), 86vw); z-index: 20; box-shadow: var(--ds-shadow-3); }

/* ---------- 状态栏 ---------- */
.k-sb { grid-area: sb; display: flex; align-items: center; gap: var(--ds-sp-4); min-width: 0; padding: 0 var(--ds-sp-3); background: var(--ds-surface-2); border-top: 1px solid var(--ds-border);
  color: var(--ds-text-2); font-size: var(--ds-fs-xs); white-space: nowrap; overflow: hidden; }
.k-sb__i { display: inline-flex; align-items: center; gap: 5px; min-width: 0; }
.k-sb__i[hidden] { display: none; }
.k-sb__i:empty { display: none; }
.k-sb__i .ds-badge { padding-top: 0; padding-bottom: 0; }
.k-sb__real { display: inline-flex; align-items: center; gap: 4px; color: var(--ds-text); font-weight: var(--ds-fw-semibold); }
.k-sb__stage { overflow: hidden; text-overflow: ellipsis; color: var(--ds-text); }
.k-sb__sp { flex: 1; }
.k-sb__back { display: inline-flex; align-items: center; gap: 3px; color: var(--ds-link); }

/* ---------- 烧录页 ---------- */
/* 烧录页、串口页同一宽度上限（约 120 个等宽字符 + 内边距），在中间区域居中：右侧面板收起时不留大片空白、两页宽度一致。ch 按等宽字体算，子元素恢复正文字体 */
.k-fpage, .k-serpage { --k-page-max: calc(120ch + 40px + 2 * var(--ds-sp-5)); width: 100%; max-width: var(--k-page-max); margin-inline: auto; font-family: var(--ds-mono); font-size: var(--ds-fs-sm); }
.k-fpage > *, .k-serpage > * { font-family: var(--ds-font); font-size: var(--ds-fs-md); }
.k-fpage { min-height: 100%; display: flex; flex-direction: column; gap: var(--ds-sp-3); padding: var(--ds-sp-4) var(--ds-sp-5) var(--ds-sp-4); }
.k-fpage__top { flex: none; display: grid; gap: var(--ds-sp-3); min-width: 0; }
.k-fpage__log { flex: 1 1 auto; min-height: 180px; display: flex; flex-direction: column; border: 1px solid var(--ds-border); border-radius: var(--ds-r-md); background: var(--ds-surface); padding: var(--ds-sp-2) var(--ds-sp-3) var(--ds-sp-3); }
.k-fpage__log .k-log { flex: 1; min-height: 0; height: auto; }
.k-log__h { display: inline-flex; align-items: center; gap: 6px; margin: 0 var(--ds-sp-2) 0 0; font-size: var(--ds-fs-sm); }

/* ---------- 串口页 ---------- */
.k-serpage { height: 100%; display: flex; flex-direction: column; gap: var(--ds-sp-3); padding: var(--ds-sp-4) var(--ds-sp-5); }
#k-serbox:empty { display: none; }
#k-serbox { flex: none; background: var(--ds-surface); color: var(--ds-text); padding: var(--ds-sp-2) var(--ds-sp-3); border-bottom: 1px solid var(--ds-border); } /* 在终端里（工具条下）：用页面表面色，不用终端深色 */
.k-serpage > .k-ser { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; height: auto; }
.k-ser__term { flex: 1 1 auto; min-height: 0; width: 100%; font-family: var(--ds-mono); font-size: var(--ds-fs-sm); }
.k-ser__term > :not(.k-ser__out) { font-family: var(--ds-font); }
.k-ser__term .ds-term__bar { flex: none; }
.k-ser__bar--2 { background: var(--ds-surface); }
.k-ser__fld { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; flex: none; }
.k-ser__preset { white-space: nowrap; }
.k-ser__chk { white-space: nowrap; }
.k-ser__port { color: var(--ds-text); font-weight: var(--ds-fw-medium); }
.k-ser__empty { padding: var(--ds-sp-2) 0; }
.k-ser__send .k-ser__q { font-family: var(--ds-mono); }
/* 诊断只在一处：右侧「现象与诊断」停靠展开时，终端上方的诊断条收起（内容相同） */
.k-app[data-side="open"][data-side-mode="dock"][data-stab="exp"] .k-ser__diag { display: none; }
.k-ser__findw { display: inline-flex; align-items: center; gap: 6px; color: var(--ds-text-2); }
.k-ser__find { width: 180px; }
.k-ser__out { flex: 1 1 auto; height: auto; min-height: 0; }
.k-ser__out[data-wrap="0"] { white-space: pre; word-break: normal; overflow-x: auto; }
.k-ser__send { flex: none; align-items: center; flex-wrap: wrap; }
.k-ser__send .ds-input { flex: 1 1 260px; min-width: 160px; }
.k-ser__prompt { color: var(--ds-text-2); font-weight: var(--ds-fw-bold); }
.k-ser__quick { display: inline-flex; align-items: center; gap: 2px; }
.k-ser__q { font-size: var(--ds-fs-xs); }
.k-ser__diag { flex: none; display: grid; gap: 4px; margin: 0; padding: 6px var(--ds-sp-3); background: var(--ds-surface); border-bottom: 1px solid var(--ds-border); list-style: none; }
.k-ser__diag .k-diag__i { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 8px; padding: 4px 8px; font-size: var(--ds-fs-sm); color: var(--ds-text); }
.k-ser__diag .k-diag__i > .ds-icon { color: var(--ds-warn); }
.k-ser__diag .k-diag__i[data-level="error"] > .ds-icon { color: var(--ds-danger); }
.k-ser__dfix { flex: 1 1 200px; min-width: 0; }
.k-wb__serp { margin: 0; }
.k-wb__serp p { margin: 0 0 var(--ds-sp-2); }

/* ---------- 记录页 ---------- */
.k-hi { max-width: 1040px; padding: var(--ds-sp-4) var(--ds-sp-5) var(--ds-sp-6); display: grid; gap: var(--ds-sp-3); }
.k-hi__head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--ds-sp-2) var(--ds-sp-3); }
.k-hi__head .ds-spacer { flex: 1; } /* 导出 CSV / 全部清空 靠右、按中英文较长标签定宽：换语言、条数变化不移动 */
.k-hi__head .k-h2 { margin: 0; display: flex; align-items: center; gap: 6px; font-size: var(--ds-fs-lg); }
.k-hi__note { display: inline-flex; align-items: center; gap: 6px; justify-self: start; margin: 0; padding: 4px 10px; border-radius: var(--ds-r-pill); border: 1px solid var(--ds-success-border); background: var(--ds-success-soft); color: var(--ds-text); font-size: var(--ds-fs-sm); }
.k-hi__note .ds-icon { color: var(--ds-success); }
.k-hi__list { gap: var(--ds-sp-2); }
.k-hi__i { display: grid; gap: var(--ds-sp-2); padding: var(--ds-sp-3) var(--ds-sp-4); border: 1px solid var(--ds-border); border-left: 3px solid var(--ds-success); border-radius: var(--ds-r-md); background: var(--ds-surface); }
.k-hi__i[data-ok="0"] { border-left-color: var(--ds-danger); }
.k-hi__top { display: flex; flex-wrap: wrap; align-items: center; gap: 6px var(--ds-sp-3); }
.k-hi__res { display: inline-flex; align-items: center; gap: 6px; }
.k-hi__code { display: inline-flex; align-items: center; gap: 4px; color: var(--ds-danger); }
.k-hi__code code { font-size: var(--ds-fs-xs); }
.k-hi__sha .ds-hash__algo { display: none; } /* 列名已写 SHA-256 */
.k-hi__title { min-width: 0; overflow-wrap: anywhere; }
.k-hi__time { margin-left: auto; color: var(--ds-text-2); }
.k-hi__kv { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1.3fr) 76px 76px minmax(0, 1.6fr); gap: 4px var(--ds-sp-5); margin: 0; font-size: var(--ds-fs-sm); }
.k-hi__kv dt { color: var(--ds-text-2); font-size: var(--ds-fs-xs); }
.k-hi__kv dd { margin: 0; min-width: 0; }
.k-hi__sha dd .ds-hash { max-width: 280px; }
.k-hi__acts { display: flex; flex-wrap: wrap; align-items: center; gap: var(--ds-sp-2); }
.k-hi__repick { margin: 0; }
.k-hi__empty { display: flex; align-items: center; gap: 8px; padding: var(--ds-sp-6) var(--ds-sp-4); border: 1px dashed var(--ds-border-strong); border-radius: var(--ds-r-md); }

/* ---------- 768–1023：页签移到顶部横排 ---------- */
@media (max-width: 1023px) {
  .k-app { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto minmax(0, 1fr) 28px; grid-template-areas: "rail" "body" "sb"; }
  .k-ar { flex-direction: row; align-items: center; padding: 0 var(--ds-sp-3); border-right: 0; border-bottom: 1px solid var(--ds-border); overflow: visible; }
  .k-ar__tabs { flex-direction: row; padding: 0; }
  .k-ar__tab { display: inline-flex; width: auto; min-height: 42px; padding: 0 var(--ds-sp-4); gap: 6px; font-size: var(--ds-fs-sm); border-radius: 0; }
  .k-ar__tab[aria-selected="true"] { background: none; }
  .k-ar__tab[aria-selected="true"]::before { left: var(--ds-sp-2); right: var(--ds-sp-2); top: auto; bottom: -1px; width: auto; height: 2px; border-radius: 2px 2px 0 0; }
  .k-ar__dot { top: 8px; right: 4px; }
  .k-ar__foot { display: flex; align-items: center; gap: var(--ds-sp-3); padding: 0; border-top: 0; }
  .k-ar__demo { flex-direction: row; width: auto; padding: 0; font-size: var(--ds-fs-sm); }
  .k-ar__btn { display: inline-flex; width: auto; min-height: 36px !important; padding: 0 var(--ds-sp-2); gap: 4px; font-size: var(--ds-fs-sm); }
  .k-fpage, .k-serpage, .k-hi { padding-left: var(--ds-sp-4); padding-right: var(--ds-sp-4); }
  .k-hi__kv { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .k-tb--slim .k-tb__target { display: none; }
}
@media (max-width: 767px) {
  .k-tb--slim .k-tb__segl, .k-tb--slim .k-demo-badge, .k-tb--slim .k-tb__mode { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  .k-tb--slim .k-tb__title { max-width: none; min-width: 0; font-size: var(--ds-fs-sm); }
  .k-tb--slim .k-tb__ver, .k-tb--slim .k-tb__fin .ds-btn > :not(.ds-icon) { display: none; }
  html.k-flashapp .ds-header > .ds-container { padding: 0 var(--ds-sp-2); }
  .k-ar { padding: 0 var(--ds-sp-2); gap: var(--ds-sp-2); overflow-x: auto; }
  .k-ar__tab { padding: 0 var(--ds-sp-2); }
  .k-ar__btn span:not(.ds-sr) { display: none; }
  .k-fpage, .k-serpage, .k-hi { padding-left: var(--ds-sp-2); padding-right: var(--ds-sp-2); }
  .k-sb__pv, .k-sb__baud { display: none; }
  .k-hi__kv { grid-template-columns: minmax(0, 1fr); }
  .k-rail .k-rail__s { display: none; }
}
@media (prefers-reduced-motion: reduce) { .k-ar__tab, .k-side__tab { transition: none; } }

/* ---------- 位置稳定 + 信息层级（2026-10-20，规范「位置稳定 + 信息层级」）---------- */
/* 固定宽度标签（k-flash-ui.js fix）：看不见的 ::before 叠放全部候选文字（中英文 × 各状态），宽度取最长；按最粗字重量，选中加粗也不变宽 */
.k-fw { display: inline-grid; justify-items: start; min-width: 0; text-align: start; } /* 文字贴着图标，多出的预留宽度在右边 */
.k-fw::before { content: attr(data-g); grid-area: 1 / 1; height: 0; visibility: hidden; white-space: pre; font-weight: var(--ds-fw-bold); pointer-events: none; }
.k-fw__t { grid-area: 1 / 1; white-space: nowrap; }
/* 细栏：中间文字区可伸缩截断，右侧按钮靠右、宽度固定；语言按钮固定宽度（EN / 中） */
.k-tb--slim .k-tb__tools { margin-left: auto; }
.k-tb--slim .k-tb__tools > .ds-btn { flex: none; }
html.k-flashapp .ds-header__tools .ds-hbtn[lang] { width: 64px; }
html.k-flashapp .ds-header__tools .ds-hbtn { flex: none; }
@media (max-width: 1279px) { .k-tb--slim .k-tb__tools .k-fw { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; } }
/* 烧录页顶行：「固件来源 站内 | 本地」+ 右侧预留位（K.slot('flash.top')，V2.5 放「模式 单台 | 批量」）。一行 40px，所有状态相同 */
.k-fsrc { flex: none; display: flex; align-items: center; gap: var(--ds-sp-3); height: 40px; min-width: 0; }
.k-fsrc__l { flex: none; color: var(--ds-text-2); font-size: var(--ds-fs-sm); font-weight: var(--ds-fw-semibold); }
.k-fsrc__grp { flex: none; display: inline-flex; padding: 2px; gap: 2px; background: var(--ds-surface-2); border: 1px solid var(--ds-border); border-radius: var(--ds-r-sm); }
.k-fsrc__opt { display: inline-flex; align-items: center; justify-content: center; gap: 6px; height: 30px; padding: 0 var(--ds-sp-3); border: 0; border-radius: calc(var(--ds-r-sm) - 2px); background: none;
  color: var(--ds-text-2); font: var(--ds-fw-medium) var(--ds-fs-sm)/1 var(--ds-font); cursor: pointer; }
.k-fsrc__opt:hover { color: var(--ds-text); }
.k-fsrc__opt[aria-checked="true"] { background: var(--ds-surface); color: var(--ds-text); font-weight: var(--ds-fw-semibold); box-shadow: var(--ds-shadow-1), inset 0 0 0 1px var(--ds-border); }
.k-fsrc__opt:focus-visible { outline: 0; box-shadow: var(--ds-focus-ring); }
[data-theme="high-contrast"] .k-fsrc__opt[aria-checked="true"] { background: var(--ds-primary); color: var(--ds-on-primary); }
.k-fsrc__slot { flex: none; margin-left: auto; display: flex; align-items: center; justify-content: flex-end; gap: var(--ds-sp-2); min-width: 240px; height: 40px; }
/* 空状态：内容固定宽度、在页内居中，右侧面板开合不改变宽度 */
.k-wb__empty { width: 100%; max-width: 780px; margin: 0; }
/* 状态栏：前几项固定宽度，内容变化不推后面的项；波特率不用时占位隐藏 */
.k-sb__mode { flex: none; width: 76px; }
#k-st-conn { flex: none; width: 280px; overflow: hidden; }
#k-st-conn > span { overflow: hidden; text-overflow: ellipsis; }
#k-st-baud { flex: none; width: 96px; }
#k-st-baud:empty { display: inline-flex; }
.k-sb__stage { flex: 0 1 auto; }
.k-sb__pv { flex: none; }
.k-sb__back { flex: none; width: 240px; justify-content: flex-end; overflow: hidden; }
.k-sb__back > span { overflow: hidden; text-overflow: ellipsis; }
/* 串口工具条：打开 / 关闭按钮同宽（k-fw），端口名固定宽度省略 */
.k-ser__port { display: inline-block; width: 168px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: middle; }
/* 右侧面板停靠时，烧录页 / 串口页按「面板展开时的中间区域」定宽、定位（左对齐到同一位置）：开合面板时页面内控件不动、不重排，收起后右边留空 */
.k-app[data-side-mode="dock"] { --k-open-w: calc(100vw - 72px - 6px - var(--k-side-w)); }
.k-app[data-side-mode="dock"] .k-fpage, .k-app[data-side-mode="dock"] .k-serpage { max-width: min(var(--k-page-max), var(--k-open-w)); margin-left: max(0px, calc((var(--k-open-w) - var(--k-page-max)) / 2)); margin-right: auto; }
#k-ser-n { flex: none; width: 96px; text-align: right; }
.k-ser__findn { flex: none; width: 120px; }
.k-sb__mode { height: 20px; }
.k-sb__mode .ds-badge { line-height: 16px; padding-top: 0; padding-bottom: 0; }
#k-ser-baud { width: 104px; } #k-ser-eol { width: 96px; } /* 选项文字随语言变（无 / None）：下拉框固定宽度 */
.k-side__panel { scrollbar-gutter: stable; } /* 内容变长出现滚动条时宽度不变 */
.k-wb__go .k-fw, .k-fsrc__opt .k-fw { justify-items: center; text-align: center; }
/* 烧录日志固定在烧录页底部（2026-10-20 复核）：高度固定、顶边位置只随窗口高度变；上半部（阶段条 / 主按钮 / 提示 / 本地文件）内容变多时在自己的区域里滚动，不再把日志工具条往下推 */
.k-fpage:has(> .k-fpage__log) { --k-log-h: clamp(180px, 26vh, 320px); height: 100%; min-height: 0; }
.k-fpage:has(> .k-fpage__log) > .k-fpage__top { flex: 1 1 auto; min-height: 0; overflow: auto; overscroll-behavior: contain; align-content: start; padding: 4px; margin: -4px; scrollbar-width: thin; }
/* 单台烧录：卡片固定，只有卡片下面的 .k-wb__var（探针扩展 / 提示 / 错误 / 完成 / 本地文件）滚动 */
.k-fpage:has(> .k-fpage__log) > .k-fpage__top:has(> .k-wb__var) { display: flex; flex-direction: column; overflow: hidden; }
.k-fpage__top > .k-wb__stage { flex: none; }
.k-wb__var { display: grid; gap: var(--ds-sp-3); align-content: start; min-width: 0; }
.k-wb__var:not(:has(> :not(:empty):not([hidden]):not(.k-wb__msgs))):has(> .k-wb__msgs:not(:has(> :not(:empty)))) { display: none; }
.k-fpage:has(> .k-fpage__log) .k-wb__var { flex: 0 1 auto; min-height: 0; overflow: auto; overscroll-behavior: contain; padding: 4px; margin: -4px; scrollbar-width: thin; }
.k-fpage > .k-fpage__log { flex: none; height: var(--k-log-h); min-height: 0; }
.k-log__n2 { flex: none; }
.k-fpage:has(> .k-fpage__log) .k-wb__var:focus-visible { outline: 0; box-shadow: inset 0 0 0 2px var(--ds-focus); }
@media (max-height: 599px) { .k-fpage:has(> .k-fpage__log) { height: auto; min-height: 100%; } .k-fpage:has(> .k-fpage__log) > .k-fpage__top, .k-fpage:has(> .k-fpage__log) .k-wb__var { flex: none; overflow: visible; display: grid; } }
/* 「固件来源」选中项：主色细边 + 底部 2px 主色条（非文字对比 ≥ 3:1，WCAG 1.4.11），不只靠字色 / 字重区分 */
.k-fsrc__grp { border-color: var(--ds-border-strong); }
.k-fsrc__opt { position: relative; }
.k-fsrc__opt[aria-checked="true"] { box-shadow: var(--ds-shadow-1), inset 0 0 0 1px var(--ds-primary); }
.k-fsrc__opt[aria-checked="true"]::after { content: ""; position: absolute; left: 8px; right: 8px; bottom: 2px; height: 2px; border-radius: 1px; background: var(--ds-primary); pointer-events: none; }
.k-fsrc__opt[aria-checked="true"]:focus-visible { box-shadow: var(--ds-focus-ring); }
[data-theme="high-contrast"] .k-fsrc__opt[aria-checked="true"]::after { background: var(--ds-on-primary); }
/* 选固件空状态：「N 个」计数固定宽度，换语言时搜索框不变宽 */
.k-pk__n { flex: none; width: 7em; text-align: right; white-space: nowrap; }
/* 设备面板镜像文件：角色 / 图例不折行（英文更长时不推动下面的校验值复制按钮）；表格不超出面板宽 */
.k-dev__files table { table-layout: fixed; width: 100%; }
.k-dev__frow td { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.k-map__leg li > * { min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.k-map__note, #k-dev-wire > p.k-small { min-height: 2lh; }
/* 右栏「现象」预期结果单选：竖排一项一行，英文更长时不折行、各项 x 不随语言变化 */
.k-side .k-fb__opts { flex-direction: column; flex-wrap: nowrap; gap: var(--ds-sp-2); }
