  :root{
    --bg:#f4f6fb; --card:#ffffff; --text:#1c2333; --muted:#6b7488;
    --accent:#4f5df0; --accent-hover:#4250e8; --border:#e6e9f2;
    --sidebar:#ffffff; --sidebar-text:#6b7488; --sidebar-active:#4f5df0;
    --ok:#16a34a; --err:#dc2626; --radius:14px;
  }
  *{box-sizing:border-box;margin:0;padding:0}
  body{font-family:"PingFang SC","Microsoft YaHei",system-ui,-apple-system,"Segoe UI",sans-serif;
    background:var(--bg); color:var(--text); min-height:100vh}
  .view{display:none} .view.active{display:flex}

  /* ---------- 登录页 ---------- */
  #loginView{align-items:center;justify-content:center;min-height:100vh;padding:20px;
    background:linear-gradient(160deg,#eceefe 0%,#f4f6fb 45%,#eef1fe 100%)}
  .login-card{width:100%;max-width:400px;background:var(--card);border-radius:var(--radius);
    box-shadow:0 4px 24px rgba(15,23,42,.06);padding:40px 36px}
  .brand{display:flex;align-items:center;gap:12px;margin-bottom:8px}
  .brand-mark{width:42px;height:42px;border-radius:12px;background:var(--accent);color:#fff;
    display:flex;align-items:center;justify-content:center;font-weight:700;font-size:20px;flex-shrink:0}
  .brand h1{font-size:20px;font-weight:600}
  .sub{color:var(--muted);font-size:13px;margin-bottom:28px}
  .field{margin-bottom:16px}
  .field label{display:block;font-size:13px;color:var(--muted);margin-bottom:6px}
  .field input{width:100%;height:42px;padding:0 12px;font-size:14px;color:var(--text);
    border:1px solid var(--border);border-radius:10px;outline:none;transition:border .15s}
  /* 豁免：checkbox/radio 不套用上方大输入框样式（否则被撑成 42px 大白方块），保持行内小勾选框 */
  .field input[type=checkbox],.field input[type=radio]{width:15px;height:15px;padding:0;vertical-align:-2px;margin:0 5px 0 0;accent-color:var(--accent);cursor:pointer}
  .field input:focus{border-color:var(--accent)}
  /* AI 编辑弹窗内的下拉与任务输入框 */
  #aiEditMask select{width:100%;height:42px;padding:0 10px;font-size:14px;color:var(--text);
    border:1px solid var(--border);border-radius:10px;outline:none;background:#fff}
  #aiEditMask select:focus{border-color:var(--accent)}
  #aiEditMask textarea{width:100%;padding:10px 12px;font-size:14px;color:var(--text);line-height:1.5;
    border:1px solid var(--border);border-radius:10px;outline:none;resize:vertical;font-family:inherit}
  #aiEditMask textarea:focus{border-color:var(--accent)}
  /* API Key：禁止 Edge/IE 密码框自带的「查看」眼镜与清除按钮 */
  #aiKey::-ms-reveal,#aiKey::-ms-clear{display:none}
  #aiModelCustom{width:100%;height:42px;padding:0 12px;font-size:14px;color:var(--text);
    border:1px solid var(--accent);border-radius:10px;outline:none;box-sizing:border-box;background:#fff;cursor:text}
  #aiModelCustom:focus{border-color:var(--accent)}
  /* 热搜词弹窗与 AI 融词结果 */
  #trendMask .trend-groups{max-height:340px;overflow-y:auto;border:1px solid var(--border);border-radius:10px;padding:4px 12px 10px}
  .tg-title{font-size:11.5px;color:var(--muted);margin:10px 0 6px;font-weight:600}
  .tg-title .tg-c{font-weight:400;margin-left:4px}
  .trend-chip{display:inline-block;border:1px solid var(--border);border-radius:999px;padding:4px 12px;
    font-size:12.5px;margin:0 6px 6px 0;cursor:pointer;background:#fff;color:#334155}
  .trend-chip:hover{border-color:var(--accent);color:var(--accent);background:#eceefe}
  .trend-chip .fav{margin-left:5px;color:#cbd5e1}
  .trend-chip .fav:hover{color:#f59e0b}
  .trend-chip.faved{border-color:#f59e0b;background:#fffbeb}
  .trend-chip.faved .fav{color:#f59e0b}
  .trend-chip .chip-zh{display:block;font-size:10.5px;color:var(--muted);font-weight:400;margin-top:1px;max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .trend-note{font-size:12px;color:var(--muted);line-height:1.6}
  #aiTrendUsed .trend-chip{border-color:#fde68a;background:#fffbeb;color:#92400e}
  #aiTrendUsed .trend-chip:hover{border-color:#f59e0b;color:#b45309;background:#fef3c7}
  /* 用词超上限的计数标红（2026-09-16 深夜）：标题 >3 个 / 描述 >6 个时提醒卖家删减 */
  .trend-over{color:#b91c1c}
  /* AI 编辑锁定条：刊登管理入口下站点由页面决定，展示为只读信息条（不可修改） */
  .ai-lock-bar{border:1px solid #c7d2fe;background:#eef2ff;border-radius:10px;padding:9px 12px;
    font-size:12.5px;color:#3730a3;line-height:1.6;margin:-2px 0 10px}
  .ai-lock-bar b{color:#312e81}
  .ai-lock-bar .lk-row{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
  .ai-lock-bar .lk-tag{display:inline-block;border:1px solid #a5b4fc;background:#fff;border-radius:6px;
    padding:1px 7px;font-size:11.5px;color:#4338ca;font-weight:600}
  .captcha-row{display:flex;gap:10px;align-items:stretch}
  .captcha-row input{flex:1}
  .captcha-img{height:42px;width:132px;border:1px solid var(--border);border-radius:10px;
    cursor:pointer;overflow:hidden;background:#f1f5f9;flex-shrink:0}
  .captcha-img svg{width:100%;height:100%;display:block}
  .captcha-refresh{font-size:12px;color:var(--muted);margin-top:6px;cursor:pointer;user-select:none}
  .captcha-refresh:hover{color:var(--accent)}
  .btn-main{width:100%;height:44px;margin-top:8px;border:none;border-radius:10px;cursor:pointer;
    background:var(--accent);color:#fff;font-size:15px;font-weight:500;transition:background .15s}
  .btn-main:hover{background:var(--accent-hover)}
  .btn-main:disabled{opacity:.6;cursor:not-allowed}
  .msg{font-size:13px;margin-top:14px;min-height:18px;text-align:center}
  .msg.err{color:var(--err)} .msg.ok{color:var(--ok)}

  /* ---------- ERP 布局 ---------- */
  #appView{flex-direction:row;height:100vh}
  aside{width:224px;background:var(--sidebar);color:var(--sidebar-text);border-right:1px solid var(--border);
    display:flex;flex-direction:column;flex-shrink:0;height:100vh;overflow-y:auto}
  .side-brand{display:flex;align-items:center;gap:10px;padding:22px 20px 20px;color:var(--text)}
  .side-brand .brand-mark{width:34px;height:34px;font-size:16px;border-radius:9px}
  .side-brand h1{font-size:15px;font-weight:600}
  nav{flex:1;padding:8px 12px}
  .nav-item{display:flex;align-items:center;gap:10px;padding:11px 14px;border-radius:9px;
    font-size:14px;margin-bottom:4px;cursor:pointer;transition:background .12s,color .12s}
  .nav-item:hover{color:var(--accent);background:#f4f6fd}
  .nav-item.active{background:#eceefe;color:#4f5df0;font-weight:500}
  .nav-item.disabled{opacity:.38;cursor:not-allowed}
  .nav-item.disabled:hover{color:var(--sidebar-text);background:none}
  .nav-item .ico{width:18px;text-align:center;font-style:normal}
  .nav-item .tag{margin-left:auto;font-size:10px;background:#eceefe;color:#4f5df0;
    padding:1px 6px;border-radius:4px;font-weight:600}
  .nav-item .arrow{margin-left:auto;font-size:10px;transition:transform .15s}
  .nav-item.sub-open .arrow{transform:rotate(180deg)}
  .nav-sub{display:none;flex-direction:column;padding:2px 0 4px}
  .nav-sub.open{display:flex}
  .nav-subitem{font-size:13px;padding:8px 14px 8px 42px;border-radius:8px;margin-bottom:2px;
    cursor:pointer;color:var(--sidebar-text);transition:background .12s,color .12s}
  .nav-subitem:hover{color:var(--accent);background:#f4f6fd}
  .nav-subitem.active{color:#4f5df0;background:#eceefe;font-weight:500}
  /* ===== 刊登管理：侧栏三级折叠（2026-09-15 替代原「已发布」+「发布失败」） ===== */
  .nav-subitem.nav-parent{font-weight:500;color:var(--text)}
  .nav-subitem .arrow{margin-left:auto;font-size:10px;transition:transform .15s}
  .nav-subitem.nav-parent:not(.sub-open) .arrow{transform:rotate(-90deg)}
  .nav-badge{background:var(--err);color:#fff;font-size:10.5px;font-weight:600;
    border-radius:9px;padding:1px 7px;line-height:16px;flex-shrink:0}
  .nav-count{color:#aab1c4;font-size:11.5px;flex-shrink:0}
  .nav-subitem.lv3{padding-left:42px;display:flex;align-items:center;gap:6px;white-space:nowrap;overflow:hidden}
  /* 三级站点子项空态：数据未回来前不占位（避免误报「暂无」），加载完确实为空才提示 */
  .nav-empty{padding:6px 0 6px 42px;font-size:11.5px;color:var(--muted)}
  .nav-subitem .dot{width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.45;flex-shrink:0}
  .nav-subitem.active .dot{opacity:1}
  .nav-subitem .si{font-size:10px;color:#aab1c4;flex-shrink:0}
  .nav-subitem .sn{overflow:hidden;text-overflow:ellipsis}
  .sub-fail{background:#fdecec;color:var(--err);font-size:10.5px;font-weight:600;
    border-radius:8px;padding:1px 6px;line-height:15px;flex-shrink:0}
  /* ===== 刊登管理：统计卡 / 工具条 / 表格 ===== */
  .lm-statbar{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap}
  .lm-stat{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:11px 17px;
    min-width:112px;cursor:pointer;transition:border-color .15s,box-shadow .15s}
  .lm-stat:hover{border-color:#cfd6ec}
  .lm-stat.on{border-color:var(--accent);box-shadow:0 0 0 2px #eceefe}
  .lm-stat .n{font-size:19px;font-weight:600;line-height:1.2}
  .lm-stat .l{font-size:12px;color:var(--muted);margin-top:2px}
  .lm-stat.ok .n{color:var(--ok)} .lm-stat.err .n{color:var(--err)}
  .lm-stat.warn .n{color:#d97706} .lm-stat.gray .n{color:var(--muted)}
  /* 2026-09-15 多站点编排：待发布（staged）用紫色与已刊登/失败区分 */
  .lm-stat.stage .n{color:#7c3aed}
  #page-prod-listing .data-table{table-layout:fixed;width:100%;min-width:1080px}
  /* 共享产品页（2026-10-17）：13 列全部平铺展示，禁止横向滚动 */
  #page-prod-shared .table-scroll{overflow-x:hidden}
  #page-prod-shared .data-table{table-layout:fixed;width:100%}
  #page-prod-shared .data-table th,#page-prod-shared .data-table td{padding:10px 6px;overflow:hidden;word-break:break-word}
  #page-prod-shared .data-table th:nth-child(3){width:13%}
  #page-prod-shared .data-table th:nth-child(4){width:9%}
  #page-prod-shared .data-table th:nth-child(5){width:5%}
  #page-prod-shared .data-table th:nth-child(6){width:5%}
  #page-prod-shared .data-table th:nth-child(7){width:6%}
  #page-prod-shared .data-table th:nth-child(8){width:19%}
  #page-prod-shared .data-table th:nth-child(9){width:12%}
  #page-prod-shared .data-table th:nth-child(10){width:4%}
  #page-prod-shared .data-table th:nth-child(11){width:7%}
  #page-prod-shared .data-table th:nth-child(12){width:8%}
  #page-prod-shared .data-table th:nth-child(13){width:6%}
  #page-prod-listing .data-table th,#page-prod-listing .data-table td{padding:10px 8px;overflow:hidden}
  .lm-badge{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:500;
    border-radius:7px;padding:2px 9px;white-space:nowrap}
  .lm-badge .dot{width:6px;height:6px;border-radius:50%;background:currentColor}
  .lm-badge.b-ok{background:#e9f7ee;color:#15803d}
  .lm-badge.b-err{background:#fdecec;color:#dc2626}
  .lm-badge.b-warn{background:#fdf3e3;color:#b45309}
  .lm-badge.b-gray{background:#f1f3f8;color:#6b7488}
  /* 待发布（多站点编排产物：AI 已按站点优化，等过目后发布） */
  .lm-badge.b-stage{background:#f3e8ff;color:#7c3aed}
  .lm-note{font-size:12px;color:#7c3aed;line-height:1.45;max-height:46px;overflow:hidden;
    display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}
  .lm-note.err{color:var(--err)}
  /* 2026-09-15 按要求改为竖向排列（原来横排一行放不下会换行错乱） */
  .lm-acts{display:flex;flex-direction:column;align-items:flex-start;gap:4px}
  .lm-acts .link{line-height:1.4}
  .lm-acts .link{font-size:12px;color:var(--accent);cursor:pointer;white-space:nowrap}
  .lm-acts .link:hover{text-decoration:underline}
  .lm-acts .link.danger{color:var(--err)}
  .lm-prod{display:flex;align-items:center;gap:9px;min-width:0}
  .lm-thumb{width:36px;height:36px;border-radius:8px;object-fit:cover;flex-shrink:0;background:#eef0f7}
  .lm-ptxt{min-width:0}
  .lm-pname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}
  .lm-psku{font-size:11.5px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .lm-err{font-size:12px;color:var(--err);line-height:1.45;max-height:46px;overflow:hidden;
    display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;cursor:help}
  .lm-none{color:#c2c8d6}
  /* 悬停卡片（2026-09-15）：替代浏览器原生 title —— 原生 title 是系统级提示，
     显示慢、字号小、鼠标一动就消失，而且截图工具一激活就被直接清掉，卖家永远截不到失败原因。
     这里改成页面内自绘的 DOM 卡片：移入立即显示、移出 0.15s 才关、鼠标可以移进卡片里选中复制，
     截图时它就在页面画面上（截图遮罩是半透明的），能正常截下来。 */
  /* width:max-content —— 短文本卡片就窄，长文本自动撑到 max-width 再折行。
     不加它时 fixed 元素按「可用空间」收缩，长失败原因会被挤成 260px 折五六行，很难读。 */
  #lmTip{position:fixed;z-index:9999;display:none;width:max-content;
    max-width:min(420px,calc(100vw - 24px));max-height:300px;overflow:auto;
    background:#fff;border:1px solid #e2e0d8;border-radius:10px;padding:10px 12px;font-size:12px;
    line-height:1.7;color:var(--text);box-shadow:0 10px 30px rgba(15,23,42,.18);
    white-space:pre-wrap;word-break:break-word;cursor:text;user-select:text}
  #lmTip.show{display:block}
  .lm-tip-host{cursor:help}
  .lm-var-chip{display:inline-block;font-size:11px;background:#f1f3f8;color:#6b7488;
    border-radius:6px;padding:1px 6px;margin:1px 3px 1px 0}
  .lm-tool{display:flex;align-items:center;gap:9px;flex-wrap:wrap;background:var(--card);
    border:1px solid var(--border);border-radius:12px;padding:11px 13px;margin-bottom:12px}
  .lm-tool input[type=text]{border:1px solid var(--border);border-radius:9px;height:33px;
    padding:0 11px;font-size:13px;outline:none;font-family:inherit;width:230px}
  .lm-tool input[type=text]:focus{border-color:var(--accent)}
  .lm-tool select{border:1px solid var(--border);border-radius:9px;height:33px;padding:0 9px;
    font-size:13px;background:#fff;outline:none;font-family:inherit;cursor:pointer}
  .lm-sp{margin-left:auto;display:flex;gap:8px}
  /* 变种明细弹窗内的表 */
  .lm-vt{width:100%;border-collapse:collapse;font-size:12.5px}
  .lm-vt th{text-align:left;color:var(--muted);font-weight:500;padding:7px 9px;border-bottom:1px solid var(--border)}
  .lm-vt td{padding:7px 9px;border-bottom:1px solid #f2f4f9}
  .lm-vt .mono{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11.5px}
  .side-user{padding:16px 20px;border-top:1px solid var(--border);font-size:13px}
  .side-user .u{color:var(--text);margin-bottom:10px;display:block}
  .btn-logout{border:1px solid var(--border);background:transparent;color:var(--muted);
    border-radius:8px;padding:7px 14px;font-size:12px;cursor:pointer;width:100%}
  .btn-logout:hover{color:var(--accent);border-color:var(--accent)}

  .main{flex:1;padding:28px 18px;min-width:0;height:100vh;overflow-y:auto}
  body.erp-edit-window aside{display:none}   /* 新窗编辑：隐藏左侧导航，编辑页独占整窗 */
  .page{display:none} .page.active{display:block}
  .page-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
  .page-title{font-size:22px;font-weight:600}
  .page-sub{color:var(--muted);font-size:14px;margin-bottom:24px}

  .btn{display:inline-flex;align-items:center;gap:6px;border:none;border-radius:9px;cursor:pointer;
    font-size:13px;padding:9px 18px;text-decoration:none;transition:all .15s}
  .btn-accent{background:var(--accent);color:#fff}
  .btn-accent:hover{background:var(--accent-hover)}
  .btn-outline{background:transparent;color:var(--muted);border:1px solid var(--border)}
  .btn-outline:hover{color:var(--err);border-color:var(--err)}
  .btn-sm{padding:6px 12px;font-size:12px;border-radius:8px}

  .panel{background:var(--card);border-radius:var(--radius);padding:22px;
    box-shadow:0 2px 10px rgba(15,23,42,.04);margin-bottom:16px}
  .empty{color:var(--muted);font-size:13px;padding:10px 0}

  /* 店铺卡片：一行三个 */
  #storeList{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
  /* 用户卡片：与店铺卡片同构，一行三个 */
  #userList{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
  #userList .store-card{min-height:170px}
  .store-card{background:var(--card);border-radius:var(--radius);padding:20px;
    box-shadow:0 2px 10px rgba(15,23,42,.04);display:flex;flex-direction:column}
  .store-card .store-actions{margin-top:auto}
  .store-top{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px}
  .store-name{font-size:16px;font-weight:600}
  .badge{font-size:12.5px;font-weight:500;padding:0;border-radius:0;white-space:nowrap;background:none}
  .badge.ok{background:none;color:var(--ok)}
  .badge.bad{background:none;color:var(--err)}
  .badge.site{background:none;color:var(--accent);font-weight:600}
  .meta-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));
    gap:10px 14px;margin:14px 0;font-size:13px}
  .meta-grid .k{color:var(--muted);margin-bottom:3px}
  .meta-grid .v{color:var(--text)}
  .v.warn{color:var(--err)}
  .divider{border-top:1px solid var(--border);margin:14px 0}
  .site-sec h3{font-size:13px;color:var(--muted);font-weight:500;margin-bottom:10px;
    display:flex;align-items:center;gap:6px}
  .ship-list{display:flex;flex-wrap:wrap;gap:8px}
  .ship-tag{font-size:12px;background:#f1f5f9;border:1px solid var(--border);
    border-radius:8px;padding:5px 12px;color:#334155}
  .note{font-size:12px;color:var(--muted);background:#f8fafc;border:1px dashed var(--border);
    border-radius:8px;padding:9px 12px}
  .store-actions{display:flex;gap:10px;margin-top:16px}
  .store-actions .btn{flex:1;justify-content:center}
  .btn-action{background:#fff;color:#475569;border:1px solid var(--border)}
  .btn-action:hover{color:var(--accent);border-color:var(--accent)}
  .loading{color:#94a3b8;font-size:12px}
  .store-loc{font-size:13px;color:#475569;margin-top:6px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
  .store-loc .flag{font-size:14px}
  .store-loc .modes{color:var(--muted)}
  .store-loc .loading{font-size:12px}
  .store-sites{font-size:12px;color:var(--muted);margin-top:8px;line-height:1.7}
  .store-sites b{color:#334155;font-weight:500}
  .site-pill{display:inline-block;background:#f1f5f9;border:1px solid var(--border);
    border-radius:999px;padding:2px 10px;margin:2px 4px 2px 0;color:#334155;font-size:12px}
  .site-pill.full{background:#ecfdf5;border-color:#a7f3d0;color:#065f46}
  .site-pill.full i{font-style:normal;background:#10b981;color:#fff;border-radius:999px;
    padding:0 6px;font-size:10px;margin-left:5px;vertical-align:1px}

  /* 弹窗 */
  .modal-mask{position:fixed;inset:0;background:rgba(15,23,42,.45);display:none;
    align-items:center;justify-content:center;z-index:50;padding:20px}
  .modal-mask.show{display:flex}
  /* 发布任务卡片：右下角非阻塞进度（2026-09-09）——确认发布后弹窗即关，卡片常驻汇报进度/结果 */
  #pubToastWrap{position:fixed;right:16px;bottom:16px;z-index:60;display:flex;flex-direction:column;
    gap:10px;width:340px;max-width:calc(100vw - 32px)}
  .pub-toast{background:#fff;border:1px solid #e2e0d8;border-left:4px solid #b9770e;border-radius:10px;
    box-shadow:0 8px 24px rgba(15,23,42,.16);padding:12px 14px;font-size:13px;color:#334155;
    transition:opacity .5s,transform .5s}
  .pub-toast.ok{border-left-color:#2e8b57}
  .pub-toast.fail{border-left-color:#c0392b}
  .pub-toast.bye{opacity:0;transform:translateX(24px)}
  .pt-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px;
    cursor:move;user-select:none;touch-action:none}   /* 按住标题栏可拖动整个卡片堆（位置记忆） */
  .pt-title{font-weight:700;color:#1e293b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .pt-x{border:0;background:none;font-size:16px;line-height:1;color:#94a3b8;cursor:pointer;padding:2px 4px}
  .pt-x:hover{color:#334155}
  .pt-body{line-height:1.55;word-break:break-all}
  .pt-spin{display:inline-block;width:12px;height:12px;border:2px solid #d8d6ce;border-top-color:var(--accent);
    border-radius:50%;animation:ptspin .8s linear infinite;vertical-align:-1px;margin-right:6px}
  /* 非登录页密码框：文本框+CSS圆点遮罩——Chrome 不识别为密码框，杜绝「保存密码」误弹窗
     （2026-09-09 用户反馈：编辑产品保存时总弹保存密码，因 SPA 所有弹窗 DOM 常驻，任一密码框填过值即触发） */
  .mask-pwd{-webkit-text-security:disc}
  @keyframes ptspin{to{transform:rotate(360deg)}}
  /* 点击即时反馈：按钮忙碌态（禁用+文字切换）+ 编辑页数据加载全屏遮罩 */
  .btn[data-busy]{opacity:.6;cursor:progress;pointer-events:none}
  #prodLoadMask{position:fixed;inset:0;background:rgba(255,255,255,.62);display:none;
    align-items:center;justify-content:center;z-index:45;flex-direction:column;gap:10px}
  #prodLoadMask.show{display:flex}
  #prodLoadMask .spin{width:26px;height:26px;border:3px solid #d8d6ce;border-top-color:var(--accent);
    border-radius:50%;animation:prodSpin .8s linear infinite}
  @keyframes prodSpin{to{transform:rotate(360deg)}}
  .modal{background:var(--card);border-radius:var(--radius);width:100%;max-width:400px;
    padding:26px 26px 22px;box-shadow:0 12px 40px rgba(15,23,42,.18)}
  .modal-title{font-size:16px;font-weight:600;margin-bottom:6px;cursor:move;display:flex;align-items:center;justify-content:space-between;gap:12px}
  .modal-title .modal-x{background:none;border:none;font-size:18px;line-height:1;color:var(--muted);cursor:pointer;padding:2px 6px;border-radius:6px}
  .modal-title .modal-x:hover{color:var(--text);background:var(--hover,rgba(15,23,42,.06))}
  .modal-sub{font-size:13px;color:var(--muted);margin-bottom:18px}
  .modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:8px}
  .btn-ghost{background:transparent;border:none;color:var(--muted);cursor:pointer;
    font-size:13px;padding:9px 14px;border-radius:9px}
  .btn-ghost:hover{color:var(--text)}

  /* ---------- 待认领产品提示条（产品页 / 采集箱页，有待认领时才出现） ---------- */
  .claim-bar{display:none;align-items:center;gap:10px;margin:0 0 12px;padding:9px 14px;
    border-radius:10px;background:#eef2ff;border:1px solid #c7d2fe;color:#3730a3;
    font-size:12.5px;cursor:pointer;transition:.15s}
  .claim-bar.show{display:flex}
  .claim-bar:hover{background:#e0e7ff;border-color:#a5b4fc}
  .claim-bar .cb-txt{flex:1}
  .claim-bar .cb-txt b{font-weight:700;color:#4338ca}
  .claim-bar .cb-go{font-weight:600;white-space:nowrap}
  .claim-row{display:flex;align-items:center;justify-content:space-between;gap:12px;
    padding:10px 12px;border:1px solid var(--line);border-radius:10px;margin-bottom:8px;background:var(--card)}
  .claim-row:hover{border-color:#a5b4fc;background:#fafbff}
  .claim-row .cr-main{display:flex;align-items:center;gap:10px;min-width:0;flex:1}
  .claim-row .cr-name{font-size:13px;font-weight:500;color:var(--text);overflow:hidden;
    text-overflow:ellipsis;white-space:nowrap}
  .claim-row .cr-sub{font-size:11.5px;color:var(--muted);margin-top:2px}
  .claim-row img{width:40px;height:40px;object-fit:cover;border-radius:7px;border:1px solid var(--line);flex:none}
  .claim-empty{padding:34px 0;text-align:center;color:var(--muted);font-size:13px}

  .todo{color:#94a3b8;font-size:13px}

  /* 产品管理：工具栏 + 数据表格 */
  .table-toolbar{display:flex;justify-content:flex-end;align-items:center;gap:10px;margin-bottom:14px}
  /* 数据中心：统计卡 / 筛选标签 / 缩略图网格 / 底部操作条 */
  .dc-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;margin-bottom:14px}
  .dc-card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:10px 14px}
  .dc-card .dc-k{font-size:12px;color:var(--muted)}
  .dc-card .dc-v{font-size:20px;font-weight:600;margin-top:2px}
  .dc-card .dc-v span{font-size:12px;color:var(--muted);font-weight:400}
  .dc-card.warn .dc-v{color:#b45309}
  .btn-danger{background:#fff;color:var(--err);border:1px solid #f3b4b4}
  .btn-danger:hover{background:#fef2f2;border-color:var(--err)}
  .dc-tabs{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden}
  .dc-tab{border:0;background:none;padding:7px 16px;font-size:13px;color:var(--muted);cursor:pointer}
  .dc-tab.active{background:var(--accent);color:#fff;font-weight:500}
  .dc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
  .dc-item{border:1px solid var(--border);border-radius:10px;overflow:hidden;background:#fff;cursor:pointer;position:relative}
  .dc-item:hover{border-color:var(--accent)}
  .dc-item.sel{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent)}
  .dc-item .dc-thumb{height:100px;background:#f1f5f9;display:flex;align-items:center;justify-content:center;overflow:hidden}
  .dc-item .dc-thumb img{width:100%;height:100%;object-fit:cover;display:block}
  .dc-item .dc-check{position:absolute;top:6px;right:6px;width:18px;height:18px;border-radius:50%;
    background:rgba(255,255,255,.9);border:1px solid var(--border);display:flex;align-items:center;justify-content:center}
  .dc-item.sel .dc-check{background:var(--accent);border-color:var(--accent);color:#fff;font-size:11px}
  .dc-item .dc-meta{padding:6px 8px}
  .dc-item .dc-name{font-size:12px;font-family:ui-monospace,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .dc-item .dc-ref{font-size:12px;margin-top:2px}
  .dc-actionbar{position:sticky;bottom:10px;display:flex;align-items:center;justify-content:center;gap:10px;margin-top:14px;
    background:var(--card);border:1px solid var(--border);border-radius:10px;padding:8px 14px;box-shadow:0 4px 16px rgba(15,23,42,.08)}
  .dc-usage-list{max-height:280px;overflow-y:auto;font-size:13px}
  /* 数据中心：双击大图（点击图片以外区域关闭） */
  #dcLightbox{position:fixed;inset:0;background:rgba(15,23,42,.8);display:none;align-items:center;justify-content:center;z-index:90;cursor:zoom-out}
  #dcLightbox.show{display:flex}
  #dcLightbox img{max-width:88%;max-height:88%;border-radius:10px;background:#fff}
  .btn:disabled{opacity:.45;cursor:not-allowed}
  /* 引用图片弹窗：来源 Tab + 分组多选缩略图（变种图片区/单规格共用） */
  .pr-tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:10px}
  .pr-tab{border:0;background:none;padding:8px 14px;font-size:13px;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent}
  .pr-tab.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:500}
  .pr-body{max-height:400px;overflow-y:auto;padding:2px}
  .pr-group{font-size:12px;color:var(--muted);margin:10px 0 6px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .pr-tag{display:inline-block;font-size:10px;padding:0 6px;border-radius:8px;background:#eceefe;color:var(--accent);margin-left:4px}
  .pr-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px}
  .pr-cell{position:relative;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:#f1f5f9;cursor:pointer;aspect-ratio:1}
  .pr-cell img{width:100%;height:100%;object-fit:cover;display:block}
  .pr-cell:hover{border-color:var(--accent)}
  .pr-cell.sel{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent)}
  .pr-cell .pr-check{position:absolute;top:4px;right:4px;width:18px;height:18px;border-radius:50%;background:rgba(255,255,255,.92);
    border:1px solid var(--border);display:flex;align-items:center;justify-content:center;font-size:11px;color:transparent}
  .pr-cell.sel .pr-check{background:var(--accent);border-color:var(--accent);color:#fff}
  .pr-cell.used{opacity:.45;cursor:not-allowed}
  .pr-cell .used-tag{position:absolute;left:0;right:0;bottom:0;font-size:10px;text-align:center;background:rgba(15,23,42,.55);color:#fff;padding:1px 0}
  .pr-empty{font-size:13px;color:var(--muted);padding:24px 0;text-align:center}
  .table-toolbar input{width:240px;height:36px;padding:0 12px;font-size:13px;color:var(--text);
    border:1px solid var(--border);border-radius:9px;outline:none;transition:border .15s;background:#fff}
  .table-toolbar input:focus{border-color:var(--accent)}
  .table-toolbar select{width:180px;height:36px;padding:0 10px;font-size:13px;color:var(--text);border:1px solid var(--border);border-radius:8px;background:#fff;outline:none}
  .table-toolbar select:focus{border-color:var(--accent)}

  /* 表头列筛选（店铺/站点，多选）：漏斗图标 + 浮层多选面板 */
  .th-f{display:inline-block;width:12px;height:12px;margin-left:5px;cursor:pointer;vertical-align:-1px;fill:#94a3b8}
  .th-f:hover{fill:var(--accent)}
  .th-f.on{fill:var(--accent)}
  .col-filter-pop{position:fixed;z-index:60;background:#fff;border:1px solid var(--border);border-radius:10px;
    box-shadow:0 10px 30px rgba(15,23,42,.15);padding:10px;min-width:190px;max-height:340px;overflow:auto;display:none}
  .col-filter-pop.show{display:block}
  .col-filter-pop .cf-title{font-size:12px;color:var(--muted);margin-bottom:6px}
  .col-filter-pop label{display:flex;align-items:center;gap:8px;font-size:13px;padding:5px 4px;border-radius:6px;cursor:pointer;color:#334155}
  .col-filter-pop label:hover{background:#f1f5f9}
  .col-filter-pop .cf-empty{font-size:12px;color:var(--muted);padding:6px 2px}
  /* 单元格批量按钮 + 批量菜单（变种信息/收益/图片区共用） */
  .batch-mini{flex-shrink:0;padding:4px 8px;font-size:11px;border:1px solid var(--border);background:#fff;border-radius:6px;color:#475569;cursor:pointer;white-space:nowrap}
  .batch-mini:hover{border-color:var(--accent);color:var(--accent);background:#eceefe}
  .batch-mini.batch-icon{padding:5px 7px;line-height:0;display:inline-flex;align-items:center}
  .batch-mini.batch-icon svg{display:block}
  /* 表头「批量操作」列头内的下拉小按钮 */
  .th-batch{white-space:nowrap}
  .th-batch .batch-mini{margin-left:4px;padding:1px 7px;font-size:11px;vertical-align:1px}
  /* 批量操作条（默认常显：未勾选时按钮置灰，勾选后自动激活） */
  .batch-bar{display:flex;align-items:center;gap:8px;font-size:12.5px;color:#475569;background:#f8fafc;
    border:1px solid var(--border);border-radius:8px;padding:6px 10px;margin-bottom:8px}
  .batch-bar .bb-count{font-weight:600;color:var(--accent)}
  .batch-bar button{font-size:12px;padding:4px 12px;border:1px solid var(--border);background:#fff;border-radius:7px;cursor:pointer;color:#334155;transition:opacity .15s}
  .batch-bar button:hover:not(:disabled){color:var(--accent);border-color:var(--accent);background:#eceefe}
  .batch-bar button:disabled{opacity:.4;cursor:not-allowed}
  .batch-bar .bb-hint{font-size:11.5px;color:var(--muted);margin-left:auto}
  .cell-b{display:flex;align-items:center;gap:4px}
  .cell-b .u-wrap{flex:1}
  #batchActionPop{position:fixed;z-index:70;display:none;background:#fff;border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px rgba(15,23,42,.14);padding:4px;min-width:150px}
  #batchActionPop.show{display:block}
  #batchActionPop .bap-item{padding:7px 10px;font-size:13px;color:#334155;border-radius:6px;cursor:pointer;white-space:nowrap}
  #batchActionPop .bap-item:hover{background:#f1f5f9;color:var(--accent)}
  .cf-actions{display:flex;gap:8px;margin-top:8px;border-top:1px solid var(--border);padding-top:8px}
  .cf-actions button{flex:1;font-size:12px;padding:5px 0;border:1px solid var(--border);background:#fff;border-radius:7px;cursor:pointer;color:#475569}
  .cf-actions button:hover{color:var(--accent);border-color:var(--accent)}

  /* 批量操作下拉按钮（勾选后出现） */
  .batch-wrap{position:relative;display:inline-block}
  .batch-menu{position:absolute;right:0;top:calc(100% + 6px);background:#fff;border:1px solid var(--border);
    border-radius:9px;box-shadow:0 8px 24px rgba(15,23,42,.12);min-width:132px;z-index:40;display:none;padding:4px}
  .batch-menu.show{display:block}
  .batch-menu button{display:block;width:100%;text-align:left;padding:8px 12px;font-size:13px;background:none;
    border:none;border-radius:6px;cursor:pointer;color:#334155;white-space:nowrap}
  .batch-menu button:hover{background:#f1f5f9;color:var(--accent)}
  /* 批量导出 / 导入修改弹窗 */
  .exp-sec{border:1px solid var(--border);border-radius:9px;padding:8px 12px;margin-bottom:8px}
  .exp-sec-t{font-size:12.5px;font-weight:700;color:#334155;margin-bottom:6px}
  .exp-opt{display:flex;align-items:center;gap:7px;font-size:13px;color:#334155;padding:3px 0;cursor:pointer}
  .exp-opt input[type=checkbox]{width:15px;height:15px;accent-color:var(--accent);cursor:pointer}
  .exp-note{font-size:12px;color:var(--muted);line-height:1.55;margin-top:6px}
  .imp-table{width:100%;border-collapse:collapse;font-size:12.5px}
  .imp-table th{position:sticky;top:0;background:#f8fafc;color:#475569;font-weight:600;text-align:left;padding:7px 10px;border-bottom:1px solid var(--border);white-space:nowrap}
  .imp-table td{padding:7px 10px;border-bottom:1px solid var(--border);color:#334155;vertical-align:top}
  .imp-table tr:last-child td{border-bottom:none}
  /* 数据列表页（同步/产品/采集箱/已发布/发布失败）：页面占满视口剩余高度，
     卡片弹性撑满、滚动区自适应、分页条永远钉在卡片底部（单条数据时也在最下方，与表头一样固定） */
  /* 注意：display:flex 只能写在 .active 态——若写在 .page-flex 基础规则里，
     会因同优先级但靠后而压过 .page{display:none}，导致 5 个表格页全部常显、导航切换失灵 */
  .page-flex{flex-direction:column;height:calc(100vh - 56px);min-height:0}
  .page-flex.active{display:flex;flex-direction:column}
  .page-flex .table-card{flex:1;display:flex;flex-direction:column;min-height:0}
  .table-scroll{flex:1;min-height:0;overflow-y:auto;overflow-x:auto}
  .table-card{background:var(--card);border-radius:var(--radius);
    box-shadow:0 2px 10px rgba(15,23,42,.04);overflow:clip}
  .data-table{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
  .data-table th{text-align:left;padding:12px 14px;background:#f8fafc;color:var(--muted);
    font-weight:500;border-bottom:1px solid var(--border);white-space:nowrap;
    position:sticky;top:0;z-index:10;box-shadow:inset 0 -1px 0 var(--border)}
  .data-table td{padding:12px 14px;border-bottom:1px solid var(--border);color:var(--text);vertical-align:middle}
  .data-table tr:last-child td{border-bottom:none}
  .data-table .center{text-align:center}
  .table-empty{padding:44px 0;text-align:center;color:var(--muted);font-size:13px}
  /* ===== 列表页一屏铺满（产品/采集箱/同步/已发布/发布失败）：
     table-layout:fixed + 列宽受控 + 长文省略，宽屏一屏展示无横滚。
     窄窗兜底：表格 min-width 保底 + 出横向滚动条（此前 overflow-x:hidden 会把弹性标题列压到 0 宽消失）===== */
  #page-prod-list .table-scroll, #page-prod-collect .table-scroll, #page-sync .table-scroll,
  #page-prod-published .table-scroll, #page-prod-failed .table-scroll { overflow-x: auto; }
  #page-prod-list .data-table, #page-prod-collect .data-table, #page-sync .data-table,
  #page-prod-published .data-table, #page-prod-failed .data-table { table-layout: fixed; width: 100%; min-width: 920px; }
  #page-prod-list .data-table th, #page-prod-collect .data-table th, #page-sync .data-table th,
  #page-prod-published .data-table th, #page-prod-failed .data-table th { padding: 11px 8px; }
  #page-prod-list .data-table td, #page-prod-collect .data-table td, #page-sync .data-table td,
  #page-prod-published .data-table td, #page-prod-failed .data-table td { padding: 10px 8px; overflow: hidden; }
  /* 产品/采集箱 12 列宽度分配：产品名称与变体属性为弹性列，其余定宽（同构页共用，定宽总和收紧给弹性列留空间） */
  #page-prod-list .data-table th:nth-child(1), #page-prod-collect .data-table th:nth-child(1) { width: 32px; }
  #page-prod-list .data-table th:nth-child(2), #page-prod-collect .data-table th:nth-child(2) { width: 56px; }
  #page-prod-list .data-table th:nth-child(4), #page-prod-collect .data-table th:nth-child(4) { width: 96px; }
  #page-prod-list .data-table th:nth-child(5), #page-prod-collect .data-table th:nth-child(5) { width: 84px; }
  #page-prod-list .data-table th:nth-child(6), #page-prod-collect .data-table th:nth-child(6) { width: 88px; }
  #page-prod-list .data-table th:nth-child(7), #page-prod-collect .data-table th:nth-child(7) { width: 74px; }
  #page-prod-list .data-table th:nth-child(9), #page-prod-collect .data-table th:nth-child(9) { width: 104px; }
  #page-prod-list .data-table th:nth-child(10), #page-prod-collect .data-table th:nth-child(10) { width: 50px; }
  #page-prod-list .data-table th:nth-child(11), #page-prod-collect .data-table th:nth-child(11) { width: 84px; }
  #page-prod-list .data-table th:nth-child(12), #page-prod-collect .data-table th:nth-child(12) { width: 88px; }
  /* 固定布局下长文本随列宽自适应（取消原 187/135px 上限，由列宽+省略号控制） */
  #page-prod-list .prod-name, #page-prod-collect .prod-name,
  #page-prod-list .prod-cat, #page-prod-collect .prod-cat,
  #page-prod-list .prod-link, #page-prod-collect .prod-link { max-width: 100%; }
  #page-prod-list .sku-tag, #page-prod-collect .sku-tag { max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
  /* 发布失败页 10 列宽度分配（失败原因不占列，显示在行下方展开条）：名称与变体属性为弹性列 */
  #page-prod-failed .data-table th:nth-child(3) { width: 110px; }
  #page-prod-failed .data-table th:nth-child(4) { width: 88px; }
  #page-prod-failed .data-table th:nth-child(5) { width: 92px; }
  #page-prod-failed .data-table th:nth-child(7) { width: 104px; }
  #page-prod-failed .data-table th:nth-child(8) { width: 56px; }
  #page-prod-failed .data-table th:nth-child(9) { width: 96px; }
  #page-prod-failed .data-table th:nth-child(10) { width: 90px; }
  #page-prod-failed .prod-name, #page-prod-failed .prod-cat { max-width: 100%; }
  /* 失败原因行下方展开条 */
  .err-subrow td { background: #fffafa; border-top: 1px dashed #fecaca; padding: 7px 12px 8px; }
  .err-sub-label { display: inline-block; font-size: 11px; font-weight: 600; color: #b91c1c;
    background: #fee2e2; border-radius: 5px; padding: 2px 8px; margin-right: 10px; vertical-align: middle; }
  .err-subrow .err-line { display: inline-block; vertical-align: middle; max-width: 330px; margin: 2px 10px 2px 0; }

  /* ---------- 类目畅销榜 + 产品趋势面板（2026-09-06） ---------- */
  .mkt-filters{display:flex;align-items:center;gap:14px;flex-wrap:wrap;background:var(--card);
    border:1px solid var(--border);border-radius:12px;padding:10px 16px;margin:0 0 12px}
  .mkt-switch{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--text);cursor:pointer;user-select:none}
  .mkt-switch input{display:none}
  .mkt-switch .tk{width:34px;height:19px;border-radius:999px;background:#d7dbe8;position:relative;transition:background .15s;flex-shrink:0}
  .mkt-switch .tk::after{content:"";position:absolute;top:2px;left:2px;width:15px;height:15px;border-radius:50%;
    background:#fff;transition:left .15s;box-shadow:0 1px 3px rgba(0,0,0,.18)}
  .mkt-switch input:checked + .tk{background:var(--accent)}
  .mkt-switch input:checked + .tk::after{left:17px}
  .mkt-divider{width:1px;height:22px;background:var(--border)}
  .mkt-rank{font-weight:700;font-size:14px}
  .mkt-delta{display:block;font-size:10.5px;font-weight:600;margin-top:1px}
  .mkt-delta.up{color:var(--err)} .mkt-delta.down{color:var(--ok)} .mkt-delta.new{color:var(--accent)} .mkt-delta.flat{color:#94a3b8;font-weight:400}
  .mkt-type{display:inline-block;font-size:10.5px;border-radius:6px;padding:2px 7px;white-space:nowrap}
  .mkt-type.PRODUCT{background:#eff6ff;color:#1d4ed8;border:1px solid #bfdbfe}
  .mkt-type.USER_PRODUCT{background:#f0fdf4;color:#15803d;border:1px solid #bbf7d0}
  .mkt-type.ITEM{background:#f8fafc;color:#64748b;border:1px solid var(--border)}
  .mkt-brand{display:inline-block;font-size:10.5px;border-radius:6px;padding:2px 7px;background:#fff7ed;color:#c2410c;border:1px solid #fed7aa}
  .mkt-white{display:inline-block;font-size:10.5px;border-radius:6px;padding:2px 7px;background:#f8fafc;color:#64748b;border:1px solid var(--border)}
  .mkt-row-hide td{opacity:.38}
  .mkt-why{color:#b91c1c;opacity:1;font-size:11px}
  .mkt-pic{width:40px;height:40px;border-radius:8px;object-fit:cover;border:1px solid var(--border);background:#eef1f8}
  .mkt-voice{display:flex;gap:16px;background:var(--card);border:1px solid var(--border);border-radius:var(--radius);
    padding:14px 18px;margin-bottom:12px;flex-wrap:wrap}
  .mkt-voice .score{font-size:30px;font-weight:700;line-height:1.1}
  .mkt-voice .score small{font-size:12px;color:var(--muted);font-weight:400}
  .mkt-stars{color:#f59e0b;font-size:13px;letter-spacing:1px}
  .mkt-stars .off{color:#e2e6ef}
  .mkt-chip{display:inline-block;border:1px solid var(--border);border-radius:999px;padding:3px 11px;
    font-size:12px;margin:2px 4px 2px 0;background:#fff;color:#334155}
  .mkt-chip.good{border-color:#bbf7d0;background:#f0fdf4;color:#15803d}
  .mkt-chip.bad{border-color:#fecaca;background:#fef2f2;color:#b91c1c}
  .mkt-ai-tag{font-size:10.5px;color:var(--accent);background:#eceefe;border-radius:6px;padding:2px 7px;margin-left:4px}
  .mkt-seg{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden}
  .mkt-seg button{height:26px;padding:0 12px;border:none;background:#fff;color:var(--muted);font-size:11.5px;cursor:pointer}
  .mkt-seg button.on{background:#eceefe;color:var(--accent);font-weight:500}
  .mkt-rv{border-bottom:1px solid var(--border);padding:11px 2px}
  .mkt-rv:last-child{border-bottom:none}
  .mkt-rv .es{font-size:13px;line-height:1.55}
  .mkt-rv .zh{font-size:12.5px;color:#1d4ed8;background:#eff6ff;border-left:3px solid #bfdbfe;
    border-radius:0 8px 8px 0;padding:6px 10px;margin-top:6px;line-height:1.55}
  .mkt-rv .who{font-size:11.5px;color:var(--muted)}
  .mkt-bl-row{display:flex;align-items:center;gap:10px;padding:9px 2px;border-bottom:1px dashed var(--border);font-size:13px}
  .mkt-bl-row:last-child{border-bottom:none}
  .mkt-bl-row .n{flex:1}
  .mkt-kpi{flex:1;min-width:150px;background:#f8fafc;border-radius:12px;padding:12px 14px}
  .mkt-kpi .l{font-size:11.5px;color:var(--muted);margin-bottom:5px}
  .mkt-kpi .v{font-size:21px;font-weight:700;line-height:1.1}
  .mkt-kpi .d{font-size:11.5px;margin-top:4px;font-weight:600}
  .mkt-kpi .d.up{color:var(--err)} .mkt-kpi .d.down{color:var(--ok)} .mkt-kpi .d.flat{color:#94a3b8;font-weight:400}
  .mkt-rank-stop{display:flex;flex-direction:column;align-items:center;min-width:74px}
  .mkt-rank-stop .pos{font-size:13px;font-weight:700;color:var(--accent)}
  .mkt-rank-stop .date{font-size:10.5px;color:var(--muted);margin-top:3px}
  .mkt-rank-arrow{color:#cbd5e1;font-size:13px;margin:15px 2px 0}
  .mkt-rank-arrow.up{color:var(--err)} .mkt-rank-arrow.down{color:var(--ok)}
  .modal-x{border:none;background:none;font-size:16px;color:var(--muted);cursor:pointer;padding:4px 8px}
  /* 失败原因「去修复」直达链接 + 编辑页目标区域闪烁高亮 */
  .err-fix-link { color: #2563eb; font-weight: 600; cursor: pointer; margin-left: 6px; text-decoration: underline; white-space: nowrap; }
  .err-fix-link:hover { color: #1d4ed8; }
  .form-section.region-flash { animation: regionFlash 2.4s ease; }
  @keyframes regionFlash { 0%, 55% { outline: 2px solid #ef4444; outline-offset: 3px; } 100% { outline: 2px solid transparent; outline-offset: 3px; } }
  /* 发布/重新发布等待提示条（限流自动退避期间显示） */
  .pub-wait-tip { margin-top: 10px; padding: 10px 12px; border: 1px solid #f0c9a0; background: #fdf6ec;
    border-radius: 8px; color: #9a5b00; font-size: 13px; text-align: left; line-height: 1.7; }
  /* 自定义变种选项 pill 原地编辑输入框 */
  .vg-pill-edit { border: 1.5px solid var(--accent); border-radius: 999px; background: #fff;
    font-size: 12px; line-height: 1; padding: 6px 14px; width: 110px; outline: none; }
  /* 表格分页条：总数 + 每页条数 + 页码 + 跳转（置于 .table-card 内、表格下方，整体右对齐，空数据时隐藏） */
  .table-pager{display:flex;align-items:center;justify-content:flex-end;gap:6px;flex-wrap:wrap;padding:5px 7px;
    border-top:1px solid var(--border);font-size:12px;color:var(--muted)}
  .table-pager:empty{display:none}
  .table-pager button{min-width:24px;height:22px;padding:0 8px;font-size:12px;color:var(--text);
    border:1px solid var(--border);border-radius:6px;background:#fff;cursor:pointer}
  .table-pager button:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}
  .table-pager button:disabled{opacity:.4;cursor:not-allowed}
  .table-pager button.pg-cur{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:500}
  .table-pager select{height:22px;font-size:12px;padding:0 6px;border:1px solid var(--border);border-radius:6px;background:#fff;color:var(--text);outline:none}
  .table-pager input{width:56px;height:22px;font-size:12px;padding:0 6px;border:1px solid var(--border);border-radius:6px;outline:none}
  .table-pager input:focus{border-color:var(--accent)}
  .table-pager .pg-gap{padding:0 2px}

  /* ================= 订单管理页 ================= */
  .badge.warn{background:none;color:#b45309}
  .badge.info{background:none;color:var(--accent);font-weight:600}
  .badge.gray{background:none;color:var(--muted)}
  .ord-stat-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;margin:14px 0}
  .ord-stat{background:var(--card);border-radius:var(--radius);padding:14px 16px;cursor:pointer;transition:box-shadow .15s}
  .ord-stat:hover{box-shadow:0 2px 12px rgba(15,23,42,.08)}
  .ord-stat .s-num{font-size:22px;font-weight:700;margin-top:3px}
  .ord-stat .s-label{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:6px}

  /* ---------- 工作台首页 ---------- */
  .hm-store{display:flex;align-items:center;justify-content:space-between;padding:11px 6px;border-bottom:1px solid var(--border);cursor:pointer;border-radius:8px}
  .hm-store:last-child{border-bottom:none}
  .hm-store:hover{background:#f4f6fd}
  .hm-quick{display:flex;gap:10px;flex-wrap:wrap;margin-top:2px}
  .ord-dot{width:8px;height:8px;border-radius:50%;display:inline-block}
  .ord-dash{background:var(--card);border-radius:var(--radius);padding:14px 20px 8px;margin-bottom:14px}
  .ord-dash-head{display:flex;align-items:center;gap:12px;margin-bottom:4px;flex-wrap:wrap}
  .ord-dash-title{font-size:14.5px;font-weight:700}
  .ord-chart-sum{font-size:12px;color:var(--muted)}
  .ord-dash-controls{margin-left:auto;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
  .ord-seg{display:flex;background:#f1f5f9;border-radius:8px;padding:3px;gap:2px}
  .ord-seg button{border:none;background:transparent;padding:4px 11px;font-size:12px;border-radius:6px;cursor:pointer;color:var(--muted)}
  .ord-seg button.on{background:#fff;color:var(--accent);font-weight:600;box-shadow:0 1px 4px rgba(15,23,42,.1)}
  .ord-seg-lab{font-size:11.5px;color:var(--muted)}
  .ord-filter-panel{padding:9px 16px;margin-bottom:14px}
  /* 订单表：列多，收紧内边距保证 10 列均匀铺满卡片不横向溢出 */
  #page-orders .data-table th{padding:11px 9px}
  #page-orders .data-table td{padding:11px 9px}
  #page-orders .prod-cell .t{max-width:168px}
  #page-orders .match-chip{max-width:225px}
  .ord-filter-bar{display:flex;gap:9px;flex-wrap:wrap;align-items:center}
  .ord-filter-bar select,.ord-filter-bar input[type=text]{padding:6px 10px;font-size:12.5px}
  .ord-filter-bar input[type=date]{padding:5px 8px;font-size:12.5px}
  .ord-filter-bar .btn{padding:6px 14px;font-size:12.5px}
  .ord-muted{color:var(--muted);font-size:12px}
  .ord-oid{font-family:ui-monospace,monospace;font-size:12px;color:var(--accent)}
  .prod-cell{display:flex;gap:9px;align-items:center}
  .prod-cell img{width:38px;height:38px;border-radius:8px;object-fit:cover;background:#eceefe}
  .prod-cell .t{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500}
  .prod-cell .v{color:var(--muted);font-size:11px;margin-top:2px}
  .ord-ship{font-size:10.5px;padding:2px 8px;border-radius:5px;display:inline-block;margin-top:3px}
  .ord-ship.ff{background:#f1f5f9;color:#475569}
  .ord-ship.mc{background:#e1f5ee;color:#0f6e56}
  .ord-ship.cu{background:#fff7ed;color:#c2410c}
  /* 采购匹配 chip */
  .match-chip{display:flex;gap:8px;align-items:center;border:1px solid var(--border);border-radius:10px;padding:6px 9px;background:#f8fafc;max-width:250px}
  .match-chip img{width:34px;height:34px;border-radius:7px;object-fit:cover;background:#eceefe;flex-shrink:0}
  .match-info{flex:1;min-width:0}
  .match-info .m-name{font-size:11.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:5px}
  .match-info .m-sku{font-size:10px;color:var(--muted);font-family:ui-monospace,monospace;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .match-info .m-link{font-size:10px;margin-top:2px;display:flex;gap:5px;align-items:center;white-space:nowrap;overflow:hidden}
  .match-info .m-link a{color:var(--accent);text-decoration:none;overflow:hidden;text-overflow:ellipsis}
  .src-tag{font-size:9.5px;background:#e1f5ee;color:#0f6e56;border-radius:4px;padding:0 5px;flex-shrink:0}
  .match-no{font-size:11px;color:var(--err);background:#fee2e2;border-radius:999px;padding:2px 9px;width:max-content}
  /* 订单详情抽屉 */
  .ord-mask{position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:100;display:none}
  .ord-mask.show{display:block}
  .ord-drawer{position:fixed;top:0;right:-640px;width:620px;max-width:94vw;bottom:0;background:var(--card);
    z-index:101;transition:right .25s;box-shadow:-8px 0 30px rgba(15,23,42,.15);display:flex;flex-direction:column}
  .ord-drawer.show{right:0}
  .ord-drawer-head{padding:16px 22px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:12px}
  .ord-drawer-head h3{font-size:15.5px}
  .ord-close{margin-left:auto;background:none;border:none;font-size:20px;cursor:pointer;color:var(--muted)}
  .ord-drawer-body{flex:1;overflow-y:auto;padding:16px 22px}
  .od-sec{margin-bottom:18px}
  .od-sec h4{font-size:12.5px;color:var(--muted);font-weight:600;margin-bottom:9px;letter-spacing:.3px}
  .od-kv{display:grid;grid-template-columns:105px 1fr;gap:6px 12px;font-size:12.5px}
  .od-kv b{color:var(--muted);font-weight:500}
  .od-item{display:flex;gap:11px;align-items:flex-start;padding:9px;border:1px solid var(--border);border-radius:10px;margin-bottom:7px}
  .od-item img{width:50px;height:50px;border-radius:8px;object-fit:cover;background:#eceefe}
  .od-total{display:flex;justify-content:space-between;padding:8px 0;border-top:1px dashed var(--border);margin-top:7px}
  .od-total .money{font-size:15px;color:var(--accent);font-weight:600}
  .ord-drawer-foot{padding:13px 22px;border-top:1px solid var(--border);display:flex;gap:10px}
  /* 消息中心问答卡 */
  .qa-card{background:var(--card);border-radius:var(--radius);padding:15px 20px;margin-bottom:12px}  .qa-head{display:flex;align-items:center;gap:10px;margin-bottom:8px}
  /* 从站内提醒点进来时的高亮定位（msgFocusQuestion 加 .on） */
  .qa-card.on{box-shadow:0 0 0 2px var(--accent),0 6px 16px rgba(79,93,240,.16)}
  .qa-prod{font-size:12.5px;color:var(--muted);display:flex;align-items:center;gap:8px;min-width:0}
  .qa-prod img{width:26px;height:26px;border-radius:6px;object-fit:cover;background:#eceefe}
  .qa-body{font-size:13.5px;background:#f8fafc;border:1px solid var(--border);border-radius:10px;padding:10px 14px}
  .qa-body .q-who{font-size:11.5px;color:var(--muted);margin-bottom:3px}
  .qa-ans{margin-top:8px;padding-left:13px;border-left:3px solid #dcfce7;font-size:13px}
  .qa-ans .a-who{font-size:11.5px;color:var(--ok);margin-bottom:2px}
  .qa-foot{display:flex;gap:8px;margin-top:9px;align-items:center}
  .qa-time{font-size:11.5px;color:var(--muted)}
  /* 消息中心 Tab + 售后消息双栏 */
  .msg-tabs{display:flex;gap:6px;margin-bottom:14px}
  .msg-tabs button{border:1px solid var(--border);background:#fff;color:var(--muted);padding:7px 18px;font-size:13px;border-radius:9px;cursor:pointer}
  .msg-tabs button.on{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
  .msg-pack-layout{display:grid;grid-template-columns:330px 1fr;gap:14px;align-items:stretch}
  .msg-conv-list{display:flex;flex-direction:column;gap:9px;max-height:calc(100vh - 230px);overflow-y:auto;padding-right:2px}
  .msg-conv{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:11px 13px;cursor:pointer;display:flex;gap:10px;transition:border-color .12s}
  .msg-conv:hover{border-color:var(--accent)}
  .msg-conv.on{border-color:var(--accent);background:#f5f6ff}
  .msg-conv img{width:40px;height:40px;border-radius:8px;object-fit:cover;background:#eceefe;flex-shrink:0}
  .msg-conv .c-info{flex:1;min-width:0}
  .msg-conv .c-title{font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .msg-conv .c-sub{font-size:11px;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .msg-conv .c-unread{background:var(--err);color:#fff;font-size:10px;border-radius:999px;min-width:17px;height:17px;display:flex;align-items:center;justify-content:center;padding:0 5px;flex-shrink:0;align-self:center}
  /* 最近买家来信标记：会话列表现在按「最后说话时间」排序，标出来才看得懂为什么它在前面 */
  .msg-conv .c-lastmsg{color:var(--accent);font-weight:600}
  .msg-chat{background:var(--card);border-radius:var(--radius);display:flex;flex-direction:column;max-height:calc(100vh - 230px);min-height:420px}
  .msg-chat-head{padding:12px 18px;border-bottom:1px solid var(--border);display:flex;gap:10px;align-items:center;font-size:13px}
  .msg-chat-body{flex:1;overflow-y:auto;padding:16px 18px;display:flex;flex-direction:column;gap:10px}
  .msg-bub{max-width:72%;padding:9px 13px;border-radius:12px;font-size:13px;line-height:1.5;word-break:break-word}
  .msg-bub .b-meta{font-size:10.5px;color:var(--muted);margin-bottom:2px}
  .msg-bub.buyer{align-self:flex-start;background:#f1f5f9;border-bottom-left-radius:4px}
  .msg-bub.seller{align-self:flex-end;background:#eceefe;border-bottom-right-radius:4px}
  .msg-bub .b-att{font-size:11px;color:var(--accent);margin-top:4px}
  .msg-bub .b-mod{font-size:10.5px;color:var(--err);margin-top:3px}
  /* 官方自动译文（买家西语→英语）：整块浅底 + 左侧细线，和原文区分，避免误当成买家原话 */
  .msg-bub .b-tr{margin-top:6px;padding:5px 8px;border-left:2px solid var(--border);background:rgba(0,0,0,.035);border-radius:0 6px 6px 0;font-size:12px;color:var(--muted);line-height:1.5}
  .msg-chat-foot{border-top:1px solid var(--border);padding:11px 14px}
  .msg-chat-foot textarea{width:100%;box-sizing:border-box;height:64px;resize:none;border:1px solid var(--border);border-radius:9px;padding:8px 10px;font-size:13px;font-family:inherit;outline:none}
  .msg-chat-foot textarea:focus{border-color:var(--accent)}
  .msg-foot-row{display:flex;gap:8px;margin-top:8px;align-items:center}
  .msg-char{font-size:11px;color:var(--muted);margin-left:auto}
  .msg-guide{padding:6px 18px 14px}
  .msg-guide-tip{font-size:12px;color:#b45309;background:#fef3c7;border-radius:8px;padding:8px 12px;margin-bottom:9px}
  .msg-guide button{margin:0 6px 6px 0}

  .prod-thumb{width:44px;height:44px;border-radius:8px;background:#f1f5f9;
    display:flex;align-items:center;justify-content:center;color:#cbd5e1;font-size:16px;overflow:hidden}
  .prod-thumb img{width:100%;height:100%;object-fit:cover}
  .prod-name{color:var(--text);font-weight:500;max-width:187px;overflow:hidden;
    text-overflow:ellipsis;white-space:nowrap}
  .sku-tag{display:inline-block;background:#f1f5f9;border:1px solid var(--border);
    border-radius:6px;padding:2px 8px;font-size:12px;color:#334155;margin:1px 4px 1px 0}
  /* 官方商品编号小标签（已发布页/官方状态弹窗）：点击复制，用于到美客多官方侧核对 */
  .oid-chip{display:inline-block;background:#eef2ff;border:1px solid #c7d2fe;border-radius:6px;
    padding:1px 6px;font-size:11px;color:#4338ca;margin:1px 0 1px 5px;cursor:pointer;white-space:nowrap;
    font-family:ui-monospace,Menlo,Consolas,monospace}
  .oid-chip:hover{background:#e0e7ff}
  .oid-note{background:#f8fafc;border:1px solid var(--border);border-left:3px solid #6366f1;
    border-radius:8px;padding:8px 10px;font-size:12px;color:#475569;line-height:1.7;margin-bottom:8px}
  /* 违规 / 待整改面板表格：编号、处置、链接等短列不换行（类目/ERP 列允许换行） */
  #modBody table td,#modBody table th{white-space:nowrap}
  #modBody table td:nth-child(5),#modBody table td:nth-child(6){white-space:normal}
  #modBody table td a{white-space:nowrap}
  .prod-thumb{width:48px;height:48px;object-fit:cover;border-radius:8px;border:1px solid var(--border);background:#f8fafc;display:block}
  .empty-thumb{display:flex;align-items:center;justify-content:center;color:#cbd5e1;font-size:14px}
  /* 产品名称列：原 280px 缩短三分之一=187px；悬停 title 显示完整名称，双击进入编辑（行渲染处绑定） */
  .prod-name{font-weight:500;color:var(--text);max-width:187px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .prod-cat{font-size:11px;color:#94a3b8;margin-top:2px;max-width:187px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .prod-link{font-size:12px;color:#4f5df0;text-decoration:none;display:inline-block;max-width:135px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}
  .prod-link:hover{text-decoration:underline}
  /* 列表操作按钮：竖排（编辑/发布/删除） */
  .ops-col{display:flex;flex-direction:column;gap:6px;align-items:stretch}
  .muted-cell{color:#cbd5e1}
  /* 重新编辑：发布成功的 UP 整行置灰锁定，仅失败的 UP 可编辑 */
  .locked-row td{background:#f6f8fa}
  .locked-row input,.locked-row select{background:#eef1f5;color:#94a3b8;pointer-events:none}
  .lock-tag{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:999px;
    background:#e2e8f0;color:#64748b;font-size:10px;line-height:16px;vertical-align:middle}
  .pub-opt.locked{cursor:not-allowed;opacity:.75}
  .pub-opt.locked .pub-tag{background:#e2e8f0;color:#64748b}
  /* 发布弹窗：店铺/站点选项；发过（used）置灰标记，选中（sel）高亮 */
  .pub-group-title{font-size:13px;font-weight:600;color:var(--text);margin:14px 0 8px}
  .pub-opt{display:flex;align-items:center;justify-content:space-between;gap:10px;
    border:1px solid var(--border);border-radius:9px;padding:10px 12px;margin-bottom:8px;
    cursor:pointer;font-size:13px;color:var(--text);transition:border .15s,background .15s;user-select:none}
  .pub-opt:hover{border-color:var(--accent)}
  .pub-opt.sel{border-color:var(--accent);background:#f5f3ff}
  .pub-opt.used{background:#f8fafc}
  .pub-opt.used>span:first-child{color:#94a3b8}
  .pub-sub{color:#94a3b8;font-size:11px;margin-left:6px}
  .pub-tag{flex-shrink:0;font-size:11px;border-radius:999px;padding:1px 9px;border:1px solid var(--border);color:#94a3b8;background:#fff}
  .pub-opt.used .pub-tag{color:#b45309;background:#fef3c7;border-color:#fde68a}
  /* 多站点编排：勾选顺序序号 + 上移/下移控件（顺序 = 发布顺序） */
  .pub-ord{flex-shrink:0;font-size:11px;border-radius:999px;padding:1px 9px;
    background:#ede9fe;color:#6d28d9;border:1px solid #ddd6fe;font-weight:600}
  .pub-ordctl{display:flex;align-items:center;gap:5px;flex-shrink:0}
  .pub-ordctl button{padding:1px 7px;font-size:11px;line-height:16px}
  /* .pub-stage / .pub-stage .lst 已随「站点位次说明框」一起删除（2026-09-15 第三版），不再需要样式 */
  /* 产品列表：变种竖排——属性 / 收益 / SKU / 库存 四列逐行对齐，等行高保证横向对齐；超 4 条折叠 */
  .v-line{height:22px;line-height:22px;font-size:12px;color:var(--text);
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  tr .v-line.v-more{display:none}
  tr.v-open .v-line.v-more{display:block}
  .v-toggle{display:inline-block;font-size:11px;color:var(--accent);cursor:pointer;
    user-select:none;line-height:20px;margin-top:2px}
  .v-toggle:hover{text-decoration:underline}
  /* 店铺/站点列：站点逐行 + 同店铺同色（店名列与站点行位对齐），超 4 行折叠；悬停 1s 弹窗看全部 */
  tr .v-line.ss-more{display:none}
  tr.ss-open .v-line.ss-more{display:block}
  #ssPop{position:fixed;z-index:9999;max-width:280px;background:#fff;border:1px solid var(--border,#e2e8f0);
    border-radius:8px;box-shadow:0 8px 24px rgba(15,23,42,.14);padding:10px 12px;font-size:12px;color:#0f172a;pointer-events:none}
  #ssPop .ss-row{display:flex;gap:6px;line-height:20px;align-items:flex-start}
  #ssPop .ss-bar{flex:none;width:3px;border-radius:2px;margin-top:3px;height:14px}
  #ssPop .ss-store{font-weight:600;white-space:nowrap}
  #ssPop .ss-sites{word-break:break-all}
  .vp-title{font-size:13px;font-weight:600;color:var(--text);margin:16px 0 8px}
  .var-group{border:1px solid var(--border);border-radius:12px;padding:16px 18px;margin-bottom:12px;background:#fbfcfe}
  .vg-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}
  .vg-head select{width:220px}
  .vg-vals{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:14px}
  .vg-pill{border:1px solid var(--border);background:#fff;border-radius:999px;padding:7px 18px;
    font-size:13px;color:var(--text);cursor:pointer;user-select:none;transition:all .12s;min-width:56px;text-align:center}
  .vg-pill:hover{border-color:var(--accent);color:var(--accent)}
  .vg-pill.sel{background:var(--accent);border-color:var(--accent);color:#fff}
  /* 重名选项值（2026-09-17）：译成英文**不再自动合并**，两个中文译成同一个英文时两条都留在
     列表里，由卖家自行删除。既然要「自行删」，就必须在页面上看得见——红虚线框 +「重复」角标。
     单击该 pill 只移除**它自己这一条**（按下标），另一条仍在。 */
  .vg-pill.dup{border-color:var(--err);border-style:dashed;background:#fdecec;color:var(--err)}
  .vg-pill.dup.sel{background:var(--err);border-color:var(--err);color:#fff}
  /* 假重复（2026-09-17）：中文原文**不同**、译名却撞车 ⇒ 翻译很可能丢信息（如「牛头」未译出）。
     用琥珀色与真重复的红区分开 —— 这个是「要你改」，红色的是「可以删」。 */
  .vg-pill.dup-fake{border-color:#e0a63c;background:#fff6e5;color:#a16207}
  .vg-pill.dup-fake.sel{background:#c98a1f;border-color:#c98a1f;color:#fff}
  .vg-pill .vg-dup-badge{font-style:normal;font-size:10.5px;line-height:1;margin-left:6px;
    padding:2px 5px;border-radius:3px;background:rgba(255,255,255,.32)}
  .vg-dup-warn{font-size:12px;color:var(--err);background:#fdecec;border:1px dashed #f3b4b4;
    border-radius:8px;padding:7px 10px;margin:0 0 4px;line-height:1.5}
  .vg-dup-warn-fake{color:#a16207;background:#fff6e5;border-color:#e7c489}
  .vg-custom{display:flex;gap:10px;align-items:center;padding-top:12px;border-top:1px dashed var(--border)}
  .vg-custom input{flex:1;max-width:320px}
  .attr-group-title{font-size:13px;font-weight:600;color:var(--text);margin:6px 0 10px;
    padding-left:8px;border-left:3px solid var(--accent)}
  .attr-var-note{font-size:12px;color:#94a3b8;background:#f8fafc;border:1px dashed var(--border);
    border-radius:8px;padding:8px 12px;margin-top:12px}
  .var-pic-thumb{width:40px;height:40px;object-fit:cover;border-radius:6px;border:1px solid var(--border);vertical-align:middle}
  .upload-mini{width:56px;height:56px;border:1px dashed #cbd5e1;border-radius:6px;display:flex;
    flex-direction:column;align-items:center;justify-content:center;font-size:11px;color:#94a3b8;
    cursor:pointer;text-align:center;background:#fff;line-height:1.3}
  .upload-mini:hover{border-color:var(--accent);color:var(--accent)}
  .var-pic-block{border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin-bottom:10px;background:#fff}
  .vpb-head{font-size:13px;font-weight:600;color:#334155;background:#f1f5f9;border-radius:6px;
    padding:6px 10px;margin-bottom:10px}
  .vpb-row{display:flex;align-items:center;gap:12px}
  .vpb-count{font-size:12px;color:#64748b}
  .vpb-thumbs{display:flex;flex-wrap:wrap;gap:10px;margin-top:10px}
  /* 图库勾选面板：变种图片多选（上限 12） */
  .vpb-gal{margin-top:10px;border:1px solid #e2e8f0;border-radius:8px;padding:6px 10px}
  .vpb-gal summary{font-size:12px;color:#4f5df0;cursor:pointer;user-select:none}
  .vpb-checks{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;max-height:190px;overflow:auto}
  .vpb-check{position:relative;display:inline-block;border:2px solid transparent;border-radius:6px;overflow:hidden;cursor:pointer}
  .vpb-check input{position:absolute;left:4px;top:4px;z-index:2;width:15px;height:15px;cursor:pointer}
  .vpb-check img{display:block;width:56px;height:56px;object-fit:cover}
  /* 图片尺寸徽章：右下角显示真实 W×H，>=500（官方门槛）绿 / <500 红 */
  .pic-dim{position:absolute;right:2px;bottom:2px;z-index:3;font-size:10px;line-height:1;padding:2px 3px;border-radius:3px;background:rgba(15,23,42,.72);color:#fff;font-variant-numeric:tabular-nums;pointer-events:none;white-space:nowrap}
  .pic-dim.ok{background:rgba(22,101,52,.88)}
  .pic-dim.bad{background:rgba(163,45,45,.92)}
  .vpb-check .pic-dim{font-size:8px;padding:1px 2px;right:1px;bottom:1px}
  .vpb-check:has(input:checked){border-color:#4f5df0}
  .vg-name{font-size:14px;font-weight:600;color:#0f172a;display:flex;align-items:center;gap:8px}

  /* 创建产品页 */
  .page-actions-top{display:flex;gap:10px;margin-bottom:14px}

  /* 撤销/重做计数提示（2026-10-02）：徽章化融入 page-actions-top 按钮排——
     inline-flex + 高度拉伸与按钮同轴线，圆角浅灰底与 btn-action 协调 */
  #edUndoTip{display:inline-flex;align-items:center;font-size:12px;color:#475569;background:#f1f5f9;border:1px solid var(--border);border-radius:8px;padding:0 12px;line-height:1;white-space:nowrap}
  .page-actions-bottom{display:flex;gap:10px;padding:16px 0 30px}
  /* 发布失败原因标注：官方反馈的区域红框 + 原因徽标（区域内修改后消失） */
  .form-section.err-mark{border:2px solid var(--err);box-shadow:0 0 0 3px rgba(220,38,38,.10),0 2px 10px rgba(15,23,42,.04)}
  .err-badge{background:#fef2f2;border:1px solid #fecaca;border-left:4px solid var(--err);border-radius:8px;
    padding:10px 14px;margin-bottom:14px;font-size:12px;color:#7f1d1d;line-height:1.7}
  .err-badge b{display:block;color:var(--err);font-size:13px;margin-bottom:2px}
  .err-badge .eb-attr{color:#b91c1c;font-weight:600}
  #pubErrBanner{display:none;background:#fef2f2;border:1px solid #fecaca;border-left:4px solid var(--err);
    border-radius:10px;padding:12px 16px;margin-bottom:16px;font-size:12px;color:#7f1d1d;line-height:1.8}
  #pubErrBanner b{color:var(--err);font-size:13px}
  /* 发布失败表格「失败原因」列 */
  .err-line{font-size:12px;color:#b91c1c;background:#fef2f2;border-radius:6px;padding:3px 8px;margin-bottom:4px;
    cursor:pointer;max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .err-line:hover{text-decoration:underline;background:#fee2e2}
  .form-section{background:var(--card);border-radius:var(--radius);padding:22px;
    box-shadow:0 2px 10px rgba(15,23,42,.04);margin-bottom:16px}
  .form-section h3{font-size:15px;font-weight:600;margin-bottom:4px}
  .form-section .sec-sub{font-size:12px;color:var(--muted);margin-bottom:16px}
  .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 18px}
  .form-item label{display:block;font-size:13px;color:#475569;margin-bottom:6px}
  .form-item label .req{color:var(--err);margin-left:2px}
  .form-item input,.form-item select,.form-item textarea{width:100%;border:1px solid var(--border);
    border-radius:9px;padding:9px 12px;font-size:13px;color:var(--text);outline:none;background:#fff;
    font-family:inherit;transition:border .15s}
  .form-item input:focus,.form-item select:focus,.form-item textarea:focus{border-color:var(--accent)}
  .form-item textarea{min-height:110px;resize:vertical}
  .form-item .hint{font-size:11px;color:#94a3b8;margin-top:5px;line-height:1.6}
  /* 标题长度超限提示（2026-09-16）：刻意**不用 .hint 类** —— 全局 hideHelpAll() 默认隐藏所有 .hint，
     只在悬停相邻 h3/label 时才显示；这里需要「超限即自动出现」，用了 .hint 会静默不显示。 */
  .title-len-hint{display:none;font-size:12px;margin-top:5px;line-height:1.6}
  .title-len-hint.warn{display:block;color:var(--err);font-weight:600}
  .full{grid-column:1/-1}
  .attr-placeholder{border:1px dashed var(--border);border-radius:9px;padding:16px;
    font-size:12px;color:var(--muted);line-height:1.8;background:#f8fafc}
  .var-table{width:100%;table-layout:fixed;border-collapse:collapse;font-size:12px}
  /* 全局隐藏数值输入框的上下箭头（spinner）：所有 type=number 生效 */
  input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
  input[type=number]{-moz-appearance:textfield;appearance:textfield}
  .var-table th{text-align:left;padding:8px 8px;background:#f8fafc;color:var(--muted);
    font-weight:500;border-bottom:1px solid var(--border);white-space:normal;word-break:break-all}
  .var-table td{padding:8px 8px;border-bottom:1px solid var(--border)}
  .var-table input,.var-table select{width:100%;min-width:90px;border:1px solid var(--border);
    border-radius:7px;padding:7px 9px;font-size:12px;color:var(--text);outline:none;background:#fff}
  /* u-wrap 单位组件在表格内：90px min-width 会把数字输入框挤成 0 宽（点不到），单位后缀固定自适应宽 */
  .var-table .u-wrap>input{width:auto;min-width:0}
  /* 单位输入框：输入框 + 单位后缀；单位可选时为折叠下拉 */
  .u-wrap{display:flex;align-items:stretch;width:100%}
  .u-wrap>input{flex:1;min-width:0;border-radius:7px 0 0 7px}
  .u-unit{flex-shrink:0;display:flex;align-items:center;padding:0 9px;border:1px solid var(--border);
    border-left:none;border-radius:0 7px 7px 0;background:#f1f5f9;font-size:11px;color:#64748b;
    white-space:nowrap;user-select:none}
  select.u-unit{cursor:pointer;padding:0 4px;color:var(--text)}
  /* 覆盖 .form-item select / .var-table select 的 width:100%（否则单位下拉撑满整行，数字输入框被挤成 0 宽） */
  .form-item select.u-unit,.var-table select.u-unit{width:auto;min-width:46px}
  .form-item .u-wrap>input{width:auto}
  .add-var{margin-top:12px}
  .back-link{display:inline-flex;align-items:center;gap:5px;font-size:13px;color:var(--muted);
    cursor:pointer;margin-bottom:10px}
  .back-link:hover{color:var(--accent)}
  .cat-dropdown{display:none;position:absolute;top:100%;left:0;right:0;z-index:20;background:#fff;
    border:1px solid var(--border);border-radius:9px;box-shadow:0 8px 24px rgba(15,23,42,.12);
    max-height:260px;overflow:auto;margin-top:4px}
  .cat-dropdown.show{display:block}
  .cat-option{padding:10px 14px;font-size:13px;cursor:pointer;line-height:1.5}
  .cat-option:hover{background:#f1f5f9}
  .cat-option .cid{color:#94a3b8;font-size:12px;margin-left:8px}
  .cat-option.none{color:#94a3b8;cursor:default}
  .cat-option.none:hover{background:none}
  /* 类目树浏览：面包屑 + 下钻箭头 */
  .cat-crumb{padding:8px 14px;border-bottom:1px solid var(--border);font-size:12px;display:flex;flex-wrap:wrap;gap:2px;background:#f8fafc;position:sticky;top:0}
  .cat-crumb-item{color:#2563eb;cursor:pointer;padding:1px 4px;border-radius:5px}
  .cat-crumb-item:hover{background:#eceefe}
  .cat-crumb-item.cur{color:var(--muted);cursor:default}
  .cat-crumb-item.cur:hover{background:none}
  .cat-crumb-sep{color:#cbd5e1;margin:0 2px}
  .cat-option .cat-arrow{float:right;color:#cbd5e1;font-weight:600}
  .cat-option .cat-path{display:flex;flex-wrap:wrap;gap:2px;align-items:center;font-size:13px;padding-right:70px}
  .cat-lv{padding:1px 4px;border-radius:5px}
  .cat-lv.hit{background:#eceefe;color:#1d4ed8;font-weight:700;box-shadow:inset 0 0 0 1px #c7d2fe}
  .cat-dom{color:#94a3b8;font-size:11px;margin-left:6px}
  .attr-id{color:#94a3b8;font-size:10px;margin-left:6px;font-family:ui-monospace,monospace}
  /* 产品属性区三列布局（窄屏降级两列/单列） */
  .attr-grid-3{grid-template-columns:repeat(3,1fr)}
  @media(max-width:1200px){.attr-grid-3{grid-template-columns:1fr 1fr}}
  @media(max-width:760px){.attr-grid-3{grid-template-columns:1fr}}
  .attr-empty{border:1px dashed var(--border);border-radius:9px;padding:16px;font-size:12px;
    color:var(--muted);background:#f8fafc}
  .attr-item .atag{display:inline-block;font-size:10px;color:#b45309;background:#fef3c7;
    border-radius:999px;padding:1px 7px;margin-left:6px;vertical-align:1px}
  .attr-item .atag.var{color:#1d4ed8;background:#dbeafe}
  .attr-item .atag.opt{color:#475569;background:#f1f5f9}
  .upload-grid{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:10px}
  .upload-thumb{width:92px;height:92px;border-radius:9px;overflow:hidden;position:relative;
    border:1px solid var(--border)}
  /* 图片处理入口按钮（编辑页图片池 + 数据中心卡片，悬停出现） */
  .ip-btn{position:absolute;left:50%;bottom:4px;transform:translateX(-50%);display:none;z-index:3;
    background:var(--accent);color:#fff;border:none;border-radius:5px;padding:2px 8px;font-size:11px;cursor:pointer;line-height:1.5}
  .upload-thumb:hover .ip-btn{display:block}
  .dc-item .ip-btn{bottom:auto;top:76px;left:50%}
  .dc-item:hover .ip-btn{display:block}
  .ip-tab{background:none;border:none;border-bottom:2px solid transparent;padding:8px 14px;font-size:13px;
    color:var(--muted);cursor:pointer}
  .ip-tab.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:500}
  .ip-ratio.active{border-color:var(--accent);color:var(--accent);background:rgba(99,102,241,.08)}
  .upload-thumb[draggable="true"]{cursor:grab}
  .upload-thumb[draggable="true"]:active{cursor:grabbing}
  .upload-thumb.drag-target{outline:2px dashed #6366f1;outline-offset:1px;opacity:.65}
  .upload-thumb img{width:100%;height:100%;object-fit:cover}
  .upload-thumb .rm{position:absolute;top:3px;right:3px;width:20px;height:20px;border:none;
    border-radius:50%;background:rgba(15,23,42,.6);color:#fff;font-size:11px;cursor:pointer;line-height:1}
  .upload-thumb .main-tag{position:absolute;left:0;bottom:0;right:0;font-size:10px;text-align:center;
    background:rgba(79,70,229,.85);color:#fff;padding:2px 0}
  /* 发布失败图片级标注：官方拒绝的具体图片红框 + 角标（2026-09-07） */
  .upload-thumb.pic-err{outline:2px solid #dc2626;outline-offset:-2px}
  .upload-thumb.pic-err img{filter:sepia(.15) saturate(1.1)}
  .pic-err-tag{position:absolute;left:0;top:0;right:0;font-size:10px;text-align:center;
    background:rgba(220,38,38,.9);color:#fff;padding:1px 0;pointer-events:none;z-index:3}
  label.vpb-check.pic-err{border-color:#dc2626}
  label.vpb-check.pic-err::after{content:'上传失败';position:absolute;left:0;top:0;right:0;font-size:9px;
    text-align:center;background:rgba(220,38,38,.9);color:#fff;padding:0;z-index:3;pointer-events:none}
  .upload-box{width:92px;height:92px;border:1px dashed #cbd5e1;border-radius:9px;display:flex;
    flex-direction:column;align-items:center;justify-content:center;font-size:11px;color:#94a3b8;
    cursor:pointer;text-align:center;background:#f8fafc;transition:border .15s}
  .upload-box:hover{border-color:var(--accent);color:var(--accent)}
  .size-table{width:100%;border-collapse:collapse;font-size:12px}
  .size-table th{text-align:left;padding:8px 10px;background:#f8fafc;color:var(--muted);
    font-weight:500;border-bottom:1px solid var(--border);white-space:nowrap}
  .size-table td{padding:6px 8px;border-bottom:1px solid var(--border)}
  .size-table input{width:100%;min-width:110px;border:1px solid var(--border);border-radius:7px;
    padding:6px 9px;font-size:12px;color:var(--text);outline:none;background:#fff}
  .size-table th.sc-miss{background:#fdecec;color:var(--err);border-bottom-color:var(--err)}
  .size-table input.sc-miss{border-color:var(--err);background:#fdf3f3;box-shadow:0 0 0 2px rgba(220,38,38,.16)}
  @media (max-width:1100px){
    #storeList{grid-template-columns:repeat(2,1fr)}
  }
  @media (max-width:760px){
    #storeList{grid-template-columns:1fr}
    #appView{flex-direction:column}
    aside{width:100%;flex-direction:row;align-items:center;padding:0 12px}
    .side-brand{padding:14px 10px} nav{display:flex;padding:8px 4px}
    .nav-item{margin-bottom:0;padding:9px 10px} .side-user{border-top:none;padding:8px}
    .btn-logout{width:auto} .nav-item .tag{display:none}
    .main{padding:20px 16px}
    .page-flex{height:calc(100vh - 40px)}
  }
  /* ---------- 顶栏消息通知铃铛（webhook 实时驱动 + 60s 轮询红点） ---------- */
  #notifBell{position:fixed;top:14px;right:18px;z-index:1200;width:38px;height:38px;border-radius:50%;
    background:var(--card);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;
    cursor:pointer;box-shadow:0 2px 8px rgba(15,23,42,.06);color:#5a6478}
  #notifBell:hover{border-color:var(--accent);color:var(--accent)}
  #notifBadge{position:absolute;top:-4px;right:-4px;background:var(--err);color:#fff;font-size:10px;
    min-width:16px;height:16px;border-radius:999px;display:none;align-items:center;justify-content:center;padding:0 4px;font-weight:600}
  #notifPanel{position:fixed;top:58px;right:18px;z-index:1200;width:330px;max-height:440px;background:var(--card);
    border:1px solid var(--border);border-radius:12px;box-shadow:0 8px 30px rgba(15,23,42,.14);display:none;flex-direction:column;overflow:hidden}
  #notifPanel.show{display:flex}
  .np-head{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;border-bottom:1px solid var(--border);font-weight:600;font-size:14px}
  .np-head button{border:none;background:none;color:var(--accent);font-size:12px;cursor:pointer}
  #notifList{overflow-y:auto;flex:1}
  .np-item{padding:10px 14px;border-bottom:1px solid var(--border);cursor:pointer}
  .np-item:last-child{border-bottom:none}
  .np-item:hover{background:#f6f7fd}
  .np-item.unread .np-title::before{content:'';display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--err);margin-right:6px;vertical-align:1px}
  .np-title{font-size:13px;font-weight:600}
  .np-body{font-size:12px;color:var(--muted);margin-top:2px;line-height:1.5}
  .np-time{font-size:11px;color:#9aa3b5;margin-top:3px}
  .np-foot{display:flex;align-items:center;gap:6px;padding:9px 14px;border-top:1px solid var(--border);font-size:12px;color:var(--muted);cursor:pointer}
  .np-empty{padding:28px;text-align:center;color:var(--muted);font-size:13px}
  /* 官方状态徽章（已发布页，2026-09-10） */
  .off-badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:500;line-height:1.4;cursor:default;white-space:nowrap}
  a.off-badge{cursor:pointer;text-decoration:none}
  .off-ok{background:#e7f4ef;color:#0f6e56;border:1px solid #bfe3d4}
  .off-bad{background:#fbecec;color:#a32d2d;border:1px solid #f2caca}
  .off-warn{background:#fdf4e3;color:#a3691d;border:1px solid #f0dcb0}
  .off-none{background:#f1f2f6;color:#8a93a6;border:1px solid #e2e6ef}
      .grp-row{background:#f8fafc;cursor:pointer}
      .grp-row:hover{background:#f1f5f9}
      .grp-name{font-weight:500;display:flex;align-items:center;gap:8px}
      .grp-arrow{display:inline-block;transition:transform .15s;font-size:11px;color:var(--muted)}
      .grp-row.open .grp-arrow{transform:rotate(90deg)}
      .grp-count{font-size:11px;color:var(--muted);font-weight:400;background:#e2e8f0;border-radius:10px;padding:1px 8px}
      tr.sync-var{display:none}
      tr.sync-var.open{display:table-row}
      tr.sync-var td{color:#475569}
      .src-badge{display:inline-block;font-size:10px;color:#0f6e56;background:#e1f5ee;border:1px solid #9fe1cb;border-radius:4px;padding:0 6px;margin-left:6px;vertical-align:1px}
      .src-badge.ml-badge{color:#0c447c;background:#e6f1fb;border-color:#b5d4f4}
      .src-badge.pdd-badge{color:#b45309;background:#faeeda;border-color:#fac775}
      /* 「未确认上架」：发布记录记为已发布，但该站点没有官方创建返回的商品子项（只有复核认定） */
      .unv-chip{display:inline-block;font-size:10.5px;font-weight:600;color:#a32d2d;background:#fdecec;
        border:1px solid #f3b6b6;border-radius:4px;padding:1px 7px;margin-top:4px;cursor:help}

      /* ---------- 设置板块 ---------- */
      nav{display:flex;flex-direction:column}
      #navSettings{margin-top:auto}
      .set-card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:16px 18px;margin-bottom:14px}
      .app-card.active{border-color:#16a34a;box-shadow:0 0 0 1px #16a34a inset}
      .app-badge{display:inline-block;font-size:10.5px;padding:2px 8px;border-radius:4px;background:#f1f5f9;color:var(--muted)}
      .app-badge.on{background:#e1f5ee;color:#0f6e56;font-weight:600}
      .hint{font-size:12px;color:var(--muted);line-height:1.7}
      .hint-box{font-size:12px;color:#b45309;background:#fffbeb;border:1px solid #fde68a;border-radius:10px;padding:10px 14px;line-height:1.8}
      .set-field{border:1px solid var(--border);border-radius:8px;padding:8px 10px;font-size:13px;background:#fff}
      .cell-copy{cursor:pointer} .cell-copy:hover{color:var(--accent)}
      /* 标题参谋（2026-09-30 二版）：行 hover 高亮 + 表头吸顶。
         注意：border-collapse:collapse 会让 th 的 sticky 失效——必须 separate + th 自带背景 */
      .serp-row:hover{background:#f4f5fb}
      #serpListCard table{border-collapse:separate;border-spacing:0}
      #serpListCard thead th{position:sticky;top:0;z-index:1;background:var(--bg2,#f6f6f2);border-bottom:1px solid var(--border)}
      #serpListCard tbody td{border-bottom:1px solid var(--border)}
      /* ---------- 开发者中心要填的两个地址（2026-09-16）----------
         开发者中心里「Callbacks URL notifications」与「Redirect URIs」是两个独立字段，
         性质不同（官方推给我们 / 浏览器跳回我们）。原先页面只显示一个且笼统叫「回调地址」，
         极易把 /notify 填错位置 → 授权被拒。故并列展示 + 各自一键复制（地址一个字符都不能差）。 */
      .dev-urls{margin-top:12px;background:#f8fafc;border:1px dashed var(--border);border-radius:10px;padding:12px 14px}
      .dev-urls-title{font-size:12.5px;font-weight:600;margin-bottom:2px}
      .dev-url-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px}
      .dev-url-no{font-size:12px;font-weight:600;color:var(--accent);min-width:14px}
      .dev-url-name{font-size:12.5px;font-weight:600}
      .dev-url-desc{font-size:11.5px;color:var(--muted)}
      .dev-url-val{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;background:#fff;
        border:1px solid var(--border);border-radius:6px;padding:3px 8px;user-select:all;word-break:break-all}
      .dev-url-note{font-size:11.5px;color:var(--muted);line-height:1.7;margin:5px 0 0 22px}
      .dev-url-note code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11px;color:#475569}
