.factory-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:var(--space-5); margin-top:var(--space-12); }
@media (max-width:1023px) { .factory-grid { grid-template-columns:repeat(2,1fr); } }
@media (max-width:640px) { .factory-grid { grid-template-columns:1fr; } }
.factory-card { background:var(--white); border:1px solid var(--gray-200); border-radius:var(--radius-lg); padding:26px; }
.factory-card h3 { font-size:var(--fs-body-lg); font-weight:700; color:var(--navy-900); margin:0 0 var(--space-1); }
.factory-loc { font-size:var(--fs-small); color:var(--blue-600); margin-bottom:var(--space-3); }
.factory-card p { font-size:var(--fs-caption); line-height:1.8; color:var(--gray-500); margin:0; }
.warehouse-card { margin-top:var(--space-5); background:var(--navy-900); border-radius:var(--radius-lg); padding:var(--space-8) var(--space-9); display:flex; flex-wrap:wrap; gap:var(--space-3) var(--space-10); align-items:center; justify-content:space-between; }
.warehouse-card h3 { font-size:var(--fs-body-lg); font-weight:700; color:#fff; margin:0 0 var(--space-1-5); }
.warehouse-card p { font-size:var(--fs-caption); color:rgba(255,255,255,.78); margin:0; line-height:1.8; }
/* 深色仓储区块里的面积标注：--color-interactive 在 navy-900 上只有 3.35:1，
   深底必须换浅一档（详见 shared.css 的色彩令牌注释）。 */
.warehouse-area { font-size:var(--fs-small); color:var(--color-interactive-on-dark); letter-spacing:.06em; }
/* 🔴 `.price-table` 表格语言 2026-10-10 **上收到 shared.css** —— 它不再是 supply 页专属：
   services 页的四条服务线一览对比表（`.svc-cmp`）要用**同一套语言**（含移动端卡片化）。
   同一视觉语言不留两份实现。`<table class="price-table svc-cmp">` 的**修饰**规则在 SERVICES_PAGE_CSS 里。 */
.partner-block { margin-top:var(--space-7); }
.partner-block h3 { font-size:var(--fs-body-lg); font-weight:700; color:var(--navy-900); margin:0 0 var(--space-1-5); }
.partner-block > p { font-size:var(--fs-caption); color:var(--gray-500); margin:0 0 var(--space-4); }
.partner-chips { display:flex; flex-wrap:wrap; gap:var(--space-2-5); }
.partner-chips span { display:inline-block; padding:var(--space-2) var(--space-4); border:1px solid var(--gray-200); border-radius:var(--radius-md); background:var(--white); font-size:var(--fs-small); color:var(--gray-700); }
.partner-chips span small { display:block; font-size:var(--fs-nano); color:var(--gray-600); margin-top:2px; }
.partner-chips.is-strategy span { border-color:var(--blue-500); }
/* 可点品牌 chip：点开弹层看凭据。深蓝边框 = 有凭据可点 —— 跨「战略合作 / 合作品牌」
   两区语义一致，不按档位分色（合作区若上凭据同样要能一眼认出）。只改边框色/阴影、
   不做 transform：触摸端 hover 复位策略是「位移/缩放必须复位，颜色/阴影保留」 */
.table-note { margin: var(--space-4) 0 0; font-size: var(--fs-small); line-height: 1.7; color: var(--gray-500); }
.partner-chips .partner-chip-auth { display:inline-block; padding:var(--space-2) var(--space-4); border:1px solid var(--color-interactive-hover); border-radius:var(--radius-md); background:var(--white); font-size:var(--fs-small); font-family:inherit; color:var(--gray-700); text-align:left; cursor:pointer; -webkit-appearance:none; appearance:none; transition:border-color var(--duration-fast) var(--ease-out-quart), box-shadow var(--duration-fast) var(--ease-out-quart); }
.partner-chips .partner-chip-auth small { display:block; font-size:var(--fs-nano); color:var(--gray-600); margin-top:2px; }
.partner-chips .partner-chip-auth .chip-ico { margin-left:5px; vertical-align:-1px; opacity:.5; }
/* 过期凭据：仍可点开核对，但必须一眼看出"不是现行"。
   ⚠️ 用**纯文本**不用胶囊：chip 只有两行，虚线胶囊会压住第二行的品类文字（实测截图确认）。 */
.partner-chips .partner-chip-auth .chip-expired { color:var(--gray-500); font-weight:500; }
.partner-chips .partner-chip-auth:hover { border-color:var(--navy-700); box-shadow:0 2px 10px rgba(15,23,42,.10); }
.partner-chips .partner-chip-auth:hover .chip-ico { opacity:.9; }
.partner-chips .partner-chip-auth:focus-visible { outline:2px solid var(--color-interactive-hover); outline-offset:2px; }
/* 授权书弹层（原生 <dialog>：自带 ESC 关闭 / 焦点陷阱 / ::backdrop） */
.auth-modal { border:0; padding:0; margin:auto; width:min(94vw,620px); max-height:92vh; background:transparent; }
.auth-modal::backdrop { background:rgba(10,18,32,.72); }
.auth-modal-inner { display:flex; flex-direction:column; max-height:92vh; background:var(--white); border-radius:var(--radius-lg); overflow:hidden; }
.auth-modal-head { display:flex; align-items:flex-start; justify-content:space-between; gap:var(--space-4); padding:var(--space-5) var(--space-6) var(--space-3-5); border-bottom:1px solid var(--gray-100); }
.auth-modal-head > div { min-width:0; }
.auth-modal-head h3 { margin:0 0 var(--space-1); font-size:var(--fs-body); font-weight:700; color:var(--navy-900); }
.auth-modal-meta { margin:0; font-size:var(--fs-small); line-height:1.7; color:var(--gray-500); }
.auth-modal-close { flex:none; width:34px; height:34px; border:1px solid var(--gray-200); border-radius:50%; background:var(--white); color:var(--gray-600); font-size:var(--fs-lg); line-height:1; cursor:pointer; }
.auth-modal-close:hover { border-color:var(--color-interactive-hover); color:var(--navy-900); }
.auth-modal-body { padding:var(--space-4) var(--space-6) var(--space-6); overflow:auto; text-align:center; }
.auth-modal-body img { display:block; margin:0 auto; max-width:100%; max-height:calc(92vh - 200px); height:auto; border-radius:var(--radius-md); }
@media (max-width:640px) {
  .auth-modal { width:94vw; }
  .auth-modal-head { padding:var(--space-4) var(--space-4) var(--space-3); }
  .auth-modal-meta { font-size:var(--fs-nano); }
  .auth-modal-body { padding:var(--space-3) var(--space-3) var(--space-4-5); }
  .auth-modal-body img { max-height:calc(92vh - 180px); }
}
