/* =========================================================================
   app.css —— 全站样式（浅色 · 中性灰 + 暖金点睛）

   设计系统（改配色 / 改密度只需改下面 :root 的 token）
   ─────────────────────────────────────────────────────────────────────
   1. 中性灰阶承担 95% 的表面与文字：页面底 → 卡片面 → 分隔线 → 文字，四级递进。
   2. 暖金（--gold / --gold-l）严格限频，只出现在四处：
        ① 主操作按钮   ② 当前页签指示条
        ③ 计算列数值（采购价/售价/京东价/VIP价格）
        ④ 「可编辑列」色块（商品编码 / 三级类目）
      其余一律中性灰 —— 强调用得越少，越有力。
   3. 层次靠「留白 + 极淡分隔线」表达，不靠边框与阴影堆叠。
   4. 聚焦态统一为暖金描边 + 3px 柔光环，全站一致的键盘可见性。
   ========================================================================= */
:root{
  /* —— 表面与线 —— */
  --bg:#F4F5F7;          /* 页面底 */
  --panel:#FFFFFF;       /* 卡片 / 表格面 */
  --panel2:#FAFAFB;      /* 次级面（只读列、停用行） */
  --hover:#F7F8FA;       /* 中性悬停（按钮、页签） */
  --rowhover:#FBF8F1;    /* 表格行悬停：极淡暖白，用于定位当前行 */
  --line:#E8EAEE;        /* 容器 / 控件边框 */
  --line2:#F1F2F5;       /* 表格行分隔线 */
  /* —— 文字（四级，对比度依次递减） —— */
  --text:#15171C;        /* 主文字 */
  --text2:#4A5058;       /* 次级文字（按钮、标签、正文强调） */
  --muted:#868D97;       /* 弱文字（辅助信息、表头） */
  --faint:#A7ADB6;       /* 更弱（说明、占位、序号） */
  /* —— 暖金强调（限频） —— */
  --gold:#B0730A;        /* 金 · 文字与描边（白底对比 ≈ 4.6:1，达 AA） */
  --gold-l:#F0A72E;      /* 金 · 高亮块 / 当前项指示 / 聚焦环 */
  --gold-deep:#96620A;   /* 金 · 主按钮悬停 / 按下 */
  --gold-bg:#FFF9ED;     /* 金 · 极浅底（聚焦格、徽标底） */
  --gold-line:#F3E2BE;   /* 金 · 浅描边 */
  --gold-tint:#FDFAF1;   /* 金 · 可编辑列底色 */
  /* —— 语义色（状态、成败提示） —— */
  --green:#16803C;
  --red:#D92D2D;
  --blue:#2563EB;
  /* —— 阴影（只用于抬升层级，不用于装饰） —— */
  --sh:0 1px 2px rgba(16,24,40,.04);
  --sh2:0 8px 24px rgba(16,24,40,.08);
  --sh3:0 24px 60px rgba(0,0,0,.24);
  /* —— 圆角 —— */
  --r:12px;              /* 容器 / 卡片 / 弹层 */
  --r2:8px;              /* 控件 / 按钮 / 输入框 */
  --r3:6px;              /* 小元素 / 单元格内控件 */
}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--bg);color:var(--text);
  font:13px/1.55 "Segoe UI","Microsoft YaHei UI","Microsoft YaHei",-apple-system,"PingFang SC",sans-serif;
  padding:18px 24px 56px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}

/* ------------------------------------------------------------------ 顶栏 */
.top{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap;margin-bottom:8px}
.top .brand{flex:1;min-width:280px}
h1{font-size:15px;font-weight:600;letter-spacing:.2px;display:flex;align-items:center;gap:9px}
h1::before{content:'';width:3px;height:15px;border-radius:2px;background:linear-gradient(180deg,var(--gold-l),var(--gold))}
h1 .ver{font-size:10.5px;font-weight:600;color:var(--gold);background:var(--gold-bg);border:1px solid var(--gold-line);border-radius:999px;padding:1px 8px;letter-spacing:0}
.top .sub{color:var(--faint);font-size:11px;margin:5px 0 0 12px;line-height:1.6}
.top .right{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-top:1px}
.conn{font-size:11px;border-radius:999px;padding:3px 10px;border:1px solid var(--line);background:#fff;color:var(--muted)}
.conn.on{color:var(--green);border-color:#CBEBDA;background:#F4FCF8}
.conn.off{color:var(--red);border-color:#F2CFCF;background:#FEF5F5}
.who{font-size:11px;color:var(--muted)}
.who b{color:var(--text2)}
.linkbtn{background:none;border:none;color:var(--gold);cursor:pointer;font-size:11px;text-decoration:underline;padding:0 2px}
.linkbtn:hover{color:var(--gold-deep)}

/* -------------------------------------------------------------- 错误条 */
.fatal{background:#FEF5F5;border:1px solid #F2CFCF;color:var(--red);border-radius:var(--r);padding:10px 14px;
  font-size:12px;line-height:1.8;margin-bottom:12px}

/* -------------------------------------------------------------- 信息条 */
/* 口径说明：不占卡片、不用卡片边框，只作一行低对比说明，把视觉让给数据 */
.formula-strip{display:flex;flex-wrap:wrap;gap:3px 18px;background:transparent;border:0;border-radius:0;
  padding:0 2px;margin:8px 0 14px;box-shadow:none}
.formula-strip span{color:#959CA6;font-size:11px;line-height:1.7}
.formula-strip span+span{position:relative;padding-left:18px}
.formula-strip span+span::before{content:'';position:absolute;left:0;top:50%;width:1px;height:10px;margin-top:-5px;background:var(--line)}
.formula-strip b{color:var(--text2);font-weight:600}

/* ---------------------------------------------------------------- 页签 */
/* 下划线式：容器透明 + 一条通栏底线，当前项用暖金短线指示 —— 顶部少一个白卡片，更干净 */
.tabs{display:flex;align-items:flex-end;gap:2px;background:transparent;border:0;border-bottom:1px solid var(--line);
  border-radius:0;padding:0;margin-bottom:16px;box-shadow:none;max-width:100%;overflow-x:auto;overflow-y:hidden}
.tabs button{position:relative;background:none;border:0;color:#7B828C;font-size:12.5px;padding:8px 13px 10px;cursor:pointer;
  white-space:nowrap;border-radius:var(--r2) var(--r2) 0 0;transition:color .15s,background .15s}
.tabs button:hover{color:var(--text);background:var(--hover)}
.tabs button.on{color:var(--text);font-weight:600;background:transparent}
.tabs button.on::after{content:'';position:absolute;left:12px;right:12px;bottom:0;height:2px;border-radius:2px 2px 0 0;background:var(--gold-l)}
/* 邮箱·入池 标签：金色填充底色，区别于其它纯文字标签（用户 2026-09-27 要求「加个底色区分」） */
.tabs button.tab-accent{background:linear-gradient(180deg,var(--gold-l),var(--gold));color:#3A2A05;font-weight:600;border-radius:8px 8px 0 0}
.tabs button.tab-accent:hover{background:var(--gold);color:#3A2A05}
.tabs button.tab-accent.on{color:#3A2A05;background:linear-gradient(180deg,var(--gold),var(--gold-deep))}
.tabs button.tab-accent.on::after{display:none}
.tabpane{display:none}.tabpane.on{display:block}

/* -------------------------------------------------------------- 工具栏 */
.toolbar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px;align-items:center}
button.btn{background:#fff;border:1px solid var(--line);color:var(--text2);border-radius:var(--r2);padding:6px 13px;cursor:pointer;
  font-size:12px;box-shadow:0 1px 1px rgba(16,24,40,.03);transition:background .15s,border-color .15s,color .15s,box-shadow .15s}
button.btn:hover{border-color:#D5D8DE;color:var(--text);background:#FCFCFD}
/* 主操作按钮：亮金底 + 深棕字（对比约 6:1，比「金底白字」更清晰，也更像金而不是土棕） */
button.btn.primary{background:#EFA22D;border-color:#E09420;color:#3A2A05;font-weight:600;box-shadow:0 1px 2px rgba(150,98,10,.22)}
button.btn.primary:hover{background:#F5B043;border-color:#EFA22D;color:#3A2A05}
/* 删除按钮低调化：默认灰字，悬停才提示危险（红色） */
button.btn.danger{color:var(--muted)}
button.btn.danger:hover{border-color:#F0BCBC;background:#FEF3F3;color:var(--red)}
/* 行内「删除/删」链接按钮：默认灰、无下划线，悬停才变红 */
.linkbtn.dele{color:#A9AFB8;text-decoration:none}
.linkbtn.dele:hover{color:var(--red);text-decoration:underline}
button.btn:disabled{opacity:.42;cursor:not-allowed;box-shadow:none;background:#fff;color:var(--muted)}
button.btn:disabled:hover{border-color:var(--line);background:#fff;color:var(--muted)}

/* ---------------------------------------------------------------- 表格 */
table{width:100%;border-collapse:collapse;background:#fff;font-size:12px}
/* 表头：极浅底 + 一条下边线，不用深灰块压住数据 */
th{background:#FBFBFC;color:#757D88;font-weight:600;padding:9px 10px;text-align:left;white-space:nowrap;
  position:sticky;top:0;z-index:2;border-bottom:1px solid var(--line);font-size:11.5px;letter-spacing:.2px}
th.vipth{background:#DCEBD3;color:#20401C}
.vipnote{background:#fff;color:var(--muted);text-align:left;padding:9px 12px;line-height:1.8;font-weight:400;white-space:normal;font-size:11px}
td{border-top:1px solid var(--line2);padding:6px 10px;vertical-align:top}
tbody tr{transition:background .12s}
tbody tr:hover,tbody tr:focus-within{background:var(--rowhover)}
td[contenteditable]{outline:none;border-radius:4px}
td[contenteditable]:focus{background:var(--gold-bg);box-shadow:inset 0 0 0 1.5px var(--gold-l)}
td.num{text-align:right;font-variant-numeric:tabular-nums}
td .calc{color:var(--gold);font-weight:600}
td .rate{color:var(--green)}
/* 删除类操作一律低调：默认很淡，鼠标移到该行才略微显现，指到按钮上才变红 */
.del{color:#DEDEE3;cursor:pointer;padding:0 4px;opacity:.72;transition:color .15s,opacity .15s}
tbody tr:hover .del{color:#B6BCC4;opacity:1}
.del:hover{color:#E06A6A}
.btag{text-align:center;width:30px;color:var(--faint);font-weight:600;font-size:11px}
/* 导入行的只读列：明确「不可编辑」视觉，避免误改采购给的原始数据 */
td.ro{color:#727A85;background:var(--panel2);cursor:not-allowed}
tbody tr:hover td.ro{background:#F7F7F9}
/* 唯一可批量粘贴的两列（商品编码 / 三级类目）：整列浅金色块，凸显「这里能改」 */
th.pth{color:#8A6516;background:#FAF1DC}
/* 锁定开关列：🔒/🔓 点击切换；已锁定行整行淡金底色，提示「这行 WPS 不会覆盖」 */
.lockbtn{cursor:pointer;opacity:.5;transition:opacity .15s;user-select:none}
.lockbtn:hover{opacity:1}
tr.rowlocked>td{background:rgba(245,158,11,.08)}
/* 待导入面板：缺失必填列高亮 + 修改提醒旧/新对照 */
td.miss{background:#FDE8E8;color:#b42318;font-weight:600}
.wps-old{color:#9AA0A9;text-decoration:line-through}
.wps-new{color:#1A7F37;font-weight:600}
/* ② 元数据覆盖提醒：旧值 → 新值 对照（旧=删除线灰红；新=金加粗） */
.diffrow{line-height:1.7;white-space:nowrap}
.diffrow .old{color:#b42318;text-decoration:line-through;opacity:.85}
.diffrow .arrow{color:#9AA0A9;margin:0 4px}
.diffrow .new{color:#8A5B03;font-weight:700;background:var(--gold-bg);border:1px solid var(--gold-line);border-radius:5px;padding:0 6px}
/* WPS 列名映射面板（view-wps.js ③ 区） */
.tag-custom,.tag-default{display:inline-block;margin-left:8px;padding:1px 8px;border-radius:9px;font-size:11px;vertical-align:middle}
.tag-custom{background:#FBEFCF;color:#8A5B03;border:1px solid #EFA22D}
.tag-default{background:#EEF1F4;color:#5B6470;border:1px solid #D5D9DF}
.miss-inline{color:#b42318}
#wpsPendingBox code{background:#F4F5F7;border:1px solid #E3E5E9;border-radius:4px;padding:0 5px;font-size:12px;color:#3B4048}
tr.rowlocked>td.ro{background:var(--panel2)}
th.pth.pth-first{box-shadow:inset 1px 0 0 #EFE0BC}
th.pth.pth-last{box-shadow:inset -1px 0 0 #EFE0BC}
#mainTable td.edcell{background:var(--gold-tint)}
#mainTable td.edcell.ed-first{box-shadow:inset 1px 0 0 #F1E5C9}
#mainTable td.edcell.ed-last{box-shadow:inset -1px 0 0 #F1E5C9}
/* 行悬停时这两列保持自己的底色（略深一档），维持「色块」层级不被行高亮翻转 */
#mainTable tbody tr:hover td.edcell{background:#FAF3E2}
/* 聚焦态优先级要压过上面的底色，保持原有金色高亮 */
#mainTable td.edcell:focus,#mainTable tbody tr:hover td.edcell:focus{background:var(--gold-bg);box-shadow:inset 0 0 0 1.5px var(--gold-l)}
/* 状态下拉：去掉「满屏输入框」的观感 —— 无边框无底色，前面一个彩色圆点，悬停/聚焦才显出可点 */
.stsel{appearance:none;-webkit-appearance:none;-moz-appearance:none;background-color:transparent;
  border:1px solid transparent;border-radius:var(--r3);font-size:11.5px;font-weight:600;padding:2px 12px;
  cursor:pointer;width:88px;text-align:center;transition:border-color .15s,background-color .15s}
.stsel:hover,.stsel:focus{outline:none;border-color:var(--line);background-color:#fff}
.stsel:focus{border-color:var(--gold-l);box-shadow:0 0 0 3px rgba(240,167,46,.14)}
/* 状态格：可聚焦用于 Ctrl+V 粘贴整列状态，聚焦时金色描边提示 */
.stcell:focus{outline:2px solid var(--gold-l);outline-offset:-2px;background:var(--gold-bg);box-shadow:0 0 0 3px rgba(240,167,46,.14)}
/* 表头「状态」列的整批下拉 */
th.hstat{vertical-align:top;line-height:1.4}
.hsel{margin-top:3px;width:100%;font-size:11px;font-weight:600;padding:2px 4px;border:1px solid var(--line);
  border-radius:var(--r3);background:#fff;color:var(--text2);cursor:pointer}
.hsel:disabled{color:#C2C7CE;background:var(--panel2);border-style:dashed;cursor:not-allowed}
.hsel:focus{outline:none;border-color:var(--gold-l);box-shadow:0 0 0 3px rgba(240,167,46,.14)}
/* 表头「客户」列的整批应用按钮 */
.hbtn{margin-top:3px;width:100%;font-size:11px;font-weight:600;padding:2px 3px;border:1px solid var(--gold-line);
  border-radius:var(--r3);background:var(--gold-bg);color:#7A5A07;cursor:pointer}
.hbtn:hover{background:var(--gold-l);border-color:var(--gold-l);color:#3D2D03}
.hbtn:disabled{color:#C2C7CE;background:var(--panel2);border-color:var(--line);cursor:not-allowed}
/* 表头「客户」列：批量填客户下拉（选中即生效），固定窄宽居中，不跟着列宽一起变宽 */
.custsel{display:block;width:112px;max-width:100%;margin:3px auto 0}
/* 客户列：列宽固定不撑开，长客户名在单元格内换行（列宽 168px → 最长客户名 2 行内） */
#mainTable td.custcell{word-break:break-all;max-width:168px;line-height:1.5}
.empty{color:var(--faint);text-align:center;padding:36px 0}
/* 客户管理：归档行置灰 + 未使用次数列标记 */
#customerTable tr.archived{background:var(--panel2);color:#9AA0A9}
#customerTable tr.archived td{border-top-color:#F4F5F7}
#customerTable td.unused{color:#C2C7CE}
#customerTable td .tag{display:inline-block;margin-left:5px;padding:0 6px;border-radius:6px;background:#F0F1F4;color:#9AA0A9;font-size:10px;font-weight:600}
#customerTable td.muted{color:#B5BAC2}
/* 归档按钮：低调灰，悬停才微变色（区别于醒目编辑动作） */
.linkbtn.arch{color:var(--muted)}
.linkbtn.arch:hover{color:#6E7A9E;text-decoration:underline}

/* 表格容器：分页显示，不使用内部滚动条 */
.tablebox{border:1px solid var(--line);border-radius:var(--r);background:#fff;box-shadow:var(--sh);overflow:hidden}
/* 需要滚动的区域（导入模版网格） */
.scroll{max-height:320px;overflow:auto;border:1px solid var(--line);border-radius:var(--r);background:#fff;box-shadow:var(--sh)}
.scroll::-webkit-scrollbar{width:10px;height:10px}
.scroll::-webkit-scrollbar-thumb{background:#D9DBE1;border-radius:6px;border:2px solid #fff}
.scroll::-webkit-scrollbar-thumb:hover{background:#C4C7CF}
.scroll::-webkit-scrollbar-track{background:transparent}

/* -------------------------------------------------------------- 分页栏 */
.pager{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:9px 2px 0;color:var(--muted);font-size:11.5px}
.pager .sp{flex:1}
.pager .pgbtn{background:#fff;border:1px solid var(--line);border-radius:var(--r2);padding:4px 11px;font-size:11.5px;color:var(--text2);
  cursor:pointer;box-shadow:0 1px 1px rgba(16,24,40,.03);transition:background .15s,border-color .15s,color .15s}
.pager .pgbtn:hover:not(:disabled){border-color:#D5D8DE;color:var(--text);background:#FCFCFD}
.pager .pgbtn:disabled{opacity:.4;cursor:not-allowed}
.pager .pgnum{min-width:26px;text-align:center;font-variant-numeric:tabular-nums;color:var(--text2);font-weight:600}
.pager select{padding:3px 7px;font-size:11.5px}

/* ---------------------------------------------------------------- 卡片 */
/* 指标卡：固定列数（而非 auto-fit），卡片数才能整行铺满、末行不留大片空白 */
.cards{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;margin-bottom:18px}
@media (max-width:1500px){.cards{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media (max-width:1100px){.cards{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:820px){.cards{grid-template-columns:repeat(2,minmax(0,1fr))}}
.card{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:13px 15px;box-shadow:var(--sh)}
.card .k{color:var(--muted);font-size:11px;line-height:1.5}
.card .v{font-size:19px;font-weight:700;color:var(--gold);font-variant-numeric:tabular-nums;margin-top:4px;letter-spacing:-.2px}
/* 卡片副标题 */
.card .cs{color:var(--faint);font-size:10.5px;margin-top:4px;line-height:1.5}
.bar-row{display:flex;align-items:center;gap:10px;margin:6px 0}
.bar-row .lbl{width:180px;color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:11.5px}
.bar-row .bar{height:10px;background:linear-gradient(90deg,var(--gold-l),var(--gold));border-radius:999px;min-width:2px}
.bar-row .val{color:var(--text2);font-size:11.5px;font-variant-numeric:tabular-nums}
h3{font-size:12.5px;color:var(--text2);margin:18px 0 10px;font-weight:600;letter-spacing:.2px}
h3::before{content:'';display:inline-block;width:3px;height:11px;border-radius:2px;background:var(--gold-l);margin-right:7px;vertical-align:-1px}

/* ---------------------------------------------------------------- 表单 */
label{font-size:12px;color:var(--text2)}
input[type=text],input[type=number],input[type=date],select{background:#fff;border:1px solid var(--line);color:var(--text);
  border-radius:var(--r2);padding:5px 9px;font-size:12px;transition:border-color .15s,box-shadow .15s}
input:focus,select:focus{outline:none;border-color:var(--gold-l);box-shadow:0 0 0 3px rgba(240,167,46,.14)}
textarea{width:100%;background:#fff;border:1px solid var(--line);color:var(--text);border-radius:var(--r2);padding:10px 12px;
  font:12px/1.65 Consolas,"Microsoft YaHei UI","Microsoft YaHei",monospace;min-height:110px}
textarea:focus{outline:none;border-color:var(--gold-l);box-shadow:0 0 0 3px rgba(240,167,46,.14)}

/* ---------------------------------------------------------------- 提示 */
.hint{color:#98A0AA;font-size:11px;margin:6px 0 10px;line-height:1.7}
.hint b{color:var(--text2);font-weight:600}
.toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:#1B1D22;color:#fff;padding:9px 18px;
  border-radius:999px;font-weight:500;font-size:12px;opacity:0;transition:opacity .25s;pointer-events:none;z-index:99;
  box-shadow:0 10px 28px rgba(0,0,0,.22);max-width:min(80vw,720px);text-align:center}
.toast.show{opacity:1}
.toast.warn{background:#8A5A00}
.toast.err{background:#B01B1B}

/* ---------------------------------------------------------------- 图片 */
.thumb{height:42px;border-radius:6px;vertical-align:middle;cursor:pointer;border:1px solid var(--line);background:#fff}
.imgcell{padding:4px 6px;text-align:center}
.imgbtn{display:inline-block;cursor:pointer;color:var(--faint);border:1px dashed #DDE0E6;border-radius:var(--r3);padding:5px 9px;
  font-size:11px;line-height:1;transition:color .15s,border-color .15s,background .15s}
.imgbtn:hover{color:var(--gold);border-color:var(--gold-l);background:var(--gold-bg)}
/* 缩略图与「换」横向并排，避免「换」换行到下方把行高撑高 */
.imgwrap{display:flex;flex-direction:row;align-items:center;justify-content:center;gap:6px;flex-wrap:nowrap}
.thumbbox{position:relative;display:inline-block;line-height:0}
/* 缩略图删除角标：默认半透明很淡，鼠标移到缩略图上才显现 */
.imgdel{position:absolute;top:-4px;right:-4px;width:14px;height:14px;border-radius:50%;background:rgba(120,120,132,.34);
  color:#fff;font-size:10px;line-height:14px;text-align:center;cursor:pointer;z-index:2;opacity:.45;transition:opacity .15s,background .15s}
.thumbbox:hover .imgdel{opacity:1}
.imgdel:hover{background:rgba(200,80,80,.85);opacity:1}
.imgrep{padding:4px 7px}
/* 图片格聚焦高亮：点进「图片」格（或内部缩略图）编辑时，整格金色高亮，与 skuId/三级类目等可编辑框一致，方便定位当前行、避免看错行 */
td.imgcell:focus,td.imgcell:focus-within{background:var(--gold-bg);box-shadow:inset 0 0 0 1.5px var(--gold-l);border-radius:4px}
/* 「＋图/换」按钮获得焦点或点击时自身点亮 */
.imgbtn:focus-within,.imgbtn:focus,.imgbtn:active{color:var(--gold);border-color:var(--gold-l);background:var(--gold-bg);box-shadow:0 0 0 3px rgba(240,167,46,.14);outline:none}
/* 主表数字列（数量/基准价/采购价/售价/京东价/VIP价格）居中显示；仅作用于主表，不影响粘贴导入网格 */
#mainTable td.num, #mainTable td.calc, #mainTable td.rate, #mainTable th.num{text-align:center}

/* -------------------------------------------------------------- 导入区 */
#importBox{background:#fff;border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);padding:14px 16px;margin-bottom:12px}
#dropZone{border:1.5px dashed #DDE0E6;border-radius:var(--r);padding:6px;position:relative;transition:border-color .15s,background .15s}
#dropZone.drag{border-color:var(--gold-l);background:rgba(240,167,46,.08)}
#dropHint{position:absolute;inset:6px;display:none;align-items:center;justify-content:center;background:#fff;border-radius:var(--r2);color:var(--gold);font-size:13px;pointer-events:none}
#tplGrid td{vertical-align:middle;min-height:26px;height:26px;padding:3px 8px;white-space:pre-wrap;word-break:break-all;max-width:260px}
#tplGrid td[contenteditable]:focus{outline:2px solid var(--gold-l);outline-offset:-2px;background:var(--gold-bg)}
#tplGrid td.num{text-align:right}
#tplGrid .thumb{height:34px}

/* ------------------------------------------------------------ 配置面板 */
.cfgpanel{background:#fff;border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);padding:13px 16px;margin-bottom:10px;
  display:flex;flex-wrap:wrap;gap:16px;align-items:flex-end}
/* 普通员工看到的共享配置区：整体压暗，明确「只能看不能改」 */
.admin-readonly:has(input:disabled){background:var(--panel2)}
.admin-readonly input:disabled,.admin-readonly select:disabled{background:#F2F3F6;color:var(--muted);cursor:not-allowed;border-style:dashed}

/* ================================================================
   账号登录 / 权限 / 使用记录（v2.0.0 新增）
   ================================================================ */

/* 弹层：登录页与改密码共用 */
body.locked{overflow:hidden}
.overlay{position:fixed;inset:0;background:rgba(20,22,26,.5);display:flex;align-items:center;justify-content:center;
  z-index:200;padding:20px;backdrop-filter:blur(4px)}
.loginbox{background:#fff;border-radius:16px;box-shadow:var(--sh3);padding:30px 30px 22px;width:100%;max-width:360px}
.loginbox h2{font-size:16px;font-weight:600;color:var(--text);letter-spacing:.2px}
.loginbox h2::before{content:'';display:inline-block;width:3px;height:15px;border-radius:2px;
  background:linear-gradient(180deg,var(--gold-l),var(--gold));margin-right:8px;vertical-align:-2px}
.loginbox .loginsub{color:var(--faint);font-size:11px;margin:7px 0 20px}
.loginbox label{display:block;font-size:11.5px;color:var(--muted);margin-bottom:13px}
.loginbox label input{display:block;width:100%;margin-top:5px;padding:9px 11px;font-size:13px;
  background:#fff;border:1px solid var(--line);border-radius:var(--r2);color:var(--text)}
.loginbox label input:focus{outline:none;border-color:var(--gold-l);box-shadow:0 0 0 3px rgba(240,167,46,.14)}
.loginmsg{background:#FEF5F5;border:1px solid #F2CFCF;color:var(--red);border-radius:var(--r2);
  padding:7px 10px;font-size:11.5px;margin-bottom:12px;line-height:1.6}
.loginbox button + button{margin-top:8px}
button.btn.block{display:block;width:100%;padding:10px 12px;text-align:center;font-size:13px;margin-top:12px}
.loginfoot{color:var(--faint);font-size:10.5px;line-height:1.7;margin-top:16px;padding-top:13px;border-top:1px solid var(--line2)}

/* 顶栏用户区 */
.who{display:inline-flex;align-items:center;gap:2px}
.who b{color:var(--gold)}

/* 角色标记 */
.tag{display:inline-block;font-size:10px;font-weight:600;border-radius:999px;padding:1px 6px;
  background:#EEF2FF;color:var(--blue);vertical-align:1px}

/* 使用记录表 */
#logTable td{font-size:11.5px;padding:6px 9px}
#logTable td.nowrap{white-space:nowrap}
#logTable .logdetail{color:var(--text2);max-width:520px;word-break:break-word;font-family:Consolas,"Microsoft YaHei UI","Microsoft YaHei",monospace;font-size:11px}
#logTable tr.logdanger{background:#FFFAFA}
#logTable tr.logdanger td:nth-child(4) b{color:var(--red)}
#logTable tbody tr.logdanger:hover{background:#FEF4F4}

/* 账号管理表 */
#userTable td{font-size:12px;padding:7px 9px}
#userTable td.nowrap{white-space:nowrap}
#userTable tr.rowoff td{background:var(--panel2);color:#9AA0A9}
#userTable tr.rowoff td select{opacity:.6}
#newUserPanel{gap:10px}
#newUserPanel label{display:flex;align-items:center;gap:6px}

/* 文档区（更新记录正文） */
.docbox{background:#fff;border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh);
  padding:18px 22px 22px;max-width:920px}
.docbox h2{font-size:14px;font-weight:700;color:var(--text);margin:22px 0 8px;padding-bottom:7px;border-bottom:1px solid var(--line2)}
.docbox h2:first-child{margin-top:0}
.docbox h3{font-size:12.5px;color:var(--gold);margin:16px 0 6px}
.docbox h3::before{display:none}
.docbox h4{font-size:12px;color:var(--muted);margin:13px 0 4px}
.docbox p{font-size:12px;color:var(--text2);margin:5px 0;line-height:1.8}
.docbox ul,.docbox ol{margin:5px 0 5px 20px}
.docbox li{font-size:12px;color:var(--text2);line-height:1.85}
.docbox code{background:var(--gold-bg);border:1px solid var(--gold-line);border-radius:4px;
  padding:0 4px;font-family:Consolas,monospace;font-size:11.5px;color:#7A5A12}
.docbox pre{background:var(--panel2);border:1px solid var(--line);border-radius:var(--r2);padding:10px 12px;
  margin:8px 0;overflow-x:auto;font-family:Consolas,monospace;font-size:11.5px;line-height:1.7;color:var(--text2)}
.docbox b{color:var(--text)}

/* 实时协作：同事正在编辑的单元格角标 */
td.editing-other{position:relative;box-shadow:inset 0 0 0 2px var(--blue);background:#EAF2FF}
td.editing-other::after{content:'@' attr(data-ed-name) ' 编辑中';position:absolute;right:3px;top:3px;
  font-size:10px;line-height:1.4;color:#fff;background:var(--blue);border-radius:8px;padding:1px 6px;
  pointer-events:none;z-index:3;max-width:calc(100% - 6px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* 乐观锁冲突模态框 */
.modal{background:#fff;border-radius:16px;box-shadow:var(--sh3);max-width:420px;width:90%;padding:24px}
.modal .mt{font-size:16px;font-weight:700;color:var(--text);margin-bottom:10px}
.modal .mb{font-size:13px;color:var(--text2);line-height:1.8;margin-bottom:20px}
.modal .mbt{display:flex;gap:10px;justify-content:flex-end}

/* 只读删除标记（普通员工看到的 ✕ 占位）：比可点的更淡，鼠标悬到行上也不变亮 */
.del.off,.del.off:hover,tbody tr:hover .del.off{color:#E6E6EA;opacity:.5;cursor:not-allowed}
