/* 骨架版式：左侧模块导航栏 / 主内容区 / tab 面板 / 卡片 */
.skip-link{position:fixed; top:8px; left:8px; z-index:100; padding:8px 12px; border-radius:var(--r-md);
  background:var(--txt); color:var(--surface); text-decoration:none; transform:translateY(-150%)}
.skip-link:focus{transform:translateY(0)}
/* 左侧模块导航栏 */
aside.side{flex:0 0 224px; position:sticky; top:0; height:100vh; box-sizing:border-box;
  display:flex; flex-direction:column; gap:var(--s-5); padding:var(--s-5) var(--s-3);
  background:linear-gradient(180deg,var(--surface) 0%,#f8faf9 100%);
  border-right:1px solid var(--line); box-shadow:var(--sh-1); z-index:5}
.side .brand{padding:0 var(--s-2)}
.side .brand h1{margin:0; font-size:var(--t-lg); letter-spacing:.2px; line-height:1.3}
.side .brand p{margin:var(--s-1) 0 0; color:var(--mut); font-size:var(--t-xs)}
nav.tabs{display:flex; flex-direction:column; gap:4px}
nav.tabs button{appearance:none; border:0; background:none; cursor:pointer; font-family:inherit;
  font-size:var(--t-md); font-weight:600; color:var(--mut); padding:10px var(--s-3);
  text-align:left; border-radius:var(--r-md); border-left:3px solid transparent;
  transition:color var(--dur), background var(--dur), border-color var(--dur)}
nav.tabs button:hover{color:var(--txt-2); background:var(--bg)}
nav.tabs button.active{color:var(--accent-text); background:var(--accent-bg); border-left-color:var(--accent);
  box-shadow:inset 0 0 0 1px rgba(15,118,110,.06)}
nav.tabs button .tag{font-size:var(--t-xs); font-weight:500; color:var(--faint); margin-left:5px}
.nav-no{display:inline-block; width:27px; color:var(--faint); font:500 var(--t-xs)/1 var(--mono)}
nav.tabs button.active .nav-no{color:var(--accent-text)}
@media (max-width:900px){
  body{flex-direction:column}
  aside.side{flex:none; position:static; height:auto; flex-direction:row; align-items:center;
    justify-content:space-between; border-right:0; border-bottom:1px solid var(--line); padding:var(--s-3) var(--s-4)}
  nav.tabs{flex:1 1 auto; min-width:0; flex-direction:row; gap:2px; overflow-x:auto}
  nav.tabs button{border-left:0; border-bottom:2.5px solid transparent; border-radius:0; padding:8px 10px; white-space:nowrap}
  nav.tabs button.active{border-bottom-color:var(--accent); background:none}
  .nav-no{display:none}
}

main{flex:1; width:min(100%,1560px); min-width:0; margin:0 auto; padding:var(--s-5);
  display:flex; flex-direction:column; gap:var(--s-5)}
.tabpanel{display:flex; flex-direction:column; gap:var(--s-5)}

.card{background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg);
  box-shadow:var(--sh-1); padding:var(--s-5)}
.card > h2{margin:0 0 var(--s-3); font-size:var(--t-lg); display:flex; align-items:center; gap:var(--s-2)}
.card > h2 small{font-weight:400; color:var(--mut); font-size:var(--t-sm)}
.demo-chip{font-size:var(--t-xs); font-weight:600; color:var(--warn-text); background:var(--warn-bg);
  padding:2px 8px; border-radius:var(--r-pill); border:1px solid transparent}

.topbar{position:sticky; top:0; z-index:4; min-height:58px; display:flex; align-items:center;
  gap:var(--s-3); padding:8px 0; background:color-mix(in srgb,var(--bg) 94%,transparent);
  border-bottom:1px solid var(--line); backdrop-filter:blur(10px)}
.global-search{position:relative; flex:1 1 420px}
.global-search span,.operator-field span{display:block; position:absolute; width:1px; height:1px;
  overflow:hidden; clip:rect(0,0,0,0)}
.global-search input,.operator-field input{width:100%; height:38px; border:1px solid var(--line);
  border-radius:var(--r-md); background:var(--surface); color:var(--txt); font:inherit; padding:0 12px}
.global-search input:focus,.operator-field input:focus{outline:2px solid var(--accent-line); border-color:var(--accent)}
.operator-field{flex:0 0 150px}
.icon-command{appearance:none; border:1px solid var(--line); border-radius:var(--r-md);
  background:var(--surface); color:var(--txt-2); min-width:38px; height:38px; cursor:pointer;
  display:inline-flex; align-items:center; justify-content:center; gap:4px; font:700 var(--t-base)/1 var(--font);
  transition:color var(--dur),background var(--dur),border-color var(--dur),box-shadow var(--dur)}
.icon-command:hover{border-color:var(--accent-line); color:var(--accent-text); background:var(--accent-bg)}
.task-count{min-width:18px; height:18px; padding:0 4px; border-radius:var(--r-pill);
  background:var(--bad); color:#fff; font:700 10px/18px var(--mono)}

.workspace-head{display:flex; align-items:flex-end; justify-content:space-between; gap:var(--s-4);
  padding-bottom:var(--s-3); border-bottom:1px solid var(--line)}
.workspace-head h2{margin:0; font-size:var(--t-xl); letter-spacing:0}
.workspace-head p{margin:2px 0 0; color:var(--mut); font-size:var(--t-sm)}
.dashboard-filters,.catalog-toolbar,.quick-search{display:flex; align-items:center; gap:var(--s-2); flex-wrap:wrap}
.filter-separator{color:var(--mut); font-size:var(--t-xs); font-weight:600}
.dashboard-filters input,.catalog-toolbar input,.catalog-toolbar select,.quick-search input{
  height:34px; border:1px solid var(--line); border-radius:var(--r-md); background:var(--surface);
  color:var(--txt); padding:0 9px; font:inherit; font-size:var(--t-sm)}
.cmd{appearance:none; min-height:34px; border:1px solid var(--line); border-radius:var(--r-md);
  padding:0 13px; background:var(--surface); color:var(--txt-2); font:600 var(--t-sm)/1 var(--font);
  cursor:pointer; white-space:nowrap; display:inline-flex; align-items:center; justify-content:center;
  text-decoration:none; transition:color var(--dur),background var(--dur),border-color var(--dur),
  box-shadow var(--dur),transform var(--dur)}
.cmd:hover{border-color:var(--accent-line); color:var(--accent-text); background:var(--accent-bg)}
.cmd:active:not(:disabled){transform:translateY(1px)}
.cmd.primary{background:var(--accent); color:#fff; border-color:var(--accent);
  box-shadow:0 4px 12px rgba(15,118,110,.18)}
.cmd.primary:hover{background:var(--accent-2); color:#fff; box-shadow:0 6px 16px rgba(15,118,110,.24)}
.cmd:disabled{opacity:.5; cursor:not-allowed}

.metric-strip{display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); background:var(--surface);
  border:1px solid var(--line); border-radius:var(--r-lg); box-shadow:var(--sh-1); overflow:hidden}
.metric-cell{padding:14px 18px; border-right:1px solid var(--line); min-width:0}
.metric-cell:last-child{border-right:0}
.metric-cell span{display:block; color:var(--mut); font-size:var(--t-xs)}
.metric-cell strong{display:block; margin-top:2px; font:700 24px/1.2 var(--mono); color:var(--txt)}
.efficiency-grid{display:grid; grid-template-columns:1fr 1fr; gap:var(--s-5)}
.benchmark-band{grid-column:1/-1}
.benchmark-band .band-head{margin-bottom:var(--s-2)}
.benchmark-metrics{max-width:760px}
.benchmark-recent{margin-top:var(--s-2); border-top:1px solid var(--line)}
.efficiency-band{min-width:0; padding:var(--s-4); border:1px solid var(--line);
  border-radius:var(--r-lg); background:var(--surface); box-shadow:var(--sh-1)}
.efficiency-metrics{display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); margin:0}
.efficiency-metrics > div{padding:8px 10px; border-left:1px solid var(--line)}
.efficiency-metrics > div:first-child{border-left:0}
.efficiency-metrics dt{color:var(--mut); font-size:var(--t-xs)}
.efficiency-metrics dd{margin:2px 0 0; font:700 var(--t-md)/1.3 var(--mono)}
.efficiency-metrics dd small{display:block; color:var(--mut); font:500 var(--t-xs)/1.4 var(--font)}
.dashboard-band{padding:var(--s-4); min-width:0; border:1px solid var(--line);
  border-radius:var(--r-lg); background:var(--surface); box-shadow:var(--sh-1)}
.band-head{display:flex; align-items:flex-end; justify-content:space-between; gap:var(--s-3); margin-bottom:var(--s-3)}
.band-head h3{margin:0; font-size:var(--t-md)}
.band-head p{margin:1px 0 0; color:var(--mut); font-size:var(--t-xs)}
.dashboard-columns{display:grid; grid-template-columns:minmax(0,1.2fr) minmax(300px,.8fr);
  gap:var(--s-5)}
/* align-items:start —— 否则「最近 10 批趋势」会被右侧 10 行的「最近不合格批次」拉成等高，
   卡片底部留出近 500px 纯白空洞，正好在看板中央。 */
.dashboard-qc-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(320px,.65fr);
  gap:var(--s-5); align-items:start}
.qc-decision-rules{background:linear-gradient(135deg,var(--surface),var(--surface-2))}
.risk-rule-list{display:grid;gap:8px;color:var(--txt-2);font-size:var(--t-xs)}
.risk-rule-list>span{display:grid;grid-template-columns:12px 20px 1fr;align-items:center;gap:6px}
.risk-dot{width:10px;height:10px;border-radius:50%;background:var(--faint)}
.risk-dot.high-risk{background:var(--bad)}.risk-dot.watch{background:var(--warn)}
.risk-dot.stable{background:var(--ok)}.risk-dot.insufficient{background:var(--faint)}
.dashboard-ai-secondary{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface)}
.dashboard-ai-secondary>summary{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;
  color:var(--mut);font-weight:650;cursor:pointer;list-style:none}
.dashboard-ai-secondary>summary::-webkit-details-marker{display:none}
.dashboard-ai-secondary>summary::after{content:"展开";font-size:var(--t-xs);font-weight:500}
.dashboard-ai-secondary[open]>summary::after{content:"收起"}
.dashboard-ai-secondary-body{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-4);
  padding:0 var(--s-4) var(--s-4)}
.dashboard-ai-secondary .benchmark-band{grid-column:auto}
.qc-trend-list{display:grid;gap:12px}
.qc-trend-row{display:grid;grid-template-columns:minmax(110px,.7fr) minmax(180px,1.3fr) auto;
  align-items:center;gap:12px}
.qc-trend-row>strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qc-trend-dots{display:flex;align-items:center;gap:5px}
.qc-trend-dot{width:18px;height:18px;border-radius:5px;background:var(--surface-3);
  border:1px solid var(--line);font-size:0}
.qc-trend-dot.pass{background:var(--ok-bg);border-color:var(--ok)}
.qc-trend-dot.fail{background:var(--bad-bg);border-color:var(--bad)}
.supplier-product-matrix td:not(:first-child){text-align:center}
.matrix-cell{display:inline-flex;align-items:center;justify-content:center;min-width:70px;padding:4px 8px;
  border-radius:var(--r-pill);font:700 var(--t-xs)/1 var(--mono)}
.matrix-cell.high-risk{background:var(--bad-bg);color:var(--bad-text)}
.matrix-cell.watch{background:var(--warn-bg);color:var(--warn-text)}
.matrix-cell.stable{background:var(--ok-bg);color:var(--ok-text)}
.matrix-cell.insufficient{background:var(--surface-3);color:var(--mut)}
.quick-search input{flex:1 1 220px}
.compact-list{display:flex; flex-direction:column; margin-top:var(--s-3)}
.compact-row{display:grid; grid-template-columns:minmax(0,1fr) auto; gap:var(--s-3);
  align-items:center; padding:9px 0; border-bottom:1px solid var(--line-soft)}
.compact-row:last-child{border-bottom:0}
.compact-button{appearance:none; width:100%; border:0; background:transparent; color:inherit;
  text-align:left; cursor:pointer; font:inherit}
.compact-button:hover{background:var(--accent-bg)}
.compact-button:focus-visible{background:var(--accent-bg)}
.compact-main{min-width:0}
.compact-main b{display:block; font-size:var(--t-sm); white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.compact-main small{display:block; color:var(--mut); font-size:var(--t-xs)}
.tier{display:inline-flex; padding:2px 8px; border-radius:var(--r-pill); font-size:var(--t-xs); font-weight:700}
.tier.high-risk{color:var(--bad-text); background:var(--bad-bg)}
.tier.watch{color:var(--warn-text); background:var(--warn-bg)}
.tier.stable{color:var(--ok-text); background:var(--ok-bg)}
.tier.insufficient{color:var(--mut);background:var(--surface-3)}
.legacy-analysis{border-top:1px solid var(--line); padding-top:var(--s-3)}
.legacy-analysis > summary{cursor:pointer; color:var(--mut); font-size:var(--t-sm); font-weight:600}
.legacy-analysis-body{display:flex; flex-direction:column; gap:var(--s-5); margin-top:var(--s-4)}

.segmented{display:inline-flex; border:1px solid var(--line); border-radius:var(--r-md); overflow:hidden; background:var(--surface)}
.segmented button{appearance:none; border:0; border-right:1px solid var(--line); background:transparent;
  color:var(--mut); min-height:34px; padding:0 14px; cursor:pointer; font:600 var(--t-sm)/1 var(--font)}
.segmented button:last-child{border-right:0}
.segmented button.active{background:var(--accent); color:#fff}
.ai-task-context{display:grid; grid-template-columns:minmax(190px,1fr) minmax(160px,.8fr)
  120px auto auto; gap:var(--s-2); align-items:end; padding-bottom:var(--s-3); border-bottom:1px solid var(--line)}
.ai-task-context label{display:flex; flex-direction:column; gap:3px; color:var(--mut); font-size:var(--t-xs); font-weight:600}
.ai-task-context > *{min-width:0}
.ai-task-context select{height:34px; border:1px solid var(--line); border-radius:var(--r-md);
  width:100%; min-width:0; background:var(--surface); color:var(--txt); padding:0 8px;
  font:inherit; font-size:var(--t-sm)}
.ai-task-context > .tier{align-self:center}
#ai-drawing-workflow,#ai-3d-workflow{flex-direction:column; gap:var(--s-5)}
#ai-drawing-workflow{display:flex}
#ai-3d-workflow:not([hidden]){display:flex}

.catalog-master{min-height:520px; padding:var(--s-4); border:1px solid var(--line);
  border-radius:var(--r-lg); background:var(--surface); box-shadow:var(--sh-1)}
.catalog-mode{margin-bottom:var(--s-3)}
.catalog-toolbar{margin-bottom:var(--s-3)}
.catalog-toolbar input{flex:1 1 320px}
.catalog-layout{display:grid; grid-template-columns:minmax(480px,1.15fr) minmax(360px,.85fr);
  border-block:1px solid var(--line); min-height:480px}
.catalog-list{padding-right:var(--s-4); overflow:auto}
.catalog-list tbody tr{cursor:pointer}
.catalog-list tbody tr:hover,.catalog-list tbody tr.active{background:var(--accent-bg)}
.catalog-product-thumb{display:grid;place-items:center;width:58px;height:46px;border:1px solid var(--line);
  border-radius:var(--r-sm);background:var(--surface-2);overflow:hidden;color:var(--faint);font-size:10px}
.catalog-product-thumb img{display:block;width:54px;height:42px;object-fit:cover}
.catalog-detail{position:static; height:auto; padding:var(--s-4) 0 var(--s-4) var(--s-4);
  border-left:1px solid var(--line); background:transparent; min-width:0}
.catalog-detail > .empty{margin:var(--s-4); padding:var(--s-6); border:1px dashed var(--line);
  border-radius:var(--r-md); background:var(--surface-2)}
.catalog-detail-head{display:flex; align-items:flex-start; justify-content:space-between; gap:var(--s-3); margin-bottom:var(--s-4)}
.catalog-detail h3{margin:0; font-size:var(--t-lg)}
.catalog-detail p{margin:2px 0; color:var(--mut); font-size:var(--t-sm)}
.catalog-actions{display:flex; gap:var(--s-2); flex-wrap:wrap}
.catalog-flat-editor{display:flex; flex-direction:column; gap:var(--s-4)}
.catalog-product-hero{display:grid;grid-template-columns:220px minmax(0,1fr);gap:var(--s-4);
  padding:var(--s-4);border:1px solid var(--line);border-radius:var(--r-lg);
  background:linear-gradient(135deg,var(--surface),var(--surface-2))}
.catalog-product-cover{display:grid;place-items:center;height:150px;border-radius:var(--r-md);
  background:#fff;border:1px solid var(--line);overflow:hidden;color:var(--mut)}
.catalog-product-cover img{display:block;width:100%;height:100%;object-fit:contain}
.catalog-product-hero h2{margin:10px 0;font-size:var(--t-xl)}
.catalog-product-hero dl{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:0}
.catalog-product-hero dl>div{padding:8px;border-radius:var(--r-md);background:rgba(255,255,255,.7)}
.catalog-product-hero dt{color:var(--mut);font-size:var(--t-xs)}
.catalog-product-hero dd{margin:2px 0 0;font-weight:700}
.catalog-detail-tabs{display:flex;gap:4px;padding:4px;border:1px solid var(--line);
  border-radius:var(--r-md);background:var(--surface-2);overflow-x:auto}
.catalog-detail-tabs button{flex:0 0 auto;min-height:36px;padding:0 12px;border:0;border-radius:6px;
  background:transparent;color:var(--mut);font:600 var(--t-sm)/1 var(--font);cursor:pointer}
.catalog-detail-tabs button[aria-selected="true"]{background:var(--surface);color:var(--accent-text);
  box-shadow:var(--sh-1)}
.catalog-qc-evidence{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-3)}
.catalog-qc-evidence figure{margin:0;border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden}
.catalog-qc-evidence img{display:block;width:100%;height:200px;object-fit:contain;background:#fff}
.catalog-qc-evidence figcaption{display:grid;gap:2px;padding:8px 10px;font-size:var(--t-xs)}
.catalog-qc-evidence figcaption span{color:var(--mut)}
.catalog-flat-section{padding-top:var(--s-3); border-top:1px solid var(--line)}
.catalog-flat-section > h3{margin-bottom:var(--s-3)}
.catalog-flat-specs input,.catalog-flat-specs select,.catalog-file-upload select,
.catalog-file-upload input[type="file"]{width:100%; min-width:80px; min-height:34px;
  border:1px solid var(--line); border-radius:var(--r-md); background:var(--surface);
  color:var(--txt); padding:6px 8px; font:inherit; font-size:var(--t-sm)}
.catalog-flat-specs td{vertical-align:middle}
.catalog-tolerance-inputs{display:grid;grid-template-columns:repeat(3,minmax(72px,1fr));gap:5px}
.catalog-flat-specs th:last-child,.catalog-flat-specs td:last-child{width:42px}
.catalog-file-upload{display:grid; grid-template-columns:minmax(120px,.45fr) minmax(180px,1fr) auto auto;
  align-items:center; gap:var(--s-2); margin-top:var(--s-3)}
.catalog-file-upload .qc-chk{display:inline-flex; align-items:center; gap:5px;
  color:var(--mut); font-size:var(--t-xs); white-space:nowrap}
.catalog-supplier-list{display:flex; flex-wrap:wrap; gap:var(--s-2)}
.catalog-supplier-chip{display:inline-flex; align-items:center; gap:6px; padding:5px 8px;
  border:1px solid var(--line); border-radius:var(--r-pill); background:var(--surface-2);
  color:var(--txt-2); font-size:var(--t-xs); font-weight:600}
.catalog-supplier-chip button{appearance:none; border:0; background:transparent; color:var(--bad-text);
  cursor:pointer; padding:0; font:700 var(--t-sm)/1 var(--font)}
.catalog-association{padding:var(--s-3) 0; border-block:1px solid var(--line)}
.quality-passport{padding:var(--s-3) 0; border-block:1px solid var(--line); margin-bottom:var(--s-3)}
.quality-passport > .band-head{margin-bottom:var(--s-3)}
.quality-summary{display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); border-block:1px solid var(--line)}
.quality-summary div{padding:7px 9px; border-right:1px solid var(--line)}
.quality-summary div:last-child{border-right:0}
.quality-summary span{display:block; color:var(--mut); font-size:var(--t-xs)}
.quality-summary strong{display:block; margin-top:2px; font:700 var(--t-md)/1.2 var(--mono)}
.quality-grid{display:grid; grid-template-columns:1fr 1fr; gap:var(--s-4); margin-top:var(--s-3)}
.quality-panel{min-width:0; padding-top:var(--s-2); border-top:1px solid var(--line)}
.quality-panel h4{margin:0 0 4px; font-size:var(--t-sm)}
.quality-panel > p{margin:0 0 var(--s-2); font-size:var(--t-xs)}
.quality-blockers{margin:6px 0; padding-left:18px; color:var(--bad-text); font-size:var(--t-xs)}
.quality-inline{display:flex; align-items:center; gap:var(--s-2); margin-top:var(--s-2)}
.quality-inline input,.quality-inline select{min-width:0; height:32px; flex:1; border:1px solid var(--line);
  border-radius:var(--r-sm); background:var(--surface); color:var(--txt); padding:0 8px; font:inherit}
.quality-review,.quality-issue{padding:7px 0; border-bottom:1px solid var(--line)}
.quality-review:last-child,.quality-issue:last-child{border-bottom:0}
.quality-row-head{display:flex; align-items:flex-start; justify-content:space-between; gap:var(--s-2)}
.quality-row-head b{font-size:var(--t-xs)}
.quality-review small,.quality-issue small{display:block; margin-top:2px; color:var(--mut); font-size:var(--t-xs)}
.quality-row-actions{display:flex; align-items:center; gap:5px; flex-wrap:wrap; margin-top:5px}
.quality-row-actions .cmd{padding:4px 8px; font-size:var(--t-xs)}
.quality-change-list{margin:5px 0 0; padding-left:18px; color:var(--txt-2); font-size:var(--t-xs)}
.quality-change-list li{margin:2px 0}
.catalog-link-row{display:grid; grid-template-columns:minmax(180px,1fr) auto;
  gap:var(--s-2); align-items:center; margin-top:var(--s-2)}
.catalog-link-row select,.bom-confirm-actions select{height:34px; min-width:0; border:1px solid var(--line);
  border-radius:var(--r-md); background:var(--surface); color:var(--txt);
  padding:0 8px; font:inherit; font-size:var(--t-sm)}
.catalog-version{padding:var(--s-3) 0; border-top:1px solid var(--line)}
.catalog-version-head{display:flex; align-items:center; justify-content:space-between; gap:var(--s-3)}
.catalog-version h4{margin:0; font-size:var(--t-sm)}
.catalog-spec-editor{margin-top:var(--s-3)}
.catalog-spec-editor input{width:100%; min-width:72px; height:30px; border:1px solid var(--line);
  border-radius:var(--r-sm); padding:0 6px; font:inherit; font-size:var(--t-sm)}
.catalog-spec-editor select,.catalog-file-row select{height:30px; border:1px solid var(--line);
  border-radius:var(--r-sm); background:var(--surface); color:var(--txt); font:inherit; font-size:var(--t-sm)}
.catalog-file-row{display:flex; align-items:center; gap:var(--s-2); margin-top:var(--s-2); flex-wrap:wrap}
.catalog-publish-row{display:grid; grid-template-columns:minmax(180px,1fr) auto auto; gap:var(--s-2);
  align-items:center; margin-top:var(--s-3)}
.catalog-publish-row input{height:34px}
.check-inline{display:inline-flex; align-items:center; gap:5px; color:var(--mut); font-size:var(--t-xs)}
.compact-empty{padding:var(--s-3) 0}
.bom-confirm-actions{display:flex; gap:6px; align-items:center; flex-wrap:wrap}
.bom-confirm-actions select{flex:1 1 170px}
.bom-confirm-actions .cmd{min-height:30px; padding-inline:9px; font-size:var(--t-xs)}
.system-bom-review{padding:var(--s-3) 0; border-bottom:1px solid var(--line)}
.system-bom-review small,.catalog-system-version small{color:var(--mut); font-size:var(--t-xs)}

.app-dialog{width:min(680px,calc(100vw - 32px)); border:1px solid var(--line); border-radius:var(--r-lg);
  padding:0; box-shadow:var(--sh-2); color:var(--txt); background:var(--surface);
  overscroll-behavior:contain}
.app-dialog::backdrop,.task-drawer::backdrop{background:rgba(20,30,27,.42); backdrop-filter:blur(2px)}
.app-dialog form{padding:var(--s-5)}
.app-dialog header,.task-drawer header{display:flex; align-items:flex-start; justify-content:space-between; gap:var(--s-3);
  padding-bottom:var(--s-3); border-bottom:1px solid var(--line)}
.app-dialog h2,.task-drawer h2{margin:0; font-size:var(--t-lg)}
.dialog-grid{display:grid; grid-template-columns:1fr 1fr; gap:var(--s-3); margin-top:var(--s-4)}
.dialog-grid label{display:flex; flex-direction:column; gap:4px; color:var(--mut); font-size:var(--t-xs); font-weight:600}
.dialog-grid label.wide{grid-column:1/-1}
.dialog-grid input,.dialog-grid select,.dialog-grid textarea{width:100%; border:1px solid var(--line);
  border-radius:var(--r-md); background:var(--surface); color:var(--txt); padding:8px; font:inherit}
.dialog-grid .check-field{flex-direction:row; align-items:center; align-self:end; min-height:38px}
.dialog-grid .check-field input{width:auto}
.app-dialog footer{display:flex; justify-content:flex-end; gap:var(--s-2); margin-top:var(--s-4)}
.settings-dialog{width:min(920px,calc(100vw - 32px)); max-width:none}
.settings-shell{padding:var(--s-5); max-height:calc(100vh - 40px); overflow:auto}
.settings-section{padding:var(--s-4) 0; border-bottom:1px solid var(--line)}
.settings-section h3,.settings-dialog form h3{margin:0 0 var(--s-3)}
.settings-dialog .operator-field{display:grid; grid-template-columns:120px minmax(220px,420px);
  align-items:center; gap:var(--s-3)}
.settings-supplier-list{display:grid; gap:var(--s-3)}
.settings-supplier{border:1px solid var(--line); border-radius:var(--r-md); padding:var(--s-3);
  background:var(--surface-2)}
.settings-supplier-head,.settings-supplier-actions{display:flex; align-items:center;
  justify-content:space-between; gap:var(--s-3); margin-bottom:var(--s-3)}
.settings-supplier-head b{margin-right:var(--s-2)}
.settings-supplier-actions{margin:var(--s-3) 0 0}
.settings-dialog #settings-supplier-form{padding:var(--s-4) 0 0}
.task-drawer{position:fixed; inset:0 0 0 auto; width:min(440px,100vw); height:100vh; max-height:none;
  margin:0; border:0; border-left:1px solid var(--line); padding:var(--s-5); background:var(--surface);
  color:var(--txt); overflow:auto; overscroll-behavior:contain}
.task-drawer header p{margin:2px 0 0; color:var(--mut); font-size:var(--t-xs)}
.task-drawer-actions{display:flex; gap:var(--s-2)}
.task-progress{grid-column:1/-1; height:3px; overflow:hidden; background:var(--surface-3)}
.task-progress span{display:block; height:100%; background:var(--accent); transition:width var(--dur) var(--ease)}
.task-progress.failed span{background:var(--bad)}

.toast-region{position:fixed; z-index:120; right:var(--s-4); bottom:var(--s-4); width:min(380px,calc(100vw - 24px));
  display:flex; flex-direction:column; gap:var(--s-2); pointer-events:none}
.app-toast{display:grid; grid-template-columns:minmax(0,1fr) auto; align-items:start; gap:var(--s-3);
  padding:10px 12px; border:1px solid var(--line); border-left:4px solid var(--accent);
  border-radius:var(--r-md); background:var(--surface); color:var(--txt); box-shadow:var(--sh-2);
  pointer-events:auto; animation:toast-in var(--dur) var(--ease)}
.app-toast.success{border-left-color:var(--ok)}
.app-toast.error{border-left-color:var(--bad)}
.app-toast button{appearance:none; border:0; background:transparent; color:var(--mut); cursor:pointer;
  width:24px; height:24px; padding:0; font:700 var(--t-md)/1 var(--font)}
@keyframes toast-in{from{opacity:0; transform:translateY(8px)}to{opacity:1; transform:translateY(0)}}

@media (max-width:900px){
  main{padding:var(--s-4)}
  .dashboard-columns,.dashboard-qc-grid,.catalog-layout{grid-template-columns:1fr}
  .dashboard-ai-secondary-body{grid-template-columns:1fr}
  .catalog-list{padding-right:0}
  .catalog-list .tbl-wrap{max-height:360px; overflow:auto; overscroll-behavior:contain}
  .catalog-list table{min-width:620px}
  .catalog-detail{border-left:0; border-top:1px solid var(--line); padding-left:0}
  .catalog-product-hero{grid-template-columns:1fr}
  .catalog-product-hero dl{grid-template-columns:repeat(2,1fr)}
  .catalog-qc-evidence{grid-template-columns:1fr}
  .catalog-link-row,.catalog-publish-row{grid-template-columns:1fr}
  .quality-grid{grid-template-columns:1fr}
  .ai-task-context{grid-template-columns:repeat(2,minmax(0,1fr))}
  .efficiency-grid{grid-template-columns:1fr}
}
@media (min-width:901px){
  .catalog-layout{height:clamp(520px,calc(100vh - 245px),780px)}
  .catalog-list,.catalog-detail{overflow:auto}
}
@media (max-width:640px){
  main{padding:var(--s-3)}
  .catalog-file-upload{grid-template-columns:1fr}
  aside.side{flex-direction:column; align-items:stretch; gap:var(--s-2)}
  .side .brand{display:flex; align-items:center; gap:var(--s-2)}
  .side .brand p{display:none}
  nav.tabs{width:100%; flex:none}
  .topbar{flex-wrap:wrap}
  .global-search{flex-basis:calc(100% - 52px)}
  .operator-field{flex:1 1 100%}
  .metric-strip{grid-template-columns:repeat(2,1fr)}
  .metric-cell:last-child{grid-column:1/-1}
  .quality-summary{grid-template-columns:repeat(2,1fr)}
  .quality-summary div{border-bottom:1px solid var(--line)}
  .metric-cell:nth-child(2){border-right:0}
  .metric-cell:nth-child(-n+2){border-bottom:1px solid var(--line)}
  .efficiency-metrics{grid-template-columns:repeat(2,1fr)}
  .efficiency-metrics > div{border-left:0; border-bottom:1px solid var(--line-soft)}
  .qc-trend-row{grid-template-columns:1fr}.qc-trend-dots{overflow-x:auto;padding-bottom:3px}
  .workspace-head{align-items:flex-start; flex-direction:column}
  .workspace-head .catalog-actions{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); width:100%}
  .workspace-head .catalog-actions .cmd{width:100%}
  .dashboard-filters{width:100%}
  .dialog-grid{grid-template-columns:1fr}
  .dialog-grid label.wide{grid-column:auto}
  .ai-task-context{grid-template-columns:1fr}
  .ai-task-context .cmd,.ai-task-context > .tier{width:100%}
  .card > h2{display:block}
  .card > h2 small{display:block; margin-top:var(--s-1)}
  input,select,textarea{font-size:16px!important}
  .cmd,.segmented button{min-height:42px}
  .icon-command{min-width:42px; height:42px}
  nav.tabs button{min-height:42px}
  .toast-region{right:var(--s-3); bottom:var(--s-3)}
}
