* { margin:0; padding:0; box-sizing:border-box; }
.btn:disabled { opacity:.45; cursor:not-allowed; }
:root {
  --primary:#3b82f6; --primary-dark:#2563eb; --bg:#f4f6fb; --card:#fff;
  --border:#e3e8f0; --text:#1e293b; --muted:#64748b; --ok:#10b981; --warn:#f59e0b; --danger:#ef4444;
  --radius:10px; --shadow:0 1px 3px rgba(15,23,42,.08);
}
body { font-family:"PingFang SC","Microsoft YaHei",system-ui,sans-serif; background:var(--bg); color:var(--text); font-size:14px; }
a { color:var(--primary); text-decoration:none; }

/* 顶栏 */
.topbar { display:flex; justify-content:space-between; align-items:center; background:var(--card); border-bottom:1px solid var(--border); padding:10px 20px; position:sticky; top:0; z-index:50; }
.brand { display:flex; align-items:center; gap:10px; }
.logo { font-size:26px; }
.brand-text h1 { font-size:17px; font-weight:600; }
.sub { font-size:11px; color:var(--muted); }
.topbar-right { display:flex; align-items:center; gap:14px; }
.store-picker select { padding:6px 10px; border:1px solid var(--border); border-radius:8px; font-size:13px; background:#fff; }
.status-badge { padding:4px 10px; border-radius:20px; font-size:12px; background:#eef2ff; color:var(--primary-dark); }
.status-badge.bad { background:#fef2f2; color:var(--danger); }

/* 布局 */
.layout { display:flex; min-height:calc(100vh - 56px); }
.sidebar { width:180px; background:var(--card); border-right:1px solid var(--border); padding:14px 10px; display:flex; flex-direction:column; gap:4px; }
.nav-item { display:block; padding:10px 14px; border-radius:8px; color:var(--text); font-size:14px; }
.nav-item:hover { background:#f1f5f9; }
.nav-item.active { background:var(--primary); color:#fff; }
.nav-foot { margin-top:auto; padding:12px; background:#f8fafc; border-radius:8px; font-size:11px; color:var(--muted); line-height:1.6; }
.content { flex:1; padding:22px 26px; overflow-x:auto; }

.page-head { display:flex; justify-content:space-between; align-items:center; margin-bottom:18px; gap:12px; flex-wrap:wrap; }
.page-head h2 { font-size:20px; font-weight:600; }
.muted { color:var(--muted); font-size:12px; }

/* 卡片 */
.cards { display:grid; grid-template-columns:repeat(4,1fr); gap:16px; margin-bottom:20px; }
.card { background:var(--card); border:1px solid var(--border); border-radius:var(--radius); padding:18px; box-shadow:var(--shadow); }
.card .num { font-size:30px; font-weight:700; margin-bottom:4px; }
.card.warn .num { color:var(--warn); }
.card.danger .num { color:var(--danger); }
.card .label { color:var(--muted); font-size:13px; }

/* 面板 */
.panel { background:var(--card); border:1px solid var(--border); border-radius:var(--radius); padding:16px 18px; margin-bottom:18px; box-shadow:var(--shadow); }
.panel-head { display:flex; justify-content:space-between; align-items:center; margin-bottom:12px; }
.panel-head h3 { font-size:15px; font-weight:600; }
.head-actions { display:flex; gap:8px; align-items:center; }
.bf-stat { background:#eef2ff; color:var(--primary-dark); border:1px solid #dbe3ff; border-radius:20px; padding:5px 12px; font-size:12px; white-space:nowrap; font-weight:500; }
.bf-actions { flex-wrap:wrap; }

/* 表格 */
.tbl { width:100%; border-collapse:collapse; font-size:13px; }
.tbl th { text-align:left; padding:9px 10px; color:var(--muted); font-weight:500; border-bottom:2px solid var(--border); white-space:nowrap; }
.tbl td { padding:9px 10px; border-bottom:1px solid #eef1f6; vertical-align:middle; }
.tbl tr:hover td { background:#f8fafc; }
.tbl input, .tbl select { padding:6px 8px; border:1px solid var(--border); border-radius:6px; font-size:13px; width:100%; min-width:80px; background:#fff; }

/* 按钮 */
.btn { padding:7px 14px; border-radius:8px; border:1px solid var(--border); background:#fff; font-size:13px; cursor:pointer; color:var(--text); }
.btn:hover { background:#f1f5f9; }
.btn.primary { background:var(--primary); color:#fff; border-color:var(--primary); }
.btn.primary:hover { background:var(--primary-dark); }
.btn.ghost { background:transparent; }
.btn.danger { color:var(--danger); border-color:#fecaca; }
.btn.warn { color:var(--warn); border-color:#fde68a; background:#fffbeb; }
.btn.sm { padding:4px 9px; font-size:12px; }

/* 徽标 */
.tag { display:inline-block; padding:2px 9px; border-radius:12px; font-size:11px; }
.tag.ok { background:#ecfdf5; color:var(--ok); }
.tag.warn { background:#fffbeb; color:var(--warn); }
.tag.danger { background:#fef2f2; color:var(--danger); }
.tag.info { background:#eef2ff; color:var(--primary-dark); }

/* 上传区 */
.dropzone { background:var(--card); border:2px dashed #c7d2e4; border-radius:var(--radius); padding:44px 20px; text-align:center; margin-bottom:18px; cursor:pointer; transition:.2s; }
.dropzone:hover, .dropzone.over { border-color:var(--primary); background:#f8fbff; }
.dz-icon { font-size:36px; margin-bottom:8px; }
.dz-text { font-size:15px; margin-bottom:6px; }
.dz-hint { font-size:12px; color:var(--muted); }

/* 结果 */
.result-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); gap:12px; }
.result-item { text-align:center; padding:14px; border-radius:8px; background:#f8fafc; }
.result-item .n { font-size:24px; font-weight:700; }
.result-item .l { font-size:12px; color:var(--muted); margin-top:2px; }
.result-item.ok .n { color:var(--ok); } .result-item.warn .n { color:var(--warn); } .result-item.danger .n { color:var(--danger); }

/* 工具栏/Tabs */
.toolbar { display:flex; gap:12px; align-items:center; margin-bottom:14px; flex-wrap:wrap; }
.toolbar label { font-size:13px; color:var(--muted); display:flex; align-items:center; gap:6px; }
.toolbar select, .toolbar input { padding:6px 10px; border:1px solid var(--border); border-radius:8px; font-size:13px; }
.tabs { display:flex; gap:4px; margin-bottom:14px; border-bottom:2px solid var(--border); }
.tab { padding:9px 18px; border:none; background:none; font-size:14px; cursor:pointer; color:var(--muted); border-bottom:2px solid transparent; margin-bottom:-2px; }
.tab.active { color:var(--primary); border-bottom-color:var(--primary); font-weight:600; }

/* 列映射网格 */
.columns-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(190px,1fr)); gap:12px; margin-bottom:12px; }
.col-item { background:#f8fafc; border:1px solid var(--border); border-radius:8px; padding:10px 12px; display:flex; align-items:center; gap:8px; }
.col-item .slot { flex:1; font-size:13px; font-weight:500; }
.col-item input { width:52px; text-align:center; font-weight:600; }

/* 提示 */
.hint-box { margin-top:10px; padding:10px 14px; background:#f8fafc; border:1px dashed var(--border); border-radius:8px; font-size:12px; color:var(--muted); line-height:1.7; }

/* Toast */
.toast { position:fixed; top:70px; left:50%; transform:translateX(-50%); background:#1e293b; color:#fff; padding:10px 22px; border-radius:8px; font-size:13px; opacity:0; transition:.3s; z-index:100; pointer-events:none; box-shadow:0 4px 14px rgba(0,0,0,.2); }
.toast.show { opacity:1; }
.toast.ok { background:var(--ok); }
.toast.err { background:var(--danger); }

/* 行内状态 */
.link { color:var(--primary); cursor:pointer; }
.empty { color:var(--muted); text-align:center; padding:20px; }

/* ===== 云途发货模块（增量追加） ===== */
.modal-mask { position:fixed; inset:0; background:rgba(15,23,42,.45); z-index:90; display:flex; align-items:center; justify-content:center; }
.modal { background:#fff; border-radius:12px; width:520px; max-width:92vw; max-height:86vh; overflow:auto; box-shadow:0 10px 40px rgba(0,0,0,.2); }
.modal-head { display:flex; justify-content:space-between; align-items:center; padding:14px 18px; border-bottom:1px solid var(--border); }
.modal-head h3 { font-size:16px; font-weight:600; }
.modal-body { padding:16px 18px; display:flex; flex-direction:column; gap:12px; }
.modal-foot { display:flex; justify-content:flex-end; gap:10px; padding:12px 18px; border-top:1px solid var(--border); }
.form-row { display:flex; gap:14px; align-items:center; flex-wrap:wrap; }
.form-row label { font-size:13px; color:var(--text); display:flex; align-items:center; gap:6px; }
.form-row select { padding:7px 10px; border:1px solid var(--border); border-radius:8px; font-size:13px; background:#fff; }

/* ===== 登录视图 ===== */
#loginView { z-index:99; }
#loginView .modal { width:380px; }
.login-modal .modal-head { justify-content:center; border-bottom:none; padding-bottom:0; }
.login-modal .form-row { flex-direction:column; align-items:stretch; gap:6px; }
.login-modal .form-row input { padding:10px 12px; font-size:14px; border:1px solid var(--border); border-radius:8px; }
.login-modal .form-row input:focus { outline:none; border-color:var(--primary,#3b82f6); box-shadow:0 0 0 3px rgba(59,130,246,.15); }
.login-modal .btn { padding:10px; font-size:14px; margin-top:4px; }
.login-alt { text-align:center; font-size:13px; margin-top:10px; color:var(--muted,#64748b); }
.login-alt a { color:var(--primary,#3b82f6); text-decoration:none; }
.login-alt a:hover { text-decoration:underline; }
#usersTable .tag { font-size:12px; }
#usersPanel .toolbar { gap:8px; flex-wrap:wrap; }

/* 店铺密码单元格：输入框 + 显示/隐藏按钮 */
.pw-cell { display:inline-flex; gap:4px; align-items:center; width:100%; }
.pw-cell input { flex:1; min-width:90px; }
.pw-cell .btn { flex:none; padding:4px 7px; }

/* 云途账号绑定：只读掩码值 + 编辑输入 */
.yt-val { font-family:ui-monospace,Consolas,monospace; font-size:12px; background:#f5f6fa; border:1px solid var(--border); border-radius:6px; padding:4px 8px; white-space:nowrap; }
#storesTable td.yt-cc input, #storesTable td.yt-secret input { min-width:120px; }
#storesTable .yt-op { display:flex; gap:4px; align-items:center; flex-wrap:wrap; }

/* ===== 订单管理 UI（ERP 风格重构） ===== */
/* 顶部筛选条：固定不被打断 */
.filter-bar { display:flex; gap:12px; align-items:center; margin-bottom:14px; flex-wrap:wrap; }
.filter-bar label { font-size:13px; color:var(--muted); display:flex; align-items:center; gap:6px; }
.filter-bar select, .filter-bar input { padding:6px 10px; border:1px solid var(--border); border-radius:8px; font-size:13px; background:#fff; }
.filter-bar input[type="date"] { padding:5px 8px; }
.filter-bar .filter-right { margin-left:auto; display:flex; gap:10px; align-items:center; }
.filter-bar .chk { font-size:13px; color:var(--text); }

.orders-ui .panel { padding:12px 14px; }

/* 紧凑订单表 */
.orders-tbl th { font-size:12px; padding:8px 8px; white-space:nowrap; }
.orders-tbl td { padding:7px 8px; font-size:12.5px; white-space:nowrap; }
.orders-tbl .oid-cell { font-family:Consolas,Menlo,monospace; font-size:12px; max-width:150px; overflow:hidden; text-overflow:ellipsis; }
.orders-tbl .time-cell { color:var(--muted); font-size:12px; }
.orders-tbl .recv-cell { max-width:170px; overflow:hidden; text-overflow:ellipsis; }
.orders-tbl .ops-cell { white-space:nowrap; }

/* 推荐物流 chip */
.rec-chip { display:inline-block; padding:2px 9px; border-radius:12px; font-size:11px; background:#eff6ff; color:#1d4ed8; border:1px solid #bfdbfe; white-space:nowrap; max-width:120px; overflow:hidden; text-overflow:ellipsis; }
.rec-none { display:inline-block; padding:2px 9px; border-radius:12px; font-size:11px; background:#f1f5f9; color:#94a3b8; max-width:150px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* 物流状态徽章 */
.ship-status { display:inline-block; padding:2px 9px; border-radius:12px; font-size:11px; }
.ship-status.st-ok { background:#ecfdf5; color:var(--ok); }
.ship-status.st-bad { background:#fef2f2; color:var(--danger); }
.ship-status.st-none { background:#f1f5f9; color:var(--muted); }

/* 当前物流 chip */
.ship-chip { display:inline-block; padding:2px 9px; border-radius:12px; font-size:11px; border:1px solid var(--border); background:#fff; white-space:nowrap; max-width:120px; overflow:hidden; text-overflow:ellipsis; }
.ship-chip.st-ok { background:#ecfdf5; color:var(--ok); border-color:#a7f3d0; }
.ship-chip.st-bad { background:#fef2f2; color:var(--danger); border-color:#fecaca; }

/* 待映射折叠面板 */
.pending-panel summary { display:flex; align-items:center; gap:10px; cursor:pointer; list-style:none; }
.pending-panel summary h3 { font-size:15px; font-weight:600; margin:0; }
.pending-panel summary::-webkit-details-marker { display:none; }
.pending-panel summary::before { content:"▸"; color:var(--muted); transition:.15s; }
.pending-panel[open] summary::before { transform:rotate(90deg); }
.pending-panel .tbl { margin-top:10px; }
.pending-panel .hint-box { margin-top:10px; }

/* 日志详情 */
.log-detail td { background:#f8fafc !important; }
.log-detail pre { max-height:260px; overflow:auto; font-size:11.5px; font-family:Consolas,Menlo,monospace; line-height:1.6; white-space:pre-wrap; word-break:break-all; color:#475569; }

/* ---- 物流轨迹跟踪 ---- */
.ship-status.st-warn { background:#fffbeb; color:#b45309; }
.ship-status.st-done { background:#eef2ff; color:#4338ca; }
/* 运单号 */
.wb-cell { font-family:Consolas,Menlo,monospace; font-size:11.5px; color:#1e40af; background:#eff6ff; padding:1px 6px; border-radius:4px; white-space:nowrap; }
/* 最新轨迹 / 备注 单元格（截断） */
.track-cell { display:inline-block; max-width:230px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; vertical-align:bottom; }
.orders-tbl .track-cell { max-width:180px; }
/* 未发货天数徽章 */
.ud-badge { display:inline-block; padding:1px 8px; border-radius:10px; font-size:11px; background:#f1f5f9; color:#64748b; white-space:nowrap; }
.ud-alert { background:#fef2f2; color:#dc2626; border:1px solid #fecaca; font-weight:600; animation:ud-blink 1.2s infinite; }
@keyframes ud-blink { 0%,100% { opacity:1; } 50% { opacity:.55; } }
/* 预警统计卡 */
.track-stats { display:flex; gap:12px; margin:10px 0 14px; flex-wrap:wrap; }
.stat-card { flex:1; min-width:140px; padding:12px 16px; border-radius:10px; background:#fff; border:1px solid var(--border); display:flex; flex-direction:column; gap:4px; }
.stat-card b { font-size:24px; font-weight:700; line-height:1; }
.stat-card.lv3 b { color:#b45309; }
.stat-card.lv5 b { color:#ea580c; }
.stat-card.lv7 b { color:#dc2626; }
.stat-card.lv3 { border-top:3px solid #fbbf24; }
.stat-card.lv5 { border-top:3px solid #f97316; }
.stat-card.lv7 { border-top:3px solid #ef4444; }
/* 待处理行高亮 */
tr.issue-pending { background:#fffbf5; }
tr.issue-pending:hover { background:#fff7ed; }
/* 处理弹窗 textarea */
#trackHandleNote { width:100%; padding:8px 10px; border:1px solid var(--border); border-radius:8px; font-size:13px; resize:vertical; font-family:inherit; }

/* ---- 客户上传图片面板 ---- */
#customerImagesWrap { display:flex; flex-direction:column; gap:10px; margin-top:10px; }
.ci-batch { border:1px solid var(--border); border-radius:10px; overflow:hidden; background:#fff; }
.ci-batch-head { padding:8px 14px; font-weight:600; font-size:13px; background:#f8fafc; border-bottom:1px solid var(--border); display:flex; align-items:center; gap:8px; }
.ci-asins { display:flex; flex-direction:column; }
.ci-asin { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:9px 14px; border-bottom:1px solid #f1f5f9; }
.ci-asin:last-child { border-bottom:none; }
.ci-asin-info { display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.ci-asin-id { font-family:Consolas,Menlo,monospace; font-weight:600; color:#1e40af; background:#eff6ff; padding:2px 8px; border-radius:6px; }
.ci-asin-actions { flex-shrink:0; }
/* 客户图片下载重命名弹窗：表头列勾选 */
.ci-cols { display:flex; flex-direction:column; gap:6px; max-height:320px; overflow-y:auto; }
.ci-col-item { display:flex; align-items:center; gap:8px; padding:7px 10px; border:1px solid var(--border); border-radius:8px; background:#fff; cursor:pointer; font-size:13px; }
.ci-col-item:hover { border-color:var(--primary,#3b82f6); background:#f8fafc; }
.ci-col-item input { accent-color:#3b82f6; flex-shrink:0; }
.ci-col-item span { word-break:break-all; }

/* 搜索栏独立一行（筛选栏上方），支持多行批量粘贴 */
.search-bar { display:flex; gap:12px; align-items:center; flex-wrap:wrap; margin-bottom:10px; }
.search-bar .search-box { font-size:13px; color:var(--muted); display:flex; align-items:center; gap:6px; }
.search-box textarea { padding:6px 10px; border:1px solid var(--border); border-radius:8px; font-size:13px; background:#fff; font-family:inherit; width:250px; max-width:32vw; resize:none; overflow:hidden; line-height:1.4; }
.search-box textarea:focus { outline:1px solid #1d4ed8; }
