/* =============================================================
   京东运营数据分析工作台 - 浅色主题
   ============================================================= */
:root{
  /* v1.8.658 黑白灰重配色: 主色由品牌蓝改为近黑灰(GitHub 风), 语义涨跌/状态色保留 */
  --primary:#24292f;
  --primary-soft:rgba(36,41,47,.07);
  --primary-dark:#0d1117;
  --bg:#f2f2f7;
  --card:#ffffff;
  --text:#1c1c1e;
  --text-2:#6c6c70;
  --muted:#aeaeb2;
  --border:#e5e5ea;
  --border-2:#ececf0;
  --up:#ff3b30;      /* 涨 = 红(国内习惯) */
  --down:#34c759;    /* 跌 = 绿 */
  --warn:#ff9500;
  --sidebar-w:236px;
  --header-h:58px;
  --radius:10px;
  --shadow:0 1px 2px rgba(16,24,40,.04),0 4px 16px rgba(16,24,40,.05);
}
/* ============ v1.8.517 设计 token 扩展: 语义色 + 辅助色 ============
   只新增不改动, 完全向后兼容。每个语义色提供 base(文字/主色) + soft(淡背景) + bd(边框) 三件套,
   用于状态标签/徽章/卡片着色, 形成"色块"视觉语言。
   注意: --up/--down 是【金融涨跌语义】(国内习惯: 涨红跌绿), 与下方【状态语义】分离,
   不可混用 —— 状态色表达"成功/警告/错误", 涨跌色表达"同比上升/下降"。 */
:root{
  /* 状态语义色 (保留); 蓝/紫/青等分类色 v1.8.658 统一灰阶化 */
  --success:#34c759;  --success-soft:#e6f7f1;  --success-bd:#b7e4d5;
  --warning:#ff9500;  --warning-soft:#fff4e5;  --warning-bd:#f7d9a8;
  --danger:#ff3b30;   --danger-soft:#fdeced;   --danger-bd:#f5c2c7;
  --info:#636366;     --info-soft:#eff1f3;     --info-bd:#d3d9de;
  --neutral:#7c7c80;  --neutral-soft:#f1f3f7;  --neutral-bd:#d9d9de;
  /* 辅助/分类色 → 灰阶明度阶梯 */
  --purple:#5a5a5e;   --purple-soft:#eef0f2;   --purple-bd:#d6dbdf;
  --teal:#7c7c80;     --teal-soft:#eff1f3;     --teal-bd:#d3d9de;
  --amber:#8e8e93;    --amber-soft:#f1f3f5;    --amber-bd:#d9dee3;
  --cyan:#636366;     --cyan-soft:#eff1f3;     --cyan-bd:#d3d9de;
  --pink:#8e8e93;     --pink-soft:#f0f2f4;     --pink-bd:#d8dde2;
  /* 阴影层级 (收敛 40 种各异阴影为 3 档) */
  --shadow-1:0 1px 2px rgba(16,24,40,.04),0 2px 6px rgba(16,24,40,.04);
  --shadow-2:0 1px 2px rgba(16,24,40,.04),0 4px 16px rgba(16,24,40,.05);
  --shadow-3:0 4px 12px rgba(16,24,40,.08),0 12px 32px rgba(16,24,40,.08);
  /* 表格斑马纹 / 行悬停 */
  --row-stripe:#fbfcfe;
  --row-hover:#f2f6fd;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  background:var(--bg);color:var(--text);font-size:13px;line-height:1.6;-webkit-font-smoothing:antialiased;
}
/* v1.8.518 排版质感: 数值/代码统一 tabular-nums(等宽数字, 表格与 KPI 对齐更整齐、更精致),
   标签类小字统一默认字重消除粗细抖动。 */
.num,td.num,th.num,.kpi-v,.compact,.mono{font-variant-numeric:tabular-nums}
a{color:var(--primary);text-decoration:none}
a:hover{color:var(--primary-dark)}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:#d5dbe6;border-radius:4px}
::-webkit-scrollbar-thumb:hover{background:#c0c8d6}
::-webkit-scrollbar-track{background:transparent}

/* ---------------- 侧边栏 ---------------- */
.sidebar{
  position:fixed;left:0;top:0;bottom:0;width:var(--sidebar-w);background:#fff;
  border-right:1px solid var(--border);display:flex;flex-direction:column;z-index:50;
  transition:width .22s ease;
}
.sidebar .brand{
  height:var(--header-h);display:flex;align-items:center;justify-content:center;gap:10px;padding:0 18px;
  border-bottom:1px solid var(--border);flex-shrink:0;overflow:hidden
}
.brand-logo-img{width:28px;height:28px;max-width:28px;max-height:28px;object-fit:contain;flex-shrink:0;display:block}
.brand-logo-wide{max-width:100%;max-height:34px;width:auto;height:auto;object-fit:contain;flex-shrink:0;display:block}
.brand-home{display:inline-flex;align-items:center;outline:none}
.brand-home:hover{opacity:.85}
.brand-meta{text-align:left}
.brand-logo{
  width:28px;height:28px;border-radius:8px;background:linear-gradient(135deg,#ff3b30,#f0763f);
  color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;flex-shrink:0;
}
.brand-txt{font-weight:650;font-size:15px;letter-spacing:.2px;white-space:nowrap;overflow:hidden}
.brand-sub{font-size:12px;color:var(--muted);font-weight:400}

.nav{flex:1;overflow-y:auto;padding:10px 10px 20px}
.nav-group{margin-bottom:2px}
.nav-item,.nav-parent{
  display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:8px;
  color:var(--text-2);cursor:pointer;user-select:none;font-size:13px;position:relative;
  transition:background .15s,color .15s;
}
.nav-item:hover,.nav-parent:hover{background:#f2f2f7;color:var(--text)}
.nav-item.active{background:var(--primary-soft);color:var(--primary);font-weight:600}
.nav-parent.has-active{color:var(--primary);font-weight:600}
.nav-ico{width:18px;height:18px;flex-shrink:0;opacity:.85}
.nav-item.active .nav-ico{opacity:1}
.nav-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nav-arrow{width:12px;height:12px;transition:transform .2s;opacity:.55;flex-shrink:0}
.nav-group.open .nav-arrow{transform:rotate(90deg)}
.nav-children{max-height:0;overflow:hidden;transition:max-height .24s ease}
.nav-group.open .nav-children{max-height:420px}
.nav-child{
  display:block;padding:8px 12px 8px 40px;border-radius:8px;color:var(--text-2);
  font-size:13px;margin-top:1px;position:relative;transition:background .15s,color .15s;
}
.nav-child:hover{background:#f2f2f7;color:var(--text)}
.nav-child.active{background:var(--primary-soft);color:var(--primary);font-weight:600}
.nav-child::before{
  content:'';position:absolute;left:22px;top:50%;transform:translateY(-50%);
  width:5px;height:5px;border-radius:50%;background:#cbd3e0;
}
.nav-child.active::before{background:var(--primary)}

/* ---------------- 主区 ---------------- */
.main{margin-left:var(--sidebar-w);min-height:100vh;display:flex;flex-direction:column;transition:margin .22s}
/* 知识库页面: 隐藏全局左侧导航, 但保留 brand/LOGO 在原来左上角位置; 内容区直接铺满 */
body.no-sidebar .sidebar{height:var(--header-h);overflow:hidden;background:#fff;border-right:1px solid var(--border)}
body.no-sidebar .sidebar .brand{pointer-events:auto}
body.no-sidebar .sidebar .nav,
body.no-sidebar .sidebar .kb-nav-cats,
body.no-sidebar .main{margin-left:0}
body.no-sidebar .menu-toggle{display:none}
body.no-sidebar .header{padding-left:calc(var(--sidebar-w) + 20px)}
body.no-sidebar .topnav{margin-left:0}
.header{
  height:var(--header-h);background:#fff;border-bottom:1px solid var(--border);
  display:flex;align-items:center;padding:0 20px;gap:14px;position:sticky;top:0;z-index:40;
}
.crumb{font-size:15px;font-weight:600;color:var(--text)}
.crumb small{font-weight:400;color:var(--muted);margin-left:8px;font-size:13px}
.topnav{display:flex;align-items:center;gap:8px;flex:1;min-width:0;margin-left:6px}
.topnav a{display:inline-flex;align-items:center;white-space:nowrap;padding:6px 14px;border-radius:6px;font-size:13px;font-weight:600;color:var(--primary);background:rgba(87,96,106,.08);border:1px solid rgba(87,96,106,.28);text-decoration:none;transition:background .15s,color .15s,border-color .15s}
.topnav a .tn-ico{width:16px;height:16px;margin-right:6px;flex-shrink:0}
.topnav a:hover{background:rgba(87,96,106,.16);border-color:rgba(87,96,106,.45);color:var(--primary)}
.topnav a.active{background:var(--primary);color:#fff;border-color:var(--primary)}
.topnav a.active .tn-ico{color:#fff}
.topnav a.strong{font-weight:700}
.topnav-dl{display:inline-flex;align-items:center;white-space:nowrap;padding:6px 14px;border-radius:6px;font-size:13px;font-weight:700;color:var(--primary);background:rgba(87,96,106,.08);border:1px solid rgba(87,96,106,.28);text-decoration:none;cursor:pointer;transition:background .15s,color .15s,border-color .15s}
.topnav-dl .tn-ico{width:16px;height:16px;margin-right:6px;flex-shrink:0}
.topnav-dl:hover{background:rgba(87,96,106,.16);border-color:rgba(87,96,106,.45);color:var(--primary)}


.form-row .hint{font-size:12px;color:var(--muted);margin-top:4px;line-height:1.5}
.header-right{margin-left:auto;display:flex;align-items:center;gap:12px}
.shop-switch{display:flex;align-items:center;gap:6px;padding:5px 10px;border:1px solid var(--border);border-radius:8px;background:#fff;color:var(--text-2);font-size:13px;max-width:340px}
.shop-switch svg{flex-shrink:0;opacity:.7}
.shop-switch select{border:none;background:transparent;color:var(--text);font-size:13px;font-weight:600;outline:none;max-width:278px;cursor:pointer;text-overflow:ellipsis}
.shop-switch select:focus{outline:none}
.userbox{display:flex;align-items:center;gap:9px;padding:5px 10px;border-radius:8px;cursor:pointer;position:relative}
.userbox:hover{background:#f2f2f7}
.avatar{
  width:28px;height:28px;border-radius:50%;background:var(--primary);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex-shrink:0;
  overflow:hidden;
}
.avatar img{width:100%;height:100%;object-fit:cover;display:block}
.uname{font-size:13px;line-height:1.2}
.urole{font-size:12px;color:var(--muted)}
.dropdown{
  position:absolute;right:0;top:calc(100% + 6px);background:#fff;border:1px solid var(--border);
  border-radius:10px;box-shadow:var(--shadow);min-width:150px;padding:5px;display:none;z-index:60;
}
.dropdown.show{display:block}
.dropdown a{display:block;padding:8px 12px;border-radius:6px;color:var(--text-2);font-size:13px}
.dropdown a:hover{background:#f2f2f7}
.content{padding:18px 20px 40px;flex:1}

/* ============ v1.8.517 分区标题(.sec-hd) ============
   原先 .sec-hd / .sec-hd h2 / .sec-hd .sub 在 CSS 中完全无定义, 走浏览器默认 h2 样式
   (粗大黑体、无间距控制), dashboard 单页就有 9 处, 是明显的"毛坯"点。
   此处补: 左侧色条锚点 + 标题/副标题字号层级 + 间距。仅新增, 不影响 .card-hd。 */
.sec-hd{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:0 0 12px;padding-left:11px;position:relative}
.sec-hd::before{content:'';position:absolute;left:0;top:3px;bottom:3px;width:3px;border-radius:2px;background:var(--primary)}
.sec-hd h2{margin:0;font-size:15px;font-weight:650;color:var(--text);letter-spacing:.2px}
.sec-hd .sub{font-size:13px;color:var(--muted);font-weight:400}

/* v1.8.517 卡片交互层次: 原先 .card 无 hover 反馈, 页面缺少可交互感。
   box-shadow 不占布局空间, 无回流风险。 */
.card{transition:box-shadow .15s ease,border-color .15s ease}
.card:hover{box-shadow:var(--shadow-3);border-color:#dbe2ee}

/* ---------------- 卡片 ---------------- */
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}
.card+.card{margin-top:14px}
.card-hd{
  padding:13px 16px;border-bottom:1px solid var(--border-2);display:flex;align-items:center;gap:10px;flex-wrap:wrap;
}
.card-hd h3{margin:0;font-size:15px;font-weight:650}
.card-hd .sub{font-size:12px;color:var(--muted);font-weight:400;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.card-hd .right{margin-left:auto;display:flex;gap:8px;align-items:center;flex-wrap:wrap;flex-shrink:0}
.card-bd{padding:16px}
.card-bd.tight{padding:10px 12px}
/* 筛选条吸顶(仅数据分析分区): 随页面向下滚动保持停留在顶栏下方, 便于随时调整筛选 */
body.sec-analysis .fb-bar{position:sticky;top:var(--header-h);z-index:30}

/* ---------------- KPI ---------------- */
.kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(178px,1fr));gap:12px}
/* 指标卡固定一行 N 个 (用于需要明确列数的页面, 如进店关键词/推荐流量=6 个) */
.kpi-grid.six{grid-template-columns:repeat(6,minmax(0,1fr))}
@media (max-width:1200px){.kpi-grid.six{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media (max-width:860px){.kpi-grid.six{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:560px){.kpi-grid.six{grid-template-columns:repeat(2,minmax(0,1fr))}}
/* 库存概览按仓类型(B仓/C仓)分组的小标题 */
.kpi-group-label{font-size:13px;font-weight:600;color:var(--text);margin:2px 0 8px;padding-left:9px;position:relative}
.kpi-group-label::before{content:'';position:absolute;left:0;top:1px;bottom:1px;width:3px;border-radius:2px;background:var(--primary)}
.kpi-grid + .kpi-group-label{margin-top:14px}
.kpi{
  background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:14px 15px;
  box-shadow:var(--shadow);position:relative;overflow:hidden;transition:transform .15s,box-shadow .15s;
}
.kpi:hover{transform:translateY(-1px);box-shadow:0 4px 20px rgba(16,24,40,.09)}
.kpi::after{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--primary);opacity:.85}
.kpi.k2::after{background:#7c5cf0}.kpi.k3::after{background:#ff3b30}
.kpi.k4::after{background:#34c759}.kpi.k5::after{background:#ff9500}
.kpi.k6::after{background:#98a2ad}.kpi.k7::after{background:#ec4899}
/* 财务分析 KPI 正负色 (涨/盈=红, 亏=绿, 见 --up/--down) */
.kpi.k1::after{background:var(--primary)}
.kpi.pos .kpi-v{color:var(--down)}
.kpi.neg .kpi-v{color:var(--up)}
.kpi.k1 .kpi-v{color:var(--primary)}
/* 补货概览分组配色: kc=C仓/直送(青绿), kb=B仓(商)京东自营渠道(蓝) */
.kpi.kc{background:#eafaf7}
.kpi.kc::after{background:#14b8a6}
.kpi.kc .kpi-v{color:#0d9488}
.kpi.kb{background:var(--primary-soft)}
.kpi.kb::after{background:var(--primary)}
.kpi.kb .kpi-v{color:var(--primary-dark)}
/* 表格内正负值着色 */
table.tbl td.num.pos{color:var(--down);font-weight:600}
table.tbl td.num.neg{color:var(--up);font-weight:600}
/* 产品名称单元格: 允许换行, 限制最大宽度 */
.pname{max-width:240px;word-break:break-word}
/* ============ v1.8.517 KPI 卡片色块化 ============
   原来 KPI 是"白卡 + 3px 细彩条", 19 个页面里绝大多数还是默认白卡, 整体偏素。
   此处把已验证过的 .kpi.kb/.kc 模式(淡背景 + 彩条 + 彩数字)推广到默认卡与 k2~k7:
     ① 默认 .kpi 用 1 类选择器, 优先级低于 .kpi.kb/.kc(2 类), 不影响补货页既有配色;
     ② .kpi .kpi-v 用 2 类选择器, 优先级低于 .kpi.pos/.neg .kpi-v(3 类), 财务涨跌红绿不被覆盖;
     ③ k2~k7 与现有 ::after 彩条同色系, 仅新增淡背景与彩色数字。
   仅改颜色/背景, 不动任何布局与尺寸。 */
.kpi{background:var(--info-soft)}
.kpi .kpi-v{color:var(--primary-dark)}
.kpi.k2{background:var(--purple-soft)} .kpi.k2 .kpi-v{color:#6d45e0}
.kpi.k3{background:var(--danger-soft)}  .kpi.k3 .kpi-v{color:#d13c48}
.kpi.k4{background:var(--success-soft)} .kpi.k4 .kpi-v{color:#0f8f6a}
.kpi.k5{background:var(--warning-soft)} .kpi.k5 .kpi-v{color:#c77700}
.kpi.k6{background:var(--cyan-soft)}    .kpi.k6 .kpi-v{color:#0369a1}
.kpi.k7{background:var(--pink-soft)}    .kpi.k7 .kpi-v{color:#be185d}
/* 修复: 原 .kpi.k1 .kpi-v(3 类) 定义位置在 .kpi.pos/.neg(3 类) 之后, 同优先级后者胜出,
   导致财务页"涨/盈=红、亏=绿"被 k1 的蓝色覆盖而失效。此处在末尾重申, 恢复涨跌语义。 */
.kpi.pos .kpi-v{color:var(--down)}
.kpi.neg .kpi-v{color:var(--up)}
/* ============ v1.8.518 KPI 回归克制(高级感) ============
   v1.8.517 的 8 色糖果淡背景实际效果"花哨"而非"高级"——高级感的核心是少用色:
   数字与留白才是主角。本版回退为统一白卡, 但用更柔的阴影/更深的数字/淡化的彩条提升质感:
     · 统一白底(kb/kc 补货分组语义淡背景不受影响, 2 类优先级在 1 类之上);
     · 彩条保留但降不透明度(.5), 保留分类信息, 视觉更安静;
     · 数字统一近黑 #111827, tabular-nums 等宽数字, 字距收紧;
     · 卡片阴影更柔更立体, 边框更淡。
   注意本块必须在 v1.8.517 块之后(覆盖糖果色); 末尾重申 pos/neg 保证涨跌色最终生效。 */
.kpi,.kpi.k2,.kpi.k3,.kpi.k4,.kpi.k5,.kpi.k6,.kpi.k7{background:#fff}
.kpi .kpi-v,.kpi.k2 .kpi-v,.kpi.k3 .kpi-v,.kpi.k4 .kpi-v,.kpi.k5 .kpi-v,.kpi.k6 .kpi-v,.kpi.k7 .kpi-v{color:#111827}
.kpi{border-color:#eef0f4;box-shadow:0 1px 2px rgba(16,24,40,.03),0 6px 20px rgba(16,24,40,.045)}
.kpi::after{opacity:.5}
.kpi-v{font-variant-numeric:tabular-nums}
.kpi-t{font-weight:500}
.kpi.pos .kpi-v{color:var(--down)}
.kpi.neg .kpi-v{color:var(--up)}
.kpi-t{font-size:13px;color:var(--muted);display:flex;align-items:center;gap:5px}
.kpi-v{font-size:28px;font-weight:680;margin:6px 0 4px;letter-spacing:-.4px;line-height:1.15}
.kpi-v small{font-size:13px;font-weight:500;color:var(--muted);margin-left:2px}
.kpi-c{font-size:12px;display:flex;align-items:center;gap:5px;color:var(--muted)}
.chg{font-weight:600;display:inline-flex;align-items:center;gap:2px}
.chg.up{color:var(--up)}.chg.down{color:var(--down)}.chg.flat{color:var(--muted)}
/* 关键词色标(年度趋势页/选词助手) */
.kwtag{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:6px;vertical-align:middle;flex:0 0 auto}

/* ---------------- 表单 ---------------- */
.filters{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.fld{display:flex;flex-direction:column;gap:5px}
.fld>label{font-size:12px;color:var(--muted);font-weight:500}
/* 卡片头部横向内联筛选 (如 SKU 补货明细右上角筛选) */
.fld.row{flex-direction:row;align-items:center;gap:6px}
.fld.row>label{white-space:nowrap;margin-bottom:0}
.fld.row select,.fld.row input{height:30px;font-size:13px}
/* 月份平铺 (毛保分析等替代下拉) */
.month-tiles{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.month-tile{height:32px;padding:0 14px;border:1px solid #d9d9de;border-radius:7px;background:#fff;
  font-size:13px;color:var(--text);cursor:pointer;font-family:inherit;transition:all .15s;white-space:nowrap}
.month-tile:hover{background:#f2f2f7;border-color:#c3ccdb}
.month-tile.on{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:600}
/* 月份折叠按钮(「更早 ▼」), 与普通月份chip 区分, 暗示这是一个展开动作 */
.month-tile.more{background:#f4f6fa;border-style:dashed;color:var(--muted);font-weight:500;padding:0 10px}
.month-tile.more:hover{background:#e9eef5;border-color:#b8c2d1;color:var(--text)}
.month-tile.older{background:#fafbfd;color:var(--muted)}
input[type=text],input[type=password],input[type=date],input[type=number],select,textarea{
  height:34px;padding:0 10px;border:1px solid #d9d9de;border-radius:7px;background:#fff;
  font-size:13px;color:var(--text);outline:none;font-family:inherit;transition:border .15s,box-shadow .15s;
}
textarea{height:auto;padding:8px 10px;resize:vertical}
input:focus,select:focus,textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(87,96,106,.11)}
input[disabled],select[disabled]{background:#f6f8fb;color:var(--muted)}
select{cursor:pointer;padding-right:26px}
/* v1.8.558: 所有下拉选择筛选按钮折叠态蓝底白字, 展开内容白底黑字 */
select:not([disabled]){
  background:var(--primary) !important;
  color:#fff !important;
  border-color:var(--primary) !important;
}
select:not([disabled]):focus{
  background:var(--primary-dark) !important;
  color:#fff !important;
  border-color:var(--primary-dark) !important;
  box-shadow:0 0 0 3px rgba(87,96,106,.18) !important;
}
/* 展开的下拉选项保持白底黑字(不受折叠态蓝底影响) */
select option,
select optgroup{
  background:#fff !important;
  color:#111827 !important;
}
select option:checked{
  /* v1.8.678 热修: 禁用 rgba —— Windows Chrome 原生下拉浮层会把半透明底合成到黑色上,
     选中项悬停时整行渲染成纯黑+深字(隐形)。option 背景必须用实色。 */
  background:#e6eaf1 !important;
  color:#111827 !important;
}
/* 顶栏店铺切换器属全局 chrome 而非筛选器, 保持透明态 */
.shop-switch select{ background:transparent !important; color:var(--text) !important; border-color:transparent !important; }
.btn{
  height:34px;padding:0 15px;border:1px solid #d9d9de;border-radius:7px;background:#fff;color:var(--text-2);
  font-size:13px;cursor:pointer;display:inline-flex;align-items:center;gap:6px;font-family:inherit;
  transition:all .15s;white-space:nowrap;
}
.btn:hover{border-color:#c3ccdb;background:#fafbfd}
.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn.primary:hover{background:var(--primary-dark);border-color:var(--primary-dark)}
.btn.danger{color:var(--up);border-color:#f3c9cd}
.btn.danger:hover{background:#fef2f3;border-color:#e8a4ab}
.btn.sm{height:28px;padding:0 10px;font-size:13px;border-radius:6px}
.btn:disabled{opacity:.55;cursor:not-allowed}
.btn-group{display:inline-flex;border:1px solid #d9d9de;border-radius:7px;overflow:hidden;background:#fff}
.btn-group button{
  height:32px;padding:0 13px;border:0;background:#fff;color:var(--text-2);cursor:pointer;
  font-size:13px;border-right:1px solid #ececf0;font-family:inherit;transition:all .15s;
}
.btn-group button:last-child{border-right:0}
.btn-group button:hover{background:#f2f2f7}
.btn-group button.on{background:var(--primary);color:#fff}
.metric-tabs{flex-wrap:wrap;border-radius:7px}
.metric-tabs button{white-space:nowrap}
.btn-group.sm button{height:28px;padding:0 10px;font-size:12px}
/* 卡片头部内联复选框 */
.chk-inline{display:inline-flex;align-items:center;gap:5px;font-size:13px;color:var(--text-2);cursor:pointer;white-space:nowrap}
.chk-inline input[type=checkbox]{width:16px;height:16px;margin:0;cursor:pointer}
.trend-ctrl{display:flex;flex-wrap:wrap;gap:18px;align-items:center}
.ctrl-grp{display:flex;align-items:center;gap:8px}
.ctrl-lab{font-size:12px;color:#7c7c80;font-weight:600;white-space:nowrap}
.sel{height:32px;border:1px solid #e3e8f0;border-radius:8px;padding:0 10px;background:#fff;color:#333;font-size:13px;font-family:inherit;outline:none;cursor:pointer}
.sel.sm{height:28px;font-size:12px;padding:0 8px}
.sel:focus{border-color:var(--primary)}
/* 筛选栏 input 与 select(.sel) 统一尺寸/字号, 消除对齐不齐 (input.inp 特异性需 ≥ input[type=*]) */
input.inp{height:32px;border:1px solid #e3e8f0;border-radius:8px;padding:0 10px;background:#fff;color:var(--text);font-size:13px;font-family:inherit;outline:none}
input.inp.blue{border-color:var(--primary);background:var(--primary-soft);color:var(--primary-dark);font-weight:600}

/* ---------------- 表格 ---------------- */
.tbl-wrap{overflow:auto;max-width:100%}
table.tbl{width:100%;border-collapse:collapse;font-size:13px}
table.tbl th,table.tbl td{padding:9px 11px;text-align:left;border-bottom:1px solid var(--border-2);white-space:nowrap}
table.tbl th{
  background:#fafbfd;color:var(--text-2);font-weight:600;font-size:13px;
  position:sticky;top:0;z-index:2;border-bottom:1px solid var(--border);
}
/* v1.8.517 表格可读性: 斑马纹 + 强化行悬停 + sticky 表头投影。
   50 行长表原先只有 1px 横线, 横向扫视易串行; 斑马纹取极淡底色, 不影响数值阅读。
   注意: XGrid 十字光标 .hl-row td 优先级更高且定义在后, 悬停/选中时仍会正确覆盖斑马纹。 */
table.tbl tbody tr:nth-child(even){background:var(--row-stripe)}
table.tbl tbody tr:hover{background:var(--row-hover)}
table.tbl th{box-shadow:0 1px 0 var(--border)}
table.tbl td.num,table.tbl th.num{text-align:right;font-variant-numeric:tabular-nums}
/* v1.8.199: SKU 补货明细表头排序 */
table.tbl th[data-sort]{cursor:pointer;user-select:none}
table.tbl th[data-sort]:hover{color:var(--primary-dark);background:var(--primary-soft)}
table.tbl th.sorted{color:var(--primary-dark);background:var(--primary-soft)}
table.tbl .muted{color:var(--muted)}
/* ============ XGrid: 通用数据明细表增强(排序 + 十字光标 + 通用着色) ============ */
/* v1.8.689: 去掉 position:relative —— 它以更高特异性覆盖基础规则的 position:sticky,
   导致可排序列(data-k)表头在固定高度 .tbl-wrap 内滚动时不再钉住(非排序列正常)。 */
table.tbl.xgrid thead th[data-k]{cursor:pointer;user-select:none;white-space:nowrap}
table.tbl.xgrid thead th[data-k]:hover{color:var(--primary-dark);background:var(--primary-soft)}
table.tbl.xgrid thead th.sorted{color:var(--primary-dark);background:var(--primary-soft)}
table.tbl.xgrid thead th .x-arr{font-size:12px;margin-left:3px;color:var(--primary-dark)}
table.tbl.xgrid tbody td{transition:background .06s}
/* v1.8.688: 十字光标浅色主题改黑灰色调(原 #fff7e6/#ffe8a3/#fdf3dc/#f4ecf8 淡黄淡紫系废弃) */
table.tbl.xgrid tbody tr.hl-row td{background:#f3f4f6}
table.tbl.xgrid tbody tr.hl-row td.x-c-hl{background:#e5e7eb}
table.tbl.xgrid tbody td.x-c-hl{background:#eceef1}
table.tbl.xgrid thead th.x-c-hl{background:#e5e7eb}
/* 通用分类着色(data-kind): money/rate 深色, cnt 中性, txt 主色; 负值红全局 */
table.tbl.xgrid td.x-neg{color:#dc2626;font-weight:600}
table.tbl.xgrid td[data-kind="money"],table.tbl.xgrid td.x-money{color:#14509a;font-weight:600}
table.tbl.xgrid td[data-kind="rate"],table.tbl.xgrid td.x-rate{color:#b45309;font-weight:600}
table.tbl.xgrid td[data-kind="cnt"],table.tbl.xgrid td.x-cnt{color:#334155;font-variant-numeric:tabular-nums}
table.tbl.xgrid td[data-kind="code"],table.tbl.xgrid td.x-code{color:#7c7c80;font-family:Consolas,Menlo,monospace;font-size:12px}
table.tbl.xgrid td[data-kind="dim"]{color:#111827;font-weight:600}
table.tbl .muted{color:var(--muted)}
/* v1.8.220: SKU 补货明细紧凑适配 - 固定布局填满容器宽度, 单屏尽量不横向滚动; 文本列省略号截断(悬停看全称) */
table.tbl.tbl-fit{table-layout:fixed;font-size:12px}
table.tbl.tbl-fit th{padding:5px 6px;white-space:nowrap}
table.tbl.tbl-fit td{padding:5px 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 单元格内重点色 (数据高亮: 建议补货量 / 导入新增·更新 等) */
.c-red{color:#ff3b30;font-weight:600}
.c-green{color:#34c759;font-weight:600}
.c-blue{color:#636366;font-weight:600}
.c-orange{color:#ff9500;font-weight:600}
.badge{display:inline-block;padding:2px 8px;border-radius:20px;font-size:12px;font-weight:500;line-height:18px}
.badge.blue{background:#eaf0ff;color:#636366}
.badge.green{background:#e6f7f1;color:#0f8f6a}
.badge.red{background:#fdeced;color:#d13c48}

/* ---------------- 运营工具(iframe 隔离) ---------------- */
/* .content 默认有 padding(18 20 40), 用负 margin 抵消, 让 iframe 铺满内容区,
   与工作台自身 CSS 完全隔离, 避免工具内部 .card/.btn/:root 变量冲突 */
.tool-frame{margin:-18px -20px -40px;background:#fff}
.tool-iframe{display:block;width:100%;height:calc(100vh - var(--header-h) - 58px);border:0;background:#fff}
@media (max-width:768px){
  .tool-frame{margin:-12px -12px -24px}
  .tool-iframe{height:calc(100vh - var(--header-h) - 36px)}
}
.badge.gray{background:#f1f3f7;color:#7c7c80}
.badge.orange{background:#fff4e5;color:#c77700}
.badge.purple{background:#f1ecfe;color:#6d45e0}
.badge.teal{background:#e6f7f4;color:#0f9b8e}
.badge.danger{background:#fdeced;color:#ff3b30;border:1px solid #f5c2c7}

/* ---------------- 词云 ---------------- */
.wordcloud{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;
  gap:6px 14px;padding:14px 10px;line-height:1.5}
.wordcloud .wc{font-weight:600;cursor:default;transition:transform .12s;white-space:nowrap}
.wordcloud .wc:hover{transform:scale(1.12);text-shadow:0 1px 4px rgba(0,0,0,.12)}

/* ---------------- 图表 ---------------- */
.chart{width:100%;height:320px}
.chart.sm{height:260px}
.chart.lg{height:400px}

/* 图表全屏放大 / 缩小 (v1.8.656: 按钮移到卡片标题右侧, 文字「全屏显示」更明显; 全屏时随行到容器右上角) */
.chart-fs-btn{position:static;display:inline-flex;align-items:center;height:24px;padding:0 12px;margin-left:10px;flex-shrink:0;border:1px solid var(--primary);background:var(--card);cursor:pointer;color:var(--primary);font-size:12px;font-weight:600;transition:all .15s;opacity:1}
.chart-fs-btn:hover{background:var(--primary);color:#fff}
.chart-fs-btn svg{width:13px;height:13px;display:block;pointer-events:none}
.chart-fs-btn.in-fs,.chart-fs .chart-fs-btn{position:absolute;top:14px;right:16px;width:auto;height:34px;padding:0 16px;margin-left:0;opacity:1;z-index:10;background:var(--card);color:var(--primary)}
.chart-fs .chart-fs-btn svg{width:13px;height:13px}
.chart-fs-btn.orphan{position:absolute;top:6px;right:8px;width:auto;height:26px;padding:0 10px;margin-left:0}
.chart-fs-btn svg{width:15px;height:15px;display:block;pointer-events:none}
.chart-fs{position:fixed!important;left:0;top:0;right:0;bottom:0;width:100vw!important;height:100vh!important;z-index:9998!important;background:var(--card,#fff)!important;margin:0!important;padding:14px!important;border-radius:0!important;box-shadow:none!important}
body.chart-fs-open{overflow:hidden}
.chart-fs .chart-fs-btn{top:14px;right:16px;width:auto;height:34px;padding:0 16px;opacity:1;background:var(--card);color:var(--primary);border-color:var(--primary)}
.chart-fs .chart-fs-btn:hover{background:var(--primary);color:#fff}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:14px}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:14px}
.grid-2>.card+.card,.grid-3>.card+.card{margin-top:0}
@media(max-width:1200px){.grid-2,.grid-3{grid-template-columns:1fr}}

/* ---------------- 提示 / 弹窗 ---------------- */
.alert{padding:11px 14px;border-radius:8px;font-size:13px;margin-bottom:14px;display:flex;gap:9px;align-items:flex-start}
.alert.info{background:#f0f2f4;color:#3f4750;border:1px solid #d8dde2}
.alert.ok{background:#ecfdf5;color:#065f46;border:1px solid #cdf0e1}
.alert.err{background:#fef2f2;color:#991b1b;border:1px solid #fbdcdc}
.alert.warn{background:#fffbeb;color:#92400e;border:1px solid #fdeec3}

.mask{position:fixed;inset:0;background:rgba(17,24,39,.42);z-index:100;display:none;align-items:center;justify-content:center;padding:20px}
.mask.show{display:flex}
.modal{background:#fff;border-radius:12px;width:100%;max-width:520px;max-height:88vh;overflow:auto;box-shadow:0 20px 60px rgba(0,0,0,.22)}
.modal.wide{max-width:800px}
.modal-hd{padding:15px 18px;border-bottom:1px solid var(--border-2);font-weight:650;display:flex;align-items:center}
.modal-hd .x{margin-left:auto;cursor:pointer;color:var(--muted);font-size:20px;line-height:1}
.modal-bd{padding:18px}
.modal-ft{padding:13px 18px;border-top:1px solid var(--border-2);display:flex;justify-content:flex-end;gap:9px}
.form-row{margin-bottom:14px}
.form-row>label{display:block;font-size:13px;color:var(--text-2);margin-bottom:6px;font-weight:500}
.form-row input,.form-row select,.form-row textarea{width:100%}
.form-row .hint{font-size:12px;color:var(--muted);margin-top:5px}

.toast{
  position:fixed;top:18px;left:50%;transform:translateX(-50%) translateY(-16px);background:#1c1c1e;color:#fff;
  padding:10px 18px;border-radius:8px;font-size:13px;z-index:200;opacity:0;transition:all .25s;pointer-events:none;
  box-shadow:0 8px 28px rgba(0,0,0,.2);
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.toast.ok{background:#0f8f6a}.toast.err{background:#d13c48}

.empty{text-align:center;padding:52px 20px;color:var(--muted)}
.empty .ic{font-size:40px;opacity:.4;margin-bottom:10px}
.empty h4{margin:0 0 6px;color:var(--text-2);font-size:15px;font-weight:600}
.empty p{margin:0;font-size:13px}

.pager{display:flex;gap:6px;align-items:center;justify-content:flex-end;padding:12px 16px;font-size:13px;color:var(--muted);flex-wrap:wrap}
.pager button{
  min-width:31px;height:29px;padding:0 8px;border:1px solid #d9d9de;background:#fff;border-radius:6px;
  cursor:pointer;font-size:13px;color:var(--text-2);font-family:inherit;
}
.pager button:hover:not(:disabled){border-color:var(--primary);color:var(--primary)}
.pager button.on{background:var(--primary);border-color:var(--primary);color:#fff}
.pager button:disabled{opacity:.4;cursor:not-allowed}

.chk{display:flex;align-items:center;gap:7px;cursor:pointer;font-size:13px;user-select:none}
.chk input{width:15px;height:15px;accent-color:var(--primary);cursor:pointer;margin:0}

.spin{
  width:15px;height:15px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;
  border-radius:50%;animation:sp .7s linear infinite;display:inline-block;
}
.spin.dark{border-color:rgba(87,96,106,.25);border-top-color:var(--primary)}
@keyframes sp{to{transform:rotate(360deg)}}
.loading-box{padding:48px;text-align:center;color:var(--muted)}

/* 登录页 */
.login-body{margin:0;padding:0}
.login-wrap{
  min-height:100vh;display:flex;background:#fff;
}
.login-left{
  position:relative;width:46%;min-width:420px;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;
}
.login-left-bg{
  position:absolute;inset:0;background:url('../img/jd-building.jpg') center/cover no-repeat;z-index:1;
}
.login-left-overlay{
  position:absolute;inset:0;background:linear-gradient(135deg,rgba(0,0,0,.86) 0%,rgba(0,0,0,.66) 55%,rgba(0,0,0,.48) 100%);z-index:2;
}
.login-left-content{
  position:relative;z-index:3;height:100%;display:flex;flex-direction:column;justify-content:space-between;padding:46px 52px 64px;color:#fff;box-sizing:border-box;
}
.login-left-logo{display:flex;align-items:center}
.login-left-logo img{height:40px;width:auto;max-width:100%;object-fit:contain;display:block;filter:drop-shadow(0 2px 10px rgba(0,0,0,.25))}

/* 品牌 LOGO 自定义设置 (授权管理页) */
.logo-setting{display:flex;gap:24px;align-items:flex-start;flex-wrap:wrap;border:1px solid var(--border);border-radius:12px;padding:16px;background:var(--bg)}
.logo-preview{width:200px;flex-shrink:0;text-align:center}
.logo-prev-img{max-width:100%;max-height:64px;height:auto;width:auto;object-fit:contain;border:1px solid var(--line,#e5e7eb);border-radius:10px;background:#fff;padding:10px}
.logo-prev-dark{background:#0f172a;border-color:#1e293b}
.logo-prev-meta{margin-top:10px;font-size:13px;font-weight:600;color:var(--text,#1c1c1e)}
.logo-hint{margin-top:4px;font-size:12px;color:var(--muted,#7c7c80);line-height:1.55}
.logo-actions{flex:1;min-width:240px;display:flex;flex-direction:column;gap:12px;padding-top:6px}
.ipt-file{display:block;font-size:13px;color:var(--muted,#7c7c80);max-width:360px}
.logo-btns{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.lnk-sep{flex:none;width:1px;height:22px;background:var(--border);margin:0 4px}
.logo-msg{font-size:13px;min-height:18px}
.logo-msg.ok{color:#16a34a}
.logo-msg.err{color:#dc2626}
.logo-sep{border:none;border-top:1px dashed var(--line,#e5e7eb);margin:24px 0}
.login-left-hero{max-width:520px}
.login-left-hero h1{
  margin:0 0 14px;font-size:42px;font-weight:700;line-height:1.18;letter-spacing:1px;text-shadow:0 4px 20px rgba(0,0,0,.25);
}
.login-left-hero p{
  margin:0;font-size:20px;opacity:.92;line-height:1.6;letter-spacing:.6px;
}
.login-right{
  flex:1;display:flex;align-items:center;justify-content:center;background:#f6f8fc;padding:40px;
}
.login-card{
  background:#fff;border-radius:18px;box-shadow:0 20px 60px rgba(31,41,55,.10);width:100%;max-width:420px;padding:42px 40px;
}
.login-welcome{margin-bottom:30px}
.login-welcome h2{margin:0 0 8px;font-size:28px;font-weight:700;color:#111827}
.login-welcome p{margin:0;font-size:13px;color:#7c7c80}
.login-card .form-row{margin-bottom:20px}
.login-card .form-row label{display:block;margin-bottom:8px;font-size:13px;color:#374151;font-weight:500}
.login-card input[type="text"],
.login-card input[type="password"]{
  width:100%;height:46px;padding:0 15px;border:1px solid #e5e7eb;border-radius:10px;font-size:13px;color:#111827;background:#fff;box-sizing:border-box;transition:border-color .15s,box-shadow .15s;
}
.login-card input[type="text"]:focus,
.login-card input[type="password"]:focus{
  outline:none;border-color:#636366;box-shadow:0 0 0 3px rgba(87,96,106,.12);
}
.login-options{
  display:flex;align-items:center;justify-content:flex-start;gap:18px;margin:6px 0 26px;font-size:13px;
}
.login-remember{
  display:flex;align-items:center;gap:7px;color:#6c6c70;cursor:pointer;
}
.login-remember input{width:15px;height:15px;accent-color:#636366;cursor:pointer}
.login-forgot{
  color:#636366;text-decoration:none;transition:opacity .15s;margin-left:auto;
}
.login-forgot:hover{opacity:.8}
.login-card .btn.primary{
  width:100%;height:46px;justify-content:center;font-size:15px;font-weight:600;border-radius:10px;letter-spacing:2px;
}
.login-card .alert.err{
  margin-bottom:18px;padding:11px 14px;background:#fef2f2;color:#b91c1c;border:1px solid #fecaca;border-radius:9px;font-size:13px;
}
.login-tip-pop{
  position:fixed;left:50%;bottom:60px;transform:translateX(-50%) translateY(20px);padding:12px 22px;background:rgba(17,24,39,.88);color:#fff;font-size:13px;border-radius:8px;opacity:0;pointer-events:none;transition:opacity .25s,transform .25s;z-index:9999;
}
.login-tip-pop.show{opacity:1;transform:translateX(-50%) translateY(0)}

@media(max-width:900px){
  .login-left{display:none}
  .login-right{width:100%;padding:24px}
  .login-card{padding:34px 26px}
}

@media(max-width:900px){
  .sidebar{transform:translateX(-100%)}
  .sidebar.open{transform:none;box-shadow:0 0 40px rgba(0,0,0,.16)}
  .main{margin-left:0}
  .menu-toggle{display:flex !important}
}
.menu-toggle{display:none;width:32px;height:32px;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:7px;background:#fff;cursor:pointer}

/* ===================== 团队协作模块 ===================== */
/* —— 统一视觉体系: 模块标识 / 分区卡片 / 控制条 —— */
/* 模块标识: 每个页面顶部控制条左侧的徽标 + 标题 + 一句话说明, 明确当前所在模块 */
.page-id{display:flex;align-items:center;gap:10px;margin-right:6px}
.page-id .pi-ico{width:34px;height:34px;border-radius:9px;background:linear-gradient(135deg,var(--primary),#5b8bff);color:#fff;display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:0 3px 8px rgba(43,108,255,.22)}
.page-id .pi-ico svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.page-id .pi-tx{display:flex;flex-direction:column;line-height:1.25}
.page-id .pi-name{font-size:15px;font-weight:700;color:var(--text)}
.page-id .pi-desc{font-size:12px;color:var(--muted)}
/* 分区卡片(通用容器): 页面内各板块用它包裹, 一眼可辨 */
.panel{background:#fff;border:1px solid var(--border);border-radius:12px;padding:16px 18px;margin-bottom:14px;box-shadow:0 1px 3px rgba(16,24,40,.06)}
.panel-h{display:flex;align-items:center;gap:9px;margin-bottom:14px}
.panel-h .ph-bar{width:4px;height:15px;border-radius:3px;background:var(--primary);flex-shrink:0}
.panel-h h3,.panel-h .ph-t{font-size:15px;font-weight:600;color:var(--text);margin:0}
.panel-h .ph-sub{margin-left:auto;font-size:12px;color:var(--muted);display:flex;align-items:center;gap:6px}
.panel-h .ph-act{margin-left:auto;display:flex;align-items:center;gap:6px}
/* 控制条内按钮(非小号)统一高度, 与下拉/搜索框等高对齐 */
.team-bar .btn:not(.sm){height:36px;display:inline-flex;align-items:center;white-space:nowrap}
/* 搜索框 / 下拉 focus 统一主色描边 */
.tk-search:focus,.tk-filter select:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft,rgba(43,108,255,.15));outline:none}

.team-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:14px 0 12px;background:#f7f9fc;border:1px solid var(--border);border-radius:12px;padding:10px 14px}
.team-bar .grow{flex:1}
.team-bar .tk-tabs{margin:0}
/* 任务归属快速筛选 chips(日程看板 / 河道看板 共用) */
.view-chips{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 12px}
.view-chip{cursor:pointer;user-select:none;font-size:13px;padding:5px 14px;border-radius:999px;border:1px solid var(--border);background:#fff;color:var(--muted);transition:.15s}
.view-chip:hover{border-color:var(--primary);color:var(--primary)}
.view-chip.on{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:600}
/* 已归档筛选 chip: 选中态用琥珀色区分归档视图 */
.chip-arch.on{background:#e8a33d;border-color:#e8a33d;color:#fff;font-weight:600}
/* 团队协作已移除「团队」切换层级, 统一使用「全员」, 隐藏下拉 */
.team-sel{display:none}
.city-sel{height:36px;border:1px solid var(--border);border-radius:8px;padding:0 10px;background:#fff;font-size:13px;color:var(--text);min-width:120px}
.city-sel:focus{outline:none;border-color:var(--primary)}
.team-sel:focus{outline:none;border-color:var(--primary)}
.btn{border:1px solid var(--border);background:#fff;color:var(--text);padding:7px 14px;border-radius:8px;font-size:13px;cursor:pointer;transition:.15s}
.btn:hover{border-color:var(--primary);color:var(--primary)}
.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}
.btn.primary:hover{opacity:.9;color:#fff}
.btn.ghost{background:#f2f2f7}
.btn.sm{padding:4px 9px;font-size:12px;border-radius:6px}
.btn.danger{color:#ff3b30;border-color:#f3c2c6}
.btn.danger:hover{background:#fee2e2;color:#ff3b30}
/* 归档/取消归档按钮: 中性琥珀描边, 与 primary/danger 区分 */
.btn.archive{color:#b9821f;border-color:#f0d9ad;background:#fffaf0}
.btn.archive:hover{background:#fdf2dd;color:#a06f15;border-color:#e8a33d}

.kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:14px 0}
.kpi{background:#fff;border:1px solid var(--border);border-radius:12px;padding:14px 16px}
.kpi .n{font-size:28px;font-weight:700;line-height:1.1}
.kpi .l{font-size:13px;color:var(--muted);margin-top:4px}
.kpi.warn .n{color:#ff3b30}
.kpi.blue .n{color:var(--primary)}

.dist{background:#fff;border:1px solid var(--border);border-radius:12px;padding:14px 16px;margin-bottom:12px}
.dist h4{margin:0 0 10px;font-size:13px}
.bar{display:flex;align-items:center;gap:10px;margin-bottom:8px;font-size:13px}
.bar .bl{width:64px;color:var(--muted);flex-shrink:0;text-align:right}
.bar .bt{flex:1;background:#f1f3f7;border-radius:6px;height:18px;overflow:hidden}
.bar .bf{height:100%;border-radius:6px;background:var(--primary);transition:width .3s}
.bar .bv{width:34px;text-align:right;color:var(--text);flex-shrink:0}

.kanban{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:14px 0}
.kcol{background:#f7f9fc;border:1px solid var(--border);border-radius:12px;padding:10px;min-height:200px}
.kcol h4{margin:2px 4px 10px;font-size:13px;display:flex;align-items:center;gap:6px}
.kcol h4 .dot{width:9px;height:9px;border-radius:50%}
.kcard{background:#fff;border:1px solid var(--border);border-radius:10px;padding:10px;margin-bottom:10px;cursor:grab}
.kcard:active{cursor:grabbing}
.kcard .kt{font-size:13px;font-weight:600;margin-bottom:6px;line-height:1.35}
.kcard .kmeta{display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:12px;color:var(--muted)}
.kcard .kacts{display:flex;gap:4px;margin-top:8px}
.kcard.dragging{opacity:.4}
.kcol.drop{border-color:var(--primary);background:#eef2ff}

.badge{display:inline-flex;align-items:center;padding:1px 8px;border-radius:9px;font-size:12px;font-weight:600;line-height:1.7;white-space:nowrap}
.pri-low{background:#eef2f7;color:#5b6b82}
.pri-normal{background:#eff1f3;color:#636366}
.pri-high{background:#fff1e6;color:#e8841a}
.pri-urgent{background:#fee2e2;color:#ff3b30}
.st-todo{background:#eef2f7;color:#5b6b82}
.st-doing{background:#e6f7ee;color:#1a9c5b}
.st-done{background:#eff1f3;color:#636366}
.av{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:var(--primary-soft);color:var(--primary);font-size:12px;font-weight:700;margin-right:4px;overflow:hidden}.av img{width:100%;height:100%;object-fit:cover;display:block}

/* ===================== 团队协作 - 河道看板(状态列看板) ===================== */
.river{margin:14px 0}
.river .rcols{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;align-items:start}
.rcol{background:#f7f9fc;border:1px solid var(--border);border-radius:12px;padding:10px;min-height:240px;display:flex;flex-direction:column}
.rcol-h{display:flex;align-items:center;gap:8px;margin:2px 4px 12px;font-size:13px;font-weight:600;color:var(--text)}
.rcol-h .ch-ico{display:inline-flex;width:26px;height:26px;border-radius:8px;align-items:center;justify-content:center;background:#fff;border:1px solid var(--border)}
.rcol-h .ch-ico svg{width:15px;height:15px}
.rcol-h .rcol-name{flex:1}
.rcol-h .rcol-cnt{font-size:12px;font-weight:600;color:var(--muted);background:#fff;border:1px solid var(--border);border-radius:11px;padding:1px 10px}
.rcol-body{flex:1;min-height:80px;border-radius:8px;padding:2px;transition:background .15s,border-color .15s}
.rcol-body.drop{border:1px dashed var(--primary);background:#eef2ff}
.rcol.st-todo .ch-ico{color:#5b6b82}
.rcol.st-doing .ch-ico{color:#1a9c5b}
.rcol.st-done .ch-ico{color:#636366}
.river .kcard{background:#fff;border:1px solid var(--border);border-radius:10px;padding:10px 11px;margin-bottom:10px;cursor:grab;box-shadow:0 1px 2px rgba(16,24,40,.04);transition:box-shadow .15s,transform .12s,opacity .15s}
.river .kcard:hover{box-shadow:0 4px 14px rgba(16,24,40,.10)}
.river .kcard:active{cursor:grabbing}
.river .kcard.dragging{opacity:.4}
.river .kcard.st-done .kt{text-decoration:line-through;color:var(--muted)}
.river .kcard .kt{font-size:13px;font-weight:600;margin-bottom:8px;line-height:1.4;color:var(--text)}
.river .kcard .kmeta{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-bottom:9px}
.river .kcard .chip.due{display:inline-flex;align-items:center;gap:3px;font-size:12px;color:var(--muted);background:#f1f3f7;border-radius:8px;padding:1px 8px}
.river .kcard .chip.due.red{color:#ff3b30;background:#fdeced}
.river .kcard .kfoot{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}
.river .kcard .kfoot .av{width:20px;height:20px;font-size:12px}
.river .kcard .kfoot .an{max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.river .kcard .kfoot .kpct{margin-left:auto;font-weight:600;color:var(--text-2)}
.river .kcard .kfoot .kdone{margin-left:auto;height:24px;padding:0 10px;font-size:12px;border-radius:6px}
.river .kcard .kbar{height:5px;background:#eef1f5;border-radius:4px;overflow:hidden;margin-top:8px}
.river .kcard .kbar i{display:block;height:100%;border-radius:4px;background:var(--primary)}
.river .kcard.st-todo .kbar i{background:#5b6b82}
.river .kcard.st-doing .kbar i{background:#1a9c5b}
.river .kcard.st-done .kbar i{background:#636366}
.river .kcard.st-todo.overdue .kt{color:#ff3b30}
.river .cell-empty{text-align:center;color:var(--muted);font-size:13px;padding:24px 8px;border:1px dashed var(--border);border-radius:10px;margin:2px}

/* 河道看板控制条: 搜索 / 优先级 / 执行人 / 项目 合并单行靠左对齐 */
.river-bar{gap:8px}
.river-bar .tk-search{flex:0 1 190px;min-width:140px}
.river-bar select{height:36px;border:1px solid var(--border);border-radius:8px;padding:0 10px;font-size:13px;background:#fff;color:var(--text)}
.river-panel{padding:14px 16px}
/* 三列按状态柔和着色, 强化状态区分同时保持清爽 */
.rcol.st-todo{background:#f6f8fb}
.rcol.st-doing{background:#f3f9f5}
.rcol.st-done{background:#f4f7fe}
/* 列头状态图标 / 计数徽标 与状态呼应 */
.rcol.st-todo .ch-ico{background:#eef2f7;color:#5b6b82}
.rcol.st-doing .ch-ico{background:#e6f7ee;color:#1a9c5b}
.rcol.st-done .ch-ico{background:#eff1f3;color:#636366}
.rcol.st-todo .rcol-cnt{background:#eef2f7;color:#5b6b82;border-color:#d9d9de}
.rcol.st-doing .rcol-cnt{background:#e6f7ee;color:#1a9c5b;border-color:#cdeadd}
.rcol.st-done .rcol-cnt{background:#eff1f3;color:#636366;border-color:#d3d9de}
/* 卡片左侧状态色条, 一眼可辨状态 */
.river .kcard{position:relative;padding-left:15px}
.river .kcard:before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px;border-radius:10px 0 0 10px}
.river .kcard.st-todo:before{background:#5b6b82}
.river .kcard.st-doing:before{background:#1a9c5b}
.river .kcard.st-done:before{background:#636366}

.sched{margin:14px 0}
.sched .day{background:#fff;border:1px solid var(--border);border-radius:12px;padding:12px 16px;margin-bottom:12px}
.sched .day .dh{font-size:15px;font-weight:700;margin-bottom:8px;display:flex;align-items:center;gap:8px}
.sched .day.overdue{border-color:#f3c2c6;background:#fff7f7}
.sched .row{display:flex;align-items:center;gap:8px;padding:6px 0;border-top:1px dashed var(--border);font-size:13px}
.sched .row:first-of-type{border-top:none}

.proj-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;margin:14px 0}
.proj{background:#fff;border:1px solid var(--border);border-radius:12px;padding:16px}
.proj h4{margin:0 0 6px;font-size:15px}
.proj .pd{font-size:13px;color:var(--muted);min-height:38px}
.proj .pstat{font-size:12px;color:var(--muted);margin:8px 0}
.proj .pbar{height:8px;background:#f1f3f7;border-radius:5px;overflow:hidden;margin:8px 0}
.proj .pbar i{display:block;height:100%;background:var(--primary)}
.proj .pacts{display:flex;gap:6px;margin-top:10px}

.mask{position:fixed;inset:0;background:rgba(15,23,42,.45);display:none;align-items:center;justify-content:center;z-index:1000}
.mask.show{display:flex}
.modal{background:#fff;border-radius:14px;width:min(460px,92vw);max-height:88vh;overflow:auto;padding:20px}
.modal h3{margin:0 0 14px;font-size:15px}
.fld{margin-bottom:12px}
.fld label{display:block;font-size:13px;color:var(--muted);margin-bottom:5px}
.fld input,.fld select,.fld textarea{width:100%;border:1px solid var(--border);border-radius:8px;padding:8px 10px;font-size:13px;font-family:inherit;box-sizing:border-box}
.fld textarea{resize:vertical;min-height:64px}
.modal-acts{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}
.muted{color:var(--muted)}
.empty{padding:40px;text-align:center;color:var(--muted);background:#fff;border:1px dashed var(--border);border-radius:12px;margin:14px 0}

/* ===================== 团队协作 - 日程看板(月历) ===================== */
.sched-bar{gap:8px}
.sched-bar .tk-search{flex:0 1 190px;min-width:140px}
.sched-bar select{height:36px;border:1px solid var(--border);border-radius:8px;padding:0 10px;font-size:13px;background:#fff;color:var(--text)}
.sched-panel{padding:14px 16px}

.cal-nav{display:flex;align-items:center;gap:8px}
.cal-nav .btn.sm{padding:4px 10px;font-size:12px}
.cal-title{font-weight:600;font-size:13px;margin-left:4px;color:var(--text)}
.sched-cal{margin:0}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}
.cal-head .cal-h{text-align:center;font-size:13px;font-weight:600;color:var(--muted);padding:6px 0}
.cal-cell{background:#fff;border:1px solid var(--border);border-radius:10px;padding:6px;min-height:108px;overflow:hidden;cursor:pointer;transition:all .18s;position:relative}
.cal-cell:hover{transform:translateY(-2px);box-shadow:0 6px 16px rgba(16,24,40,.10);border-color:var(--primary);z-index:2}
.cal-cell.other{background:#f7f9fc;opacity:.55}
.cal-cell.today{border-color:#22c55e;box-shadow:0 0 0 2px rgba(34,197,94,.18);background:#f0fdf4}
.cal-cell.weekend{background:#fffbf5}
.cal-cell.weekend:hover{background:#fff7ed}
.cal-cell .cal-add{position:absolute;right:6px;top:6px;width:22px;height:22px;border-radius:50%;background:var(--primary-soft);color:var(--primary);display:flex;align-items:center;justify-content:center;font-size:15px;opacity:0;transition:opacity .15s,transform .15s}
.cal-cell:hover .cal-add{opacity:1;transform:scale(1.05)}
.cal-d{font-size:13px;font-weight:600;color:var(--text-2);margin-bottom:5px}
.cal-bar{display:flex;align-items:center;gap:5px;padding:3px 6px;margin-bottom:4px;border-radius:6px;font-size:12px;cursor:pointer;background:#eef2f7;border-left:3px solid #5b6b82}
.cal-bar .cb-dot{width:7px;height:7px;border-radius:50%;background:#5b6b82;flex:none}
.cal-bar .cb-t{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cal-bar .cb-pri{font-size:12px;padding:0 5px;border-radius:8px;white-space:nowrap}
.cal-bar.st-todo{background:#eff1f3;border-left-color:#636366}
.cal-bar.st-todo .cb-dot{background:#636366}
.cal-bar.st-doing{background:#dcfce7;border-left-color:#16a34a}
.cal-bar.st-doing .cb-dot{background:#16a34a}
.cal-bar.st-done{background:#f1f5f9;border-left-color:#64748b}
.cal-bar.st-done .cb-dot{background:#64748b}
.cal-bar.st-done .cb-t{text-decoration:line-through;color:var(--muted)}
.cal-bar.st-todo.overdue{background:#fee2e2;border-left-color:#dc2626}
.cal-bar.st-todo.overdue .cb-dot{background:#dc2626}
.cal-more{text-align:center;font-size:12px;color:var(--muted);padding-top:2px}
.cal-unsch{margin-top:14px;background:#fff;border:1px solid var(--border);border-radius:12px;padding:14px 16px}
.cal-unsch .cu-h{font-size:13px;font-weight:600;margin-bottom:8px}

/* 无任务日期格: 天气 + 节日信息 */
.cal-info{display:flex;flex-direction:column;gap:4px;margin-top:2px}
.cal-wx{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--text-2)}
.cal-wx .wx-ico{font-size:13px;line-height:1;flex:none}
.cal-wx .wx-t{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cal-fest{display:inline-flex;align-items:center;align-self:flex-start;font-size:12px;color:#c2410c;background:#fff3ec;border:1px solid #ffd9c2;border-radius:8px;padding:1px 8px;font-weight:600}

@media (max-width:1100px){
  .sched-bar .tk-search{flex:1 1 160px}
  .river-bar .tk-search{flex:1 1 160px}
}
@media (max-width:860px){
  .cal-grid{gap:5px}
  .cal-cell{min-height:86px;padding:5px;border-radius:8px}
  .cal-bar{font-size:12px;padding:2px 5px;margin-bottom:3px}
  .cal-bar .cb-t{max-width:90px}
  .cal-wx .wx-t{display:none}
  .sched-bar .cal-title{display:none}
}

/* ===================== 团队协作 - 河道看板(状态列看板) ===================== */
/* 样式见上方 .river 区块(已改为按状态分三列 + 柔和配色 + 拖拽反馈) */

/* ===================== 团队协作 - 任务待办(标签栏 + 筛选) ===================== */
.tk-tabs{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0 10px}
.tk-tab{padding:6px 14px;border:1px solid var(--border);background:#fff;border-radius:20px;cursor:pointer;font-size:13px;color:var(--muted);transition:.15s}
.tk-tab:hover{border-color:var(--primary);color:var(--primary)}
.tk-tab.on{background:var(--primary);border-color:var(--primary);color:#fff}
/* 已归档标签: 选中态用琥珀色区分归档视图 */
.tk-tab--arch.on{background:#e8a33d;border-color:#e8a33d;color:#fff}
.tk-tab--arch.on:hover{border-color:#e8a33d;color:#fff}
.tk-filter{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px;align-items:center;background:#fff;border:1px solid var(--border);border-radius:12px;padding:10px 12px}
.tk-filter .tk-tabs{margin:0;flex-wrap:wrap}
.tk-filter .grow{flex:1}
.tk-filter .btn{height:36px;display:flex;align-items:center;white-space:nowrap}
.tk-search{flex:1;min-width:200px;height:36px;border:1px solid var(--border);border-radius:8px;padding:0 12px;font-size:13px}
.tk-filter select{height:36px;border:1px solid var(--border);border-radius:8px;padding:0 10px;font-size:13px;background:#fff}
.kanban .kcol.st-todo{background:#f4f6f9;border-color:#d9d9de}
.kanban .kcol.st-doing{background:#eef7f1;border-color:#c7e7d6}
.kanban .kcol.st-done{background:#eef1f4;border-color:#cfd6dc}

/* ===================== 团队协作 - 项目管理(列表 + 详情) ===================== */
.proj-wrap{display:grid;grid-template-columns:300px 1fr;gap:16px;margin:14px 0;align-items:start}
.proj-list{display:flex;flex-direction:column;gap:10px}
/* 项目管理工具条: 搜索/状态/负责人 + 新建/刷新 同一行, 筛选在左、按钮靠右 */
.team-bar .tk-search{flex:0 0 240px;width:240px;min-width:180px}
.team-bar select{height:36px;border:1px solid var(--border);border-radius:8px;padding:0 10px;font-size:13px;background:#fff;color:var(--text)}
.team-bar select:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft,rgba(43,108,255,.15));outline:none}
.pli{background:#fff;border:1px solid var(--border);border-radius:12px;padding:12px;cursor:pointer;transition:all .18s cubic-bezier(.34,1.56,.64,1)}
.pli:hover{transform:translateY(-2px);box-shadow:0 6px 18px rgba(16,24,40,.08);border-color:var(--primary)}
.pli.on{border-color:var(--primary);background:#f5f8ff;box-shadow:0 2px 10px rgba(43,108,255,.10)}
.river-filter{max-width:1120px;margin:0 auto 12px}
.pli-h{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:13px;margin-bottom:8px}
.pli-bar{height:6px;background:#f1f3f7;border-radius:4px;overflow:hidden;margin-bottom:6px}
.pli-bar i{display:block;height:100%;background:var(--primary)}
.pli-m{font-size:12px;color:var(--muted)}
.pli.overdue{border-color:#f5c2c7;background:#fff7f7}
.pli.overdue .pli-h b{color:#ff3b30}
.pli-od{display:inline-flex;align-items:center;gap:3px;padding:1px 7px;border-radius:9px;font-size:12px;font-weight:600;background:#fdeced;color:#ff3b30;white-space:nowrap}
.pd-warn{margin:10px 0;padding:8px 12px;border-radius:8px;background:#fdeced;color:#ff3b30;font-size:13px;font-weight:500;display:flex;align-items:center;gap:6px}
.pd-warn.over{background:#fdeced;border:1px solid #f5c2c7}
.proj-over{display:inline-flex;align-items:center;gap:4px;margin-left:6px;font-size:12px;font-weight:600;color:#ff3b30}
.proj-over.td{padding:2px 8px;border-radius:8px;background:#fdeced}
.proj-detail{background:#fff;border:1px solid var(--border);border-radius:12px;padding:18px;min-height:420px}
.pd-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}
.pd-head h3{margin:0;font-size:20px;display:flex;align-items:center;gap:8px}
.pd-acts{display:flex;gap:6px}
.pd-desc{color:var(--muted);font-size:13px;margin-bottom:12px;line-height:1.6}
.pd-sec{margin:18px 0}
.pd-sec-h{font-weight:600;font-size:13px;margin-bottom:8px;display:flex;align-items:center;gap:8px;justify-content:space-between}
.pd-goal{background:#f7f9fc;border-radius:8px;padding:10px 12px;font-size:13px;line-height:1.6}
.pd-info{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.ii{display:flex;flex-direction:column;gap:3px}
.ii-k{font-size:12px;color:var(--muted)}
.ii-v{font-size:13px;font-weight:500}
.pd-mem{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.av.big{width:30px;height:30px;font-size:13px}
.av.owner{background:var(--primary);color:#fff;box-shadow:0 0 0 2px #fff,0 0 0 4px var(--primary)}
.node{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;margin-bottom:8px}
.node.done .nt{text-decoration:line-through;color:var(--muted)}
.node.overdue{border-color:#f5c2c7;background:#fff7f7}
.node.overdue .nt{color:#ff3b30}
.nmuted.red{color:#ff3b30;font-weight:600}
.nbody{flex:1;min-width:0}
.nt{font-size:13px;font-weight:500}
.nmuted{font-size:12px;color:var(--muted)}
.nchk{position:relative;display:inline-flex;cursor:pointer;flex:none}
.nchk input{position:absolute;opacity:0;width:18px;height:18px;margin:0;cursor:pointer}
.nbox{width:18px;height:18px;border:2px solid var(--border);border-radius:5px;display:inline-block;box-sizing:border-box;transition:.15s}
.nchk input:checked + .nbox{background:var(--primary);border-color:var(--primary);position:relative}
.nchk input:checked + .nbox:after{content:'';position:absolute;left:5px;top:1px;width:4px;height:9px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}
.rt{display:flex;align-items:center;gap:6px;padding:7px 0;border-top:1px dashed var(--border);font-size:13px}
.rt:first-of-type{border-top:none}
.rt-t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cmt{display:flex;gap:8px;padding:9px 0;border-top:1px dashed var(--border)}
.cmt:first-of-type{border-top:none}
.cmt-b{flex:1;min-width:0}
.cmt-h{display:flex;gap:8px;align-items:baseline}
.cmt-h b{font-size:13px}
.cmt-c{font-size:13px;margin-top:3px;line-height:1.6}
.cmt-form{display:flex;gap:8px;margin:10px 0}
.cmt-form textarea{flex:1;border:1px solid var(--border);border-radius:8px;padding:8px 10px;font-size:13px;font-family:inherit;resize:vertical;min-height:48px;box-sizing:border-box}
.cmt-list{margin-top:4px}
.fld-row{display:flex;gap:12px}
.fld-row .fld{flex:1;min-width:0}

/* ===================== 团队协作 - 任务待办(列表视图) ===================== */
.tk-body{display:flex;align-items:flex-start;gap:16px;max-width:1120px;margin:0 auto}
.tk-side{flex:0 0 150px;background:#fff;border:1px solid var(--border);border-radius:12px;padding:12px;position:sticky;top:14px}
.tk-side-h{font-size:13px;font-weight:600;color:var(--text-2);margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--border)}
.tk-type{display:block;width:100%;text-align:left;border:none;background:transparent;color:var(--text-2);font-size:13px;padding:8px 10px;border-radius:8px;cursor:pointer;margin-bottom:2px;transition:.15s}
.tk-type:hover{background:#f4f6f9;color:var(--text)}
.tk-type.on{background:var(--primary);color:#fff;font-weight:600}
.tk-list-wrap{flex:1;min-width:0}
.tk-filter--c{max-width:1120px;margin:0 auto 12px}
.tk-list{background:#fff;border:1px solid var(--border);border-radius:12px;padding:10px}
.tk-row{display:flex;align-items:center;gap:12px;padding:12px 16px;border:1px solid var(--border-2);border-radius:10px;margin-bottom:8px;transition:all .2s cubic-bezier(.34,1.56,.64,1);background:#fff;position:relative}
.tk-row:last-child{margin-bottom:0}
.tk-row:hover{transform:translateY(-2px);box-shadow:0 6px 18px rgba(16,24,40,.08);z-index:2}
/* 任务行按状态强化配色: 4px 左侧强调条 + 更明显的状态底色 + 状态圆点 */
.tk-row{border-left-width:4px}
.tk-row.st-todo{background:#f2f2f7;border-left-color:#9aa6b8}
.tk-row.st-doing{background:#ecf8f1;border-left-color:#1a9c5b}
.tk-row.st-done{background:#eef1f4;border-left-color:#8e8e93}
/* 逾期(未完成且已过截止日): 红色强调, 覆盖状态色 */
.tk-row.overdue{background:#fdeced;border-left-color:#ff3b30}
.tk-row.st-todo .tk-title:before,
.tk-row.st-doing .tk-title:before,
.tk-row.st-done .tk-title:before{content:'';display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:8px;vertical-align:middle}
.tk-row.st-todo .tk-title:before{background:#9aa6b8}
.tk-row.st-doing .tk-title:before{background:#1a9c5b}
.tk-row.st-done .tk-title:before{background:#636366}
.tk-row.overdue .tk-title:before{background:#ff3b30}
.tk-main{flex:1;min-width:0;display:flex;flex-direction:row;align-items:center;gap:12px}
.tk-title{font-size:15px;font-weight:600;color:var(--text);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1 1 auto;min-width:0}
.tk-title:hover{color:var(--primary)}
.tk-tags{display:flex;flex-wrap:nowrap;align-items:center;gap:6px;font-size:12px;flex:0 0 auto}
.tk-tags .badge{font-size:12px}
.tk-tags .type{background:#f1ecfe;color:#6d45e0}
.tk-tags .plat{background:#e6f7f4;color:#0f9b8e}
.tk-assignee{display:inline-flex;align-items:center;color:var(--text-2)}
.tk-right{display:flex;align-items:center;gap:14px;flex-shrink:0}
.tk-progress{width:110px;height:6px;background:#f1f3f7;border-radius:3px;overflow:hidden;position:relative}
.tk-progress-bar{height:100%;border-radius:3px}
.tk-progress span{position:absolute;right:0;top:-16px;font-size:12px;color:var(--muted)}
.tk-due{font-size:12px;white-space:nowrap;width:86px;text-align:right}
.tk-due.ok{color:#34c759}
.tk-due.warn{color:#ff9500}
.tk-due.overdue{color:#ff3b30;font-weight:600}
.tk-ops{display:flex;gap:6px;opacity:.7;transition:opacity .15s}
.tk-row:hover .tk-ops{opacity:1}

/* 任务弹窗：两列/三列字段布局 */
#taskMask .modal.wide{max-width:720px}
#taskMask .fld-row{display:flex;gap:14px}
#taskMask .fld-row.three{gap:12px}
#taskMask .fld-row .fld{flex:1;min-width:0}
#taskMask .fld-row.three .fld{flex:1}
#taskMask .hint{font-size:12px;color:var(--muted);margin-top:4px}
#taskMask input[type=number]{width:100%}
.tk-collab{display:flex;flex-wrap:wrap;gap:10px 16px;padding:10px 12px;border:1px solid var(--border);border-radius:8px;background:#fff}
.tk-collab .chk{display:inline-flex;align-items:center;gap:6px;font-size:13px;cursor:pointer}
.tk-collab .chk input{width:15px;height:15px;accent-color:var(--primary);margin:0;cursor:pointer}

@media (max-width: 860px){
  .proj-wrap{grid-template-columns:1fr}
  .pd-info{grid-template-columns:1fr}
  #taskMask .fld-row,#taskMask .fld-row.three{flex-direction:column;gap:0}
  .tk-right{flex-direction:column;align-items:flex-end;gap:6px}
  .tk-row{align-items:flex-start}
  .tk-body{flex-direction:column;gap:10px}
  .tk-side{position:static;flex:none;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
  .tk-side-h{width:100%;border-bottom:none;padding-bottom:0;margin-bottom:4px}
  .tk-type{width:auto;flex:0 0 auto;margin-bottom:0}
}
@media (max-width: 640px){
  .tk-row{flex-direction:column;align-items:flex-start;gap:8px;padding:12px}
  .tk-right{width:100%;flex-direction:row;justify-content:space-between}
}

/* ===================== 团队协作 - 数据统计仪表板 ===================== */
.range-tabs{display:inline-flex;align-items:center;background:#eef1f5;border-radius:8px;padding:3px;gap:3px}
.range-tabs button{border:none;background:transparent;color:var(--text-2);font-size:13px;padding:6px 14px;border-radius:6px;cursor:pointer;transition:all .15s}
.range-tabs button:hover{color:var(--text)}
.range-tabs button.on{background:var(--primary);color:#fff;box-shadow:0 1px 2px rgba(87,96,106,.25)}

.stat-kpi-row{display:grid;grid-template-columns:repeat(6,1fr);gap:14px;margin:14px 0}
.stat-kpi{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:16px;display:flex;align-items:center;gap:14px;box-shadow:var(--shadow)}
.sk-icon{width:42px;height:42px;border-radius:10px;background:#f4f6fa;display:flex;align-items:center;justify-content:center}
.sk-icon svg{width:22px;height:22px}
.sk-body{flex:1;min-width:0}
.sk-num{font-size:28px;font-weight:700;color:var(--text);line-height:1.2}
.sk-label{font-size:13px;color:var(--muted);margin-top:3px}

.stat-grid-2{display:grid;grid-template-columns:1.25fr .75fr;gap:14px;margin:14px 0}
.stat-card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:16px;box-shadow:var(--shadow)}
.stat-card.mt{margin-top:14px}
.sc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
.sc-head h4{margin:0;font-size:15px;font-weight:600;color:var(--text)}
.sc-sub{font-size:12px;color:var(--muted)}
.sc-link{font-size:13px;color:var(--primary)}
.sc-link:hover{color:var(--primary-dark)}

/* 每日完成趋势 */
.stat-trend{height:220px}
.trend-chart{display:flex;align-items:flex-end;justify-content:space-between;height:180px;gap:4px;padding:0 4px}
.trend-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;min-width:0;height:100%;justify-content:flex-end}
.trend-bar-wrap{width:100%;height:100%;display:flex;align-items:flex-end;justify-content:center;border-bottom:1px solid var(--border-2)}
.trend-bar{width:60%;max-width:18px;background:var(--primary);border-radius:4px 4px 0 0;transition:height .3s ease;min-height:2px}
.trend-bar:hover{background:var(--primary-dark)}
.trend-date{font-size:12px;color:var(--muted);white-space:nowrap}

/* 状态分布 */
.stat-status-list{display:flex;flex-direction:column;gap:12px}
.sd-row{display:grid;grid-template-columns:60px 1fr 50px;align-items:center;gap:12px}
.sd-label{font-size:13px;color:var(--text-2)}
.sd-bar{height:10px;background:#f1f3f7;border-radius:5px;overflow:hidden}
.sd-fill{height:100%;border-radius:5px;transition:width .3s ease}
.sd-val{font-size:13px;color:var(--text);text-align:right}

/* 表格 */
.stat-table-wrap{overflow-x:auto}
.stat-table{width:100%;border-collapse:collapse;font-size:13px}
.stat-table th{text-align:left;padding:10px 12px;color:var(--muted);font-weight:500;border-bottom:1px solid var(--border-2);white-space:nowrap}
.stat-table td{padding:12px;border-bottom:1px solid var(--border-2);vertical-align:middle;color:var(--text)}
.stat-table tr:last-child td{border-bottom:none}
.stat-table .tar{text-align:right}
.stat-table .empty-td{text-align:center;color:var(--muted);padding:28px}

.u-cell{display:flex;align-items:center;gap:10px}
.u-avatar{width:32px;height:32px;border-radius:50%;color:#fff;font-size:13px;font-weight:600;display:flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden}.u-avatar img{width:100%;height:100%;object-fit:cover;display:block}
.u-name{font-weight:500}
.role-tag{display:inline-block;font-size:12px;padding:2px 8px;border-radius:10px}
.role-tag.owner{background:#eaf0ff;color:var(--primary)}
.role-tag.member{background:#f4f6fa;color:var(--text-2)}

.load-bar{height:8px;background:#f1f3f7;border-radius:4px;overflow:hidden;min-width:120px}
.load-fill{height:100%;background:#22c55e;border-radius:4px;transition:width .3s ease}

.proj-bar{height:8px;background:#f1f3f7;border-radius:4px;overflow:hidden;display:inline-block;width:120px;vertical-align:middle;margin-right:8px}
.proj-fill{height:100%;background:var(--primary);border-radius:4px;transition:width .3s ease}
.proj-pct{font-size:12px;color:var(--text-2);display:inline-block;min-width:34px}

.st-badge{display:inline-block;font-size:12px;padding:3px 9px;border-radius:10px}
.st-badge.doing{background:#eaf0ff;color:var(--primary)}
.st-badge.done{background:#e6f7f1;color:#0f8f6a}

@media (max-width: 1100px){
  .stat-kpi-row{grid-template-columns:repeat(3,1fr)}
  .stat-grid-2{grid-template-columns:1fr}
}
@media (max-width: 640px){
  .stat-kpi-row{grid-template-columns:repeat(2,1fr)}
  .range-tabs button{padding:5px 10px;font-size:12px}
  .sd-row{grid-template-columns:50px 1fr 42px}
}

/* =============================================================
   促销监控(甘特图 + 管理)
   ============================================================= */
.promo-toolbar{display:flex;align-items:center;gap:8px;padding:12px 0;flex-wrap:wrap}
.promo-toolbar select,.promo-toolbar .f-q{height:32px;border:1px solid var(--border);border-radius:8px;background:var(--card);color:var(--text);padding:0 10px;font-size:13px}
.promo-toolbar .f-q{min-width:160px}
.promo-toolbar .grow{flex:1}
.legend{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:6px}
.legend .lg{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:2px;vertical-align:middle}
.legend .lg.lg-prod{background:linear-gradient(90deg,#636366,#1a9c5b,#ff9500,#ff3b30)}

.promo-summary{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px;align-items:center}
.promo-summary .ps{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 12px;font-size:13px;line-height:1;color:var(--text-2);background:var(--card);border:1px solid var(--border);border-radius:8px;cursor:pointer;white-space:nowrap;transition:transform .12s,box-shadow .12s,background .12s,border-color .12s,color .12s}
.promo-summary .ps b{color:var(--text);font-weight:600}
.promo-summary .ps:hover{transform:translateY(-1px);box-shadow:0 2px 6px rgba(16,24,40,.10)}
.promo-summary .ps.on{box-shadow:0 0 0 2px var(--primary),0 2px 6px rgba(87,96,106,.18);transform:translateY(-1px);border-color:var(--primary)}
/* 风险类(排序)按钮: 仅用文字色区分, 尺寸完全统一 */
.promo-summary .ps.danger{color:var(--up)}
.promo-summary .ps.warn{color:#b97700}
.promo-summary .ps.gate{color:#c0392b}
/* 状态筛选按钮: 尺寸统一, 左侧色条区分状态; 选中态用主色环描边 */
.promo-summary .ps.st-filter{border-left-width:3px}
.promo-summary .ps.st-filter.st-active{color:#1a9c5b;border-left-color:#1a9c5b}
.promo-summary .ps.st-filter.st-expiring{color:#b97700;border-left-color:#ff9500}
.promo-summary .ps.st-filter.st-upcoming{color:#2a6bd6;border-left-color:#636366}
.promo-summary .ps.st-filter.st-ended{color:#7a828f;border-left-color:#9aa3b2}
.promo-summary .ps.st-filter.st-disabled{color:#a23b3b;border-left-color:#c0392b}
.promo-summary .ps .sort-arr{font-style:normal;margin-left:2px;font-size:12px}
.promo-summary .ps-sep{width:1px;height:20px;background:var(--border-2);margin:0 4px}
.promo-summary .ps-cap{font-size:13px;color:var(--muted);margin-right:2px}
.st-tag{display:inline-block;border-radius:20px;padding:1px 9px;font-size:12px;border:1px solid var(--border);background:#f1f3f7;color:var(--text-2)}

.gantt-scroll{height:calc(100vh - 196px);min-height:420px;overflow:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--card)}
.gantt-grid{min-width:100%;min-height:100%}
.gantt-head{display:flex;position:sticky;top:0;z-index:3;background:#f7f9fc;border-bottom:1px solid var(--border)}
.gantt-left{position:sticky;left:0;z-index:4;background:#f7f9fc;border-right:1px solid var(--border);min-width:250px;width:250px;flex:none;padding:8px 12px;font-weight:600;color:var(--text-2);font-size:12px;align-self:stretch;box-sizing:border-box}
.head-left{border-right:1px solid var(--border)}
.gantt-axis{position:relative;height:46px;flex:none}
.gantt-axis .m-label{position:absolute;top:6px;font-size:12px;color:var(--text-2);border-left:1px solid var(--border);padding:2px 6px;white-space:nowrap;background:#f7f9fc;z-index:2;line-height:1.2}
.gantt-axis .m-label.m-minor{top:24px;font-size:12px;color:var(--muted);background:#f7f9fc}
.gantt-axis .today-line,.gantt-lane .today-line{position:absolute;top:0;bottom:0;width:2px;background:rgba(227,77,89,.55);z-index:2;pointer-events:none}
.gantt-axis .today-line{height:46px}

.gantt-row{display:flex;min-height:84px;align-items:stretch;border-bottom:1px solid #c5cedd;border-left:4px solid var(--sku-color,transparent);transition:transform .35s cubic-bezier(.34,1.56,.64,1),opacity .25s;will-change:transform;box-sizing:border-box}
.gantt-row:hover .gantt-left{background:#d4e2ff}
.gantt-lane{background:rgba(120,130,150,0)}
.gantt-row:hover .gantt-lane{background:rgba(87,96,106,.14)!important}
.gantt-lane{position:relative;flex:none}
.g-grid{position:absolute;top:0;bottom:0;width:1px;background:rgba(120,130,150,.20);z-index:0;pointer-events:none}
.g-grid.g-major{background:rgba(120,130,150,.45)}
.gantt-axis .m-label.m-major{font-weight:700;color:var(--text)}
.seg-tip{font-size:12px;color:var(--muted);margin-right:2px}
.g-bar{position:absolute;height:20px;border-radius:5px;display:flex;align-items:center;gap:4px;padding:0 6px;font-size:12px;color:#fff;cursor:pointer;overflow:hidden;white-space:nowrap;box-shadow:0 1px 2px rgba(16,24,40,.12)}
.g-bar .gb-ly{background:rgba(255,255,255,.3);border-radius:3px;padding:0 3px;font-size:12px;flex:none}
.g-bar .gb-t{overflow:hidden;text-overflow:ellipsis}
.g-bar.ly-total{border:1px dashed rgba(255,255,255,.85)}

.gantt-left .gl-sku{font-size:12px;font-weight:600;color:var(--text);cursor:pointer}
.gantt-left .gl-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;vertical-align:baseline;flex:none}
.gantt-left .gl-name{font-size:12px;color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gantt-left .gl-price{font-size:12px;color:var(--muted);margin-top:2px}
.gantt-left .gl-price b{font-weight:700}
.gantt-left .risk-badge{display:inline-block;margin-top:3px;font-size:12px;border-radius:4px;padding:1px 6px}
.risk-badge.rk-ok{display:none}
.risk-badge.rk-gate{background:#ffe9e9;color:#b32020}
.risk-badge.rk-warn{background:#fff4e0;color:#9a6400}
.risk-badge.rk-danger{background:var(--up);color:#fff}
.rk-ok{color:var(--muted)}
.rk-gate{color:#b32020}
.rk-warn{color:#9a6400}
.rk-danger{color:var(--up)}

/* 管理页 */
.tbl .gb-ly,.gantt-left .gb-ly{display:inline-block;background:var(--primary-soft);color:var(--primary-dark);border-radius:4px;padding:0 5px;font-size:12px;margin-right:3px}
.tbl .ops a{margin-right:10px;cursor:pointer}
.tbl .ops a.del{color:var(--up)}
.st-pill{display:inline-block;border-radius:20px;padding:1px 9px;font-size:12px;border:1px solid transparent}
.st-pill.st-active{background:rgba(23,166,124,.12);color:var(--down)}
.st-pill.st-expiring{background:rgba(245,158,11,.14);color:#b9790a}
.st-pill.st-upcoming{background:rgba(87,96,106,.12);color:#24292f}
.st-pill.st-ended{background:#ececf0;color:var(--muted)}
.st-pill.st-disabled{background:#ececf0;color:#aab1bd}

/* 项目甘特图 (team/gantt) 专属样式, 复用 .gantt-* 容器类 */
.pg-nodate{position:absolute;top:14px;font-size:12px;color:var(--muted);background:var(--bg);border:1px dashed var(--border);border-radius:6px;padding:3px 10px}
/* 节点颜色条: 一根条上按节点分段, 每段不同颜色, 段内显示节点名称 */
.pg-nodebar{position:absolute;top:10px;height:28px;border-radius:7px;overflow:hidden;background:var(--border-2);box-shadow:0 1px 2px rgba(16,24,40,.12)}
.pg-seg{position:absolute;top:0;height:100%;border-right:1px solid rgba(255,255,255,.55);box-sizing:border-box;cursor:pointer;transition:filter .12s}
.pg-seg:last-child{border-right:none}
.pg-seg:hover{filter:brightness(1.08)}
.pg-seg-lbl{position:absolute;top:50%;left:4px;right:4px;transform:translateY(-50%);font-size:12px;font-weight:600;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.45);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none}
.pg-ndot{position:absolute;top:-3px;width:6px;height:6px;margin-left:-3px;border-radius:50%;border:2px solid #fff;box-shadow:0 1px 2px rgba(16,24,40,.3);z-index:4}
/* 子任务: 每条独立颜色条, 颜色用于区分子任务(不再关联进度) */
.pg-task{position:absolute;height:16px;border-radius:5px;background:var(--border-2);overflow:visible;box-shadow:0 1px 2px rgba(16,24,40,.14);cursor:pointer}
.pg-task-lbl{position:absolute;left:5px;top:0;font-size:12px;line-height:16px;font-weight:600;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.45);white-space:nowrap;max-width:320px;overflow:visible;pointer-events:none}
.gantt-left .pg-name{font-size:13px;font-weight:600;color:var(--text);cursor:pointer;display:flex;align-items:center;gap:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-bottom:4px}
.gantt-left .pg-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex:none}
.gantt-left .pg-owner{font-size:12px;color:var(--text-2);margin:0 0 4px 14px}
.gantt-left .pg-prog{height:6px;border-radius:3px;background:var(--border-2);overflow:hidden;margin:0 0 4px 14px}
.gantt-left .pg-prog-i{display:block;height:100%;border-radius:3px}
.gantt-left .pg-prog-txt{font-size:12px;color:var(--muted);margin:4px 0 0 14px}
.tk-toggle{display:inline-flex;align-items:center;gap:5px;font-size:13px;color:var(--text-2);cursor:pointer;user-select:none}
.tk-toggle input{width:15px;height:15px;accent-color:var(--primary);cursor:pointer}
/* 项目详情弹窗 */
.pg-detail-kv{display:inline-flex;gap:6px;align-items:baseline;margin:0 18px 8px 0;font-size:13px}
.pg-detail-kv span{color:var(--text-2)}
.pg-detail-kv b{color:var(--text);font-weight:600}
.pg-warn{background:#ffe9e9;color:#b32020;border:1px solid #ffb3b3;border-radius:8px;padding:8px 12px;margin:4px 0 12px;font-size:13px}
.pg-detail-sec{margin-top:14px}
.pg-detail-sec h4{font-size:13px;color:var(--text-2);margin:0 0 8px;font-weight:600}
.ms-item{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:8px;font-size:13px;background:var(--bg);border:1px solid var(--border);margin-bottom:6px}
.ms-item.overdue{border-color:#ffb3b3;background:#fff5f5}
.ms-dot{width:9px;height:9px;border-radius:50%;flex:none}
.ms-dot.node{background:#8b5cf6}
.ms-dot.node.st-done{background:#1a9c5b}
.ms-dot.task{background:#ff9500}
.ms-dot.task.st-done{background:#1a9c5b}
.ms-dot.task.overdue{background:#ff3b30}
.ms-date{font-variant-numeric:tabular-nums;color:var(--text-2);width:96px;flex:none}
.ms-title{flex:1;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ms-st{color:var(--muted);font-size:12px;flex:none}

/* 弹窗表单 */
.modal.wide{width:min(95vw, 960px);max-width:960px}
.row2{display:flex;gap:12px}
.row2 .fld{flex:1}
.fld{margin-bottom:10px}
.fld label{display:block;font-size:12px;color:var(--text-2);margin-bottom:4px}
.fld input,.fld select,.fld textarea{width:100%;border:1px solid var(--border);border-radius:8px;padding:7px 10px;font-size:13px;background:var(--card);color:var(--text);font-family:inherit}
.fld textarea{resize:vertical;min-height:54px}
.param-box{display:flex;flex-wrap:wrap;gap:10px;background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:10px}
.param-box .pf{flex:1;min-width:150px}
.param-box .pf label{font-size:12px;color:var(--text-2);margin-bottom:4px;display:block}
.param-box .pf input{width:100%;border:1px solid var(--border);border-radius:8px;padding:7px 10px;font-size:13px;background:var(--card)}
/* SKU 选择区: 顶部 搜索框 + 操作栏(已选/全选/反选/清空), 下方为 SKU 卡片网格 */
.sku-panel{border:1px solid var(--border);border-radius:10px;padding:10px;background:var(--card)}
.sku-bar{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.sku-bar .f-q{flex:1;min-width:140px;height:34px;border:1px solid var(--border);border-radius:8px;padding:0 10px;font-size:13px;background:var(--bg);color:var(--text);font-family:inherit;box-sizing:border-box}
.sku-acts{display:flex;align-items:center;gap:6px;flex:0 0 auto}
.sku-cnt{font-size:12px;color:var(--muted);font-weight:500;white-space:nowrap;margin-right:2px}
.sku-btn{height:28px;padding:0 13px;border:1px solid var(--border);border-radius:7px;background:#fff;color:var(--text-2);font-size:13px;cursor:pointer;transition:.15s;white-space:nowrap;line-height:1}
.sku-btn:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}
.sku-btn:active{transform:translateY(1px)}
.sku-btn.ghost{color:var(--muted)}
.sku-btn.ghost:hover{color:var(--primary);border-color:var(--primary);background:var(--primary-soft)}
.sku-opts{display:flex;flex-wrap:wrap;align-content:flex-start;gap:8px;max-height:248px;overflow:auto;padding-right:4px}
.sku-opt{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;min-width:180px;border:1px solid var(--border);border-radius:8px;cursor:pointer;font-size:13px;background:var(--card);transition:.15s;user-select:none;box-shadow:0 1px 2px rgba(16,24,40,.04)}
.sku-opt:hover{border-color:var(--primary);background:#f5f8ff}
.sku-opt:has(input:checked){border-color:var(--primary);background:var(--primary-soft);box-shadow:inset 0 0 0 1px var(--primary),0 1px 3px rgba(87,96,106,.12)}
.sku-opt input[type=checkbox]{margin:0;width:14px;height:14px;accent-color:var(--primary);cursor:pointer;flex-shrink:0;align-self:center}
.sku-opt .sku-code{align-self:center;font-weight:600;color:var(--primary-dark);font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px}
.sku-opt .sku-name{align-self:center;color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sku-empty{width:100%;text-align:center;padding:16px;color:var(--muted);font-size:13px}

/* 到手价拆解 */
.calc-chain{display:flex;align-items:center;flex-wrap:nowrap;gap:10px;margin:6px 0 12px;overflow-x:auto;padding-bottom:4px}
.cc{background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:10px 14px;text-align:center;min-width:120px;flex:0 0 auto}
.cc-lbl{font-size:12px;color:var(--muted)}
.cc-val{font-size:20px;font-weight:700;color:var(--text);margin-top:2px}
.cc-arrow{color:var(--muted);font-size:20px;flex:0 0 auto}
.risk-line{font-size:13px;padding:8px 12px;border-radius:8px;margin-bottom:10px}
.risk-line.rk-ok{background:var(--bg);color:var(--text-2)}
.risk-line.rk-gate{background:#ffe9e9;color:#b32020}
.risk-line.rk-warn{background:#fff4e0;color:#9a6400}
.risk-line.rk-danger{background:#fde8e8;color:var(--up);font-weight:600}
.kv{font-size:13px;margin-bottom:8px}
.kv span{color:var(--muted);margin-right:8px}
.mini-tb{width:100%;border-collapse:collapse;font-size:12px}
.mini-tb th,.mini-tb td{border:1px solid var(--border);padding:8px 10px;text-align:left;vertical-align:top}
.mini-tb th{background:var(--bg);color:var(--text-2);font-weight:600}
.mini-tb td{white-space:nowrap}
.mini-tb td:last-child{white-space:normal}

/* =============================================================
   起始页 (route: start) — 居中搜索 + 自定义背景 + 常用网址
   ============================================================= */
.start-wrap{position:relative;margin:-18px -20px -40px;min-height:calc(100vh - var(--header-h));display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding:54px 24px 96px;overflow:hidden}
.start-bg{position:fixed;inset:0;background-color:#1e3c72;background-repeat:no-repeat;background-size:cover;background-position:center;transition:background-image .35s ease,background .35s ease;z-index:0}
.start-scrim{position:fixed;inset:0;background:radial-gradient(120% 90% at 50% 0%,rgba(0,0,0,.08),rgba(0,0,0,.46));z-index:1}
.start-inner{position:relative;z-index:2;width:100%;max-width:900px;text-align:center;color:#fff;zoom:.9}
.start-clock{font-size:80px;font-weight:300;color:#fff;letter-spacing:1px;margin-bottom:20px;text-shadow:0 2px 14px rgba(0,0,0,.28)}
.start-search{display:flex;align-items:center;width:100%;max-width:760px;margin:0 auto;background:#fff;border-radius:999px;padding:9px 9px 9px 12px;box-shadow:0 12px 36px rgba(0,0,0,.24)}
.start-engine-select{position:relative;flex:0 0 auto;display:flex;align-items:center;align-self:stretch;margin:-8px 6px -8px -12px;padding:0 18px 0 14px;background:linear-gradient(135deg,#f9fafb 0%,#f1f5f9 100%);border-right:1px solid rgba(0,0,0,.05);border-radius:999px 0 0 999px;transition:background .15s}
.start-engine-select:hover{background:linear-gradient(135deg,#f1f5f9 0%,#e7ecf1 100%)}
/* 隐藏的原生 select 仅作值存储与 localStorage 恢复, 视觉由下方自定义下拉接管 */
.start-engine-select select{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.start-engine-select .eng-arrow{position:static;transform:none;pointer-events:none;color:#cbd5e1;flex:0 0 auto;transition:transform .2s}
.eng-trigger{display:flex;align-items:center;gap:4px;border:0;background:transparent;cursor:pointer;font-family:inherit;font-size:13px;font-weight:500;color:#1c1c1e;padding:0 0 0 6px;outline:none;white-space:nowrap}
.eng-trigger[aria-expanded="true"] .eng-arrow{transform:rotate(180deg)}
.eng-dropdown{position:absolute;top:calc(100% + 6px);left:0;min-width:96px;background:#fff;border-radius:10px;box-shadow:0 8px 22px rgba(0,0,0,.16);padding:5px 4px;z-index:30;display:none;overflow:hidden}
.eng-dropdown.show{display:block;animation:engPop .18s ease}
@keyframes engPop{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}
.eng-ico{width:18px;height:18px;object-fit:contain;flex:0 0 auto;border-radius:0}
.eng-trigger .eng-ico{width:24px;height:24px}
.eng-trigger .eng-arrow{display:none}
.eng-option{display:flex;align-items:center;gap:8px;width:100%;text-align:left;border:0;background:transparent;cursor:pointer;font-family:inherit;font-size:13px;color:#1c1c1e;padding:6px 12px;border-radius:0;transition:padding-left .16s ease;margin:0}
.eng-option:last-child{margin-bottom:0}
.eng-option:hover{background:transparent;color:#1c1c1e;padding-left:18px}
.eng-option.active{background:transparent;color:#1c1c1e;font-weight:600;padding-left:18px}
.eng-dropdown.show .eng-option{animation:engItemIn .22s ease both}
@keyframes engItemIn{from{opacity:0;transform:translateX(-8px)}to{opacity:1;transform:translateX(0)}}
.eng-dropdown.show .eng-option:nth-child(1){animation-delay:.02s}
.eng-dropdown.show .eng-option:nth-child(2){animation-delay:.05s}
.eng-dropdown.show .eng-option:nth-child(3){animation-delay:.08s}
.eng-dropdown.show .eng-option:nth-child(4){animation-delay:.11s}
.eng-dropdown.show .eng-option:nth-child(5){animation-delay:.14s}
.eng-dropdown.show .eng-option:nth-child(6){animation-delay:.17s}
/* 防御性重置: 强制起始页搜索框引擎下拉组件无蓝色药丸, 覆盖任何旧缓存/外部样式 */
.start-engine-select,
.start-engine-select:hover{background:linear-gradient(135deg,#f9fafb 0%,#f1f5f9 100%) !important}
.start-engine-select .eng-trigger,
.start-engine-select .eng-trigger:hover,
.start-engine-select .eng-trigger:focus,
.start-engine-select .eng-trigger:active{background:transparent !important;background-color:transparent !important;background-image:none !important;color:#1c1c1e !important;box-shadow:none !important;border:0 !important}
.start-engine-select .eng-option,
.start-engine-select .eng-option:hover,
.start-engine-select .eng-option.active,
.start-engine-select .eng-option:focus,
.start-engine-select .eng-option:active{background:transparent !important;background-color:transparent !important;background-image:none !important;color:#1c1c1e !important;border-radius:0 !important;box-shadow:none !important;border:0 !important}
.start-search>svg{display:none}
.start-search input{flex:1;min-width:0;border:0;outline:none;background:transparent;font-size:15px;color:#1c1c1e;padding:12px}
.start-search > button{flex:0 0 auto;border:0;cursor:pointer;background:var(--primary);color:#fff;font-size:15px;font-weight:600;padding:12px 32px;border-radius:999px;font-family:inherit;transition:.15s}
.start-search > button:hover{background:var(--primary-dark)}
.start-cat-tabs{display:flex;justify-content:center;flex-wrap:wrap;gap:10px;margin:28px 0 10px}
.start-cat-tab{padding:6px 18px;border-radius:999px;font-size:13px;font-weight:600;color:rgba(255,255,255,.85);background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.24);cursor:pointer;transition:.18s;font-family:inherit}
.start-cat-tab:hover{background:rgba(255,255,255,.26);color:#fff}
.start-cat-tab.active{background:#fff;color:#1c1c1e;border-color:#fff;box-shadow:0 4px 14px rgba(0,0,0,.2)}
/* 常用网址区：暗色半透明遮罩(毛玻璃) 增强可读性并与背景图分隔 */
.start-links-wrap{width:100%;max-width:760px;margin:18px auto 0;text-align:left;background:rgba(0,0,0,.06);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);border-radius:18px;padding:16px 18px;box-shadow:0 6px 20px rgba(0,0,0,.12)}
.start-cat-group{display:none}
.start-cat-group.active{display:block}
.start-links{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:12px;max-width:760px;margin:0}
.start-link{display:flex;flex-direction:column;align-items:center;gap:7px;padding:10px 10px;border-radius:18px;background:transparent;border:1px solid transparent;text-decoration:none;color:#fff;transition:.18s}
.start-link:hover{background:rgba(255,255,255,.12);transform:translateY(-2px);color:#fff}
.start-link .sl-ico{width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;color:#fff;box-shadow:0 2px 8px rgba(0,0,0,.18)}
.start-link .sl-name{font-size:13px;font-weight:500;line-height:1.3;max-width:100%;overflow:visible;text-overflow:clip;white-space:nowrap}
.start-link .sl-ico-img{width:34px;height:34px;border-radius:50%;overflow:hidden;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.18)}
.start-link .sl-ico-img img{width:100%;height:100%;object-fit:cover;display:block}
.start-link.start-link-text .sl-name{font-size:15px;font-weight:600;padding:8px 6px}

.start-tools{position:absolute;right:18px;bottom:16px;z-index:5;display:flex;gap:8px}
.start-tools .st-btn{padding:6px 14px;border-radius:999px;font-size:12px;cursor:pointer;border:1px solid rgba(255,255,255,.3);background:rgba(0,0,0,.3);color:#fff;text-decoration:none;font-family:inherit;line-height:1.6}
.start-tools .st-btn:hover{background:rgba(0,0,0,.48);color:#fff}
.start-tools .st-btn[disabled]{opacity:.6;cursor:default}
/* 起始页底部居中备案信息: v1.8.653 已随「备案信息」功能整体下线而移除 */
@media (max-width:640px){
  .start-wrap{padding:26px 14px 84px}
  /* 移动端窄屏取消整体放大, 避免内容被 overflow:hidden 裁切 */
  .start-inner{zoom:1}
  .start-clock{font-size:54px;margin-bottom:16px}
  .start-cat-tabs{margin:18px 0 8px}
  .start-links{gap:10px}
  .start-search{padding:5px 5px 5px 5px}
  .start-search > button{padding:9px 18px}
  .start-engine-select{margin:-5px 5px -5px -5px;padding:0 16px 0 10px}
  .start-engine-select select{font-size:13px}
}

/* 浅色背景(如 云雾白 #EDEFF4): 文字与控件反转为深色以保证可读性 */
.start-light .start-inner{color:#1c1c1e}
.start-light .start-clock{color:#1c1c1e;text-shadow:0 2px 14px rgba(255,255,255,.55)}
.start-light .start-cat-tab{color:rgba(31,41,55,.85);background:rgba(255,255,255,.6);border-color:rgba(31,41,55,.16)}
.start-light .start-cat-tab:hover{background:#fff;color:#1c1c1e}
.start-light .start-cat-tab.active{background:#1c1c1e;color:#fff;border-color:#1c1c1e;box-shadow:0 4px 14px rgba(0,0,0,.12)}
/* 浅色背景上, 网址区遮罩仍为暗色, 故文字反转为白色以保证可读 */
.start-light .start-links-wrap{background:rgba(31,41,55,.10)}
.start-light .start-link{background:transparent;border-color:transparent;color:#fff}
.start-light .start-link:hover{background:rgba(255,255,255,.2);color:#fff}
.start-light .start-link .sl-name{color:#fff}
.start-light .start-link .sl-ico{box-shadow:0 2px 8px rgba(0,0,0,.1)}
.start-light .start-tools .st-btn{background:rgba(31,41,55,.12);border-color:rgba(31,41,55,.2);color:#1c1c1e}
.start-light .start-tools .st-btn:hover{background:rgba(31,41,55,.22);color:#1c1c1e}
.start-light .start-scrim{background:radial-gradient(120% 90% at 50% 0%,rgba(0,0,0,.02),rgba(0,0,0,.10))}

/* 起始页顶栏：真正透明，透出同一张背景图（背景图层 .start-bg 已改为 position:fixed 铺满视口，含顶栏区域） */
body.start-transparent .header{background:transparent;border-bottom-color:transparent;box-shadow:none;position:sticky;top:0;z-index:40}
/* 起始页：直接隐藏顶部导航 / LOGO / 轮播 / 店铺切换，仅保留右上角账户菜单 */
body.start-transparent .sidebar{display:none}
body.start-transparent .topnav{display:none}
body.start-transparent .shop-switch{display:none}
body.start-transparent.no-sidebar .header{padding-left:20px}
body.start-transparent .brand-home img{filter:brightness(0) invert(1) drop-shadow(0 1px 2px rgba(0,0,0,.25))}
/* 顶栏元素隐藏后，上移起始页主体，避免顶部大片留白 */
body.start-transparent .start-wrap{padding-top:28px}
body.start-transparent .userbox:hover{background:rgba(255,255,255,.1)}
body.start-transparent .uname{color:#fff}
body.start-transparent .urole{color:rgba(255,255,255,.72)}
body.start-transparent .start-link{background:transparent;border-color:transparent;box-shadow:none}
body.start-transparent .start-link:hover{background:rgba(255,255,255,.12)}
body.start-transparent .start-link-add{background:transparent;border-color:transparent}
/* 起始页分区文字导航：置于搜索框上方，替代原顶部导航(分区切换器) */
body.start-transparent .start-footnav{display:flex;justify-content:center;gap:30px;flex-wrap:wrap;margin:4px 0 22px;font-size:15px}
body.start-transparent .start-footnav a{position:relative;color:rgba(255,255,255,.82);text-decoration:none;font-weight:700;font-size:15px;padding:5px 8px;transition:color .2s,transform .2s;text-shadow:0 1px 3px rgba(0,0,0,.35)}
body.start-transparent .start-footnav a::after{content:"";position:absolute;left:50%;right:50%;bottom:0;height:2px;background:#fff;border-radius:2px;transition:left .22s ease,right .22s ease}
body.start-transparent .start-footnav a:hover{color:#fff;transform:translateY(-2px)}
body.start-transparent .start-footnav a:hover::after{left:8px;right:8px}
/* 「数据分析」热门标记：小号火苗，紧跟文字右上角 */
/* 数据分析导航「热门」标记: 置于该项右上角的角标(而非文字右侧) */
.sec-hot{position:absolute;top:-4px;right:-8px;font-size:13px;line-height:1;filter:drop-shadow(0 1px 2px rgba(0,0,0,.3));user-select:none;pointer-events:none}
body.start-transparent.start-light .sec-hot{filter:none}
body.start-transparent .userbox{text-shadow:0 1px 3px rgba(0,0,0,.45)}

/* 浅色背景时顶栏同样透明，仅把顶部遮罩换成白色渐变以保证深色文字可读 */
body.start-transparent.start-light .header{background:transparent;border-bottom-color:transparent;box-shadow:none;position:sticky;top:0;z-index:40}
body.start-transparent.start-light .brand-home img{filter:none}
/* 浅色背景：顶栏文字/按钮统一为深色（半透明深灰底 + 深字） */
body.start-transparent.start-light .topnav a,
body.start-transparent.start-light .topnav-dl{color:#1c1c1e;background:rgba(31,41,55,.12);border-color:transparent}
body.start-transparent.start-light .topnav a:hover,
body.start-transparent.start-light .topnav-dl:hover{background:rgba(31,41,55,.2);border-color:transparent;color:#1c1c1e}
body.start-transparent.start-light .topnav a.active{background:rgba(31,41,55,.28);border-color:transparent;color:#1c1c1e}
body.start-transparent.start-light .shop-switch{background:transparent;border-color:transparent;color:#6c6c70}
body.start-transparent.start-light .shop-switch svg{color:#1c1c1e}
body.start-transparent.start-light .shop-switch select{color:#1c1c1e}
body.start-transparent.start-light .userbox:hover{background:rgba(31,41,55,.06)}
body.start-transparent.start-light .uname{color:#1c1c1e}
body.start-transparent.start-light .urole{color:rgba(31,41,55,.62)}
body.start-transparent.start-light .start-link:hover{background:rgba(0,0,0,.06)}
body.start-transparent.start-light .start-footnav a{color:rgba(31,41,55,.72);text-shadow:none}
body.start-transparent.start-light .start-footnav a::after{background:#1c1c1e}
body.start-transparent.start-light .start-footnav a:hover{color:#1c1c1e}
body.start-transparent.start-light .userbox{text-shadow:none}


/* ---- 授权管理页 · 起始页设置卡片 ---- */
.ss-sec-t{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:13px;font-weight:600;color:var(--text-2);margin:0 0 12px}
.lnk-count{font-weight:400;color:var(--muted);font-size:12px;white-space:nowrap}
.startset-presets{display:flex;flex-wrap:nowrap;gap:12px;overflow-x:auto;overflow-y:hidden;padding-bottom:6px;scrollbar-width:thin;-webkit-overflow-scrolling:touch}
.startset-presets > .startset-bg{flex:0 0 136px}
.startset-presets::-webkit-scrollbar{height:8px}
.startset-presets::-webkit-scrollbar-thumb{background:var(--border);border-radius:999px}
.startset-presets::-webkit-scrollbar-track{background:transparent}
.startset-bg{position:relative;width:136px;border-radius:10px;overflow:hidden;border:2px solid var(--border);cursor:pointer;background:var(--bg);transition:.15s}
.startset-bg:hover{border-color:var(--primary)}
.startset-bg.cur{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.startset-bg .sb-prev,.startset-bg .sb-img{display:block;width:100%;height:76px;object-fit:cover}
.startset-bg .sb-name{font-size:12px;padding:5px 8px;color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.startset-bg .sb-del{position:absolute;top:4px;right:4px;width:20px;height:20px;line-height:18px;text-align:center;border-radius:50%;background:rgba(0,0,0,.55);color:#fff;font-size:13px;cursor:pointer}
.startset-bg .sb-del:hover{background:var(--up)}
.ss-upload{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:12px}
.ss-upload .ipt-file{flex:0 0 auto}
.ss-light-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:14px}
.ss-switch{display:inline-flex;align-items:center;gap:8px;cursor:pointer;user-select:none;font-size:13px;color:var(--text);font-family:inherit}
.ss-switch input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.ss-switch-track{position:relative;width:40px;height:22px;border-radius:999px;background:var(--line,#cbd5e1);transition:background .18s;flex:0 0 auto}
.ss-switch-track .ss-switch-knob{position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.2);transition:transform .18s}
.ss-switch input:checked + .ss-switch-track{background:var(--primary)}
.ss-switch input:checked + .ss-switch-track .ss-switch-knob{transform:translateX(18px)}
.ss-switch-label{line-height:1.2}
.ss-home-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:16px}
.ss-seg-label{font-size:13px;color:var(--text-2);font-family:inherit}
.ss-seg{display:inline-flex;border:1px solid var(--border,#e5e7eb);border-radius:999px;overflow:hidden;background:var(--bg,#fff)}
.ss-seg input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.ss-seg-btn{display:inline-block;padding:6px 18px;font-size:13px;color:var(--text-2);cursor:pointer;user-select:none;font-family:inherit;transition:background .15s,color .15s}
.ss-seg input:checked + .ss-seg-btn{background:var(--primary);color:#fff}
.ss-seg input:focus-visible + .ss-seg-btn{outline:2px solid var(--primary-soft);outline-offset:-2px}
.lnk-row{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.lnk-row .lnk-no{width:20px;flex:0 0 auto;font-size:12px;color:var(--muted);text-align:right}
.lnk-row input[type=text]{flex:1 1 0;min-width:0;padding:7px 10px;border:1px solid var(--border);border-radius:8px;font-size:13px;outline:none;font-family:inherit}
.lnk-row input[type=text]:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.lnk-row .lnk-name{max-width:190px}
.lnk-row .lnk-cat{max-width:140px}
.lnk-row .btn{padding:6px 10px;font-size:13px;line-height:1.4}
.lnk-row .lnk-rm{color:var(--up)}
.lnk-row .lnk-ico{width:34px;height:34px;flex:0 0 auto;border-radius:8px;border:1px solid var(--border);background:var(--bg);overflow:hidden;display:flex;align-items:center;justify-content:center;position:relative}
.lnk-row .lnk-ico img{width:100%;height:100%;object-fit:cover;display:block}
.lnk-row .lnk-ico .lnk-ico-x{position:absolute;top:-5px;right:-5px;width:16px;height:16px;line-height:14px;text-align:center;border-radius:50%;background:var(--up);color:#fff;font-size:12px;cursor:pointer}
.lnk-row .lnk-ico .lnk-ico-empty{font-size:12px;color:var(--muted)}
.lnk-row .lnk-upload{white-space:nowrap}
.lnk-row .lnk-only{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--text-2);white-space:nowrap;cursor:pointer;user-select:none}
.lnk-row .lnk-only input{margin:0;width:14px;height:14px;accent-color:var(--primary);cursor:pointer}
@media (max-width:640px){ .lnk-row{flex-wrap:wrap} .lnk-row .lnk-name{max-width:none} }

/* 常用网址：分类导航 + 单分类编辑 (授权管理页) */
.lnk-edit{display:flex;flex-direction:column;gap:12px;align-items:stretch}
.lnk-cats{display:flex;flex-direction:row;flex-wrap:wrap;gap:8px;width:auto;flex:0 0 auto;max-height:none;overflow:visible;padding:0}
.lnk-cat{display:flex;align-items:center;gap:8px;padding:9px 12px;border:1px solid var(--border);border-radius:9px;background:var(--card);cursor:pointer;font-size:13px;transition:background .12s,border-color .12s;user-select:none}
.lnk-cat:hover{background:var(--card-2,#f3f6fb);border-color:var(--primary-soft)}
.lnk-cat.active{background:var(--primary-soft);border-color:var(--primary);color:var(--primary);font-weight:600}
.lnk-cat-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lnk-cat-count{flex:0 0 auto;font-size:12px;color:var(--muted);background:var(--bg);border-radius:10px;padding:1px 7px}
.lnk-cat.active .lnk-cat-count{background:#fff;color:var(--primary)}
.lnk-pane{flex:1 1 auto;width:100%;min-width:0;border:1px solid var(--border);border-radius:12px;background:var(--bg);overflow:hidden}
.lnk-pane-hd{display:flex;align-items:center;gap:10px;padding:10px 12px;background:var(--card-2,#f8fafc);border-bottom:1px solid var(--border)}
.lnk-group-name{flex:0 0 auto;width:170px;max-width:46%;padding:6px 10px;border:1px solid var(--border);border-radius:8px;font-size:13px;font-weight:600;outline:none;font-family:inherit;background:var(--card)}
.lnk-group-name:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.lnk-group-count{font-size:12px;color:var(--muted);white-space:nowrap}
.lnk-group-actions{margin-left:auto;display:flex;gap:8px}
.lnk-pane-body{padding:10px 12px;display:flex;flex-direction:column;gap:8px}
.lnk-group-empty{font-size:12px;color:var(--muted);padding:10px 2px}
.lnk-row{margin-bottom:0;background:var(--card);border:1px solid var(--border);border-radius:9px;padding:7px 9px;cursor:grab}
.lnk-row.dragging{opacity:.5;cursor:grabbing}
.lnk-row.drop-before{border-top:2px solid var(--primary)}
.lnk-row.drop-after{border-bottom:2px solid var(--primary)}
.lnk-row .lnk-name{width:170px;max-width:170px;flex:0 0 170px}
.lnk-row .lnk-url{flex:1 1 0;min-width:0}
.lnk-grip{flex:0 0 auto;color:var(--muted);cursor:grab;font-size:15px;line-height:1;user-select:none;padding:0 2px}
@media (max-width:640px){
  .lnk-edit{flex-direction:column}
  .lnk-cats{width:100%;flex:0 0 auto;max-height:none;flex-direction:row;flex-wrap:wrap;padding:0 0 4px}
  .lnk-cat{width:auto;flex:0 0 auto}
  .lnk-pane-hd{flex-wrap:wrap}
  .lnk-group-name{width:100%;max-width:100%}
  .lnk-group-actions{margin-left:0;width:100%}
  .lnk-row .lnk-name{max-width:none;flex-basis:100%}
  .lnk-row .lnk-url{flex-basis:100%}
}

/* =============================================================
   v1.8.521 设计系统升级：全局排版节奏 / 配色 / 间距统一
   原则: 克制用色、收敛字号层级、统一垂直间距节奏、精致细节。
   本块物理定义在文件最末, 同特异性靠后胜出, 选择性精修既有骨架,
   不改 --sidebar-w / --header-h 等布局尺寸, 不做回流性改动。
   ============================================================= */
:root{
  /* —— 字号层级 (收敛散落的 11~15.5px 为 5 档) —— */
  /* v1.8.851: 字阶收敛为 5 档(原 18 种)。
     12 = 微标注/表头/徽标 · 13 = 正文/表格/表单 · 15 = 卡片标题/框架 · 20 = 区块 · 28 = KPI 主数字
     (落地页 40/42/54/80 属展示级, 单独保留, 不参与正文阶梯) */
  --fs-caption:12px;     /* 注释/角标/次要说明 */
  --fs-small:12px;       /* 表头/标签/元信息 */
  --fs-body:13px;        /* 表格正文/按钮/筛选 */
  --fs-md:15px;          /* 导航/卡片标题上下文 */
  --fs-title:15px;       /* 卡片区块标题 */
  --fs-lead:20px;        /* 区块级标题 */
  --fs-kpi:28px;         /* KPI 主数字 */
  /* —— 间距节奏 (统一垂直/水平留白) —— */
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-5:20px; --sp-6:24px;
  /* —— 圆角阶梯 —— */
  --r-sm:6px; --r-md:8px; --r-lg:12px;
  /* —— 更精细的中性灰(在旧 --text/--muted 基础上细化对比) —— */
  --ink:#1c1c1e;          /* 主文字(近黑, 增强对比) */
  --ink-2:#6c6c70;        /* 次级文字 */
  --ink-3:#aeaeb2;        /* 说明文字 */
  --line:#e5e5ea;         /* 常规分割线 */
  --line-soft:#f0f0f4;    /* 极淡分割线/内部边 */
}
/* 侧边栏: 白底 → 极淡蓝灰底, 强化与内容区层次, 边框更细 */
.sidebar{background:#fbfcfe;border-right:1px solid var(--line-soft)}
.sidebar .brand{border-bottom:1px solid var(--line-soft)}
/* 品牌区: 抬高、居中留白节奏 */
.sidebar .brand{background:linear-gradient(180deg,#fff,#fbfcfe)}
.brand-home{padding:4px 0}
/* 侧边栏导航分组: 分组标题留白 + 项间距更舒展 */
.nav{padding:12px 10px 24px}
.nav-group{margin-bottom:6px}
.nav-group[data-mod] + .nav-group[data-mod]:not([data-gid="g0"]){margin-top:2px}
.nav-item,.nav-parent{padding:8.5px 11px;border-radius:var(--r-md);font-size:var(--fs-md);gap:11px}
.nav-ico{width:17px;height:17px}
/* 激活态: 淡主色底 + 主色字, 左侧加细色条强化"当前所在" */
.nav-item.active,.nav-child.active{background:var(--primary-soft);color:var(--primary-dark);font-weight:600}
.nav-item.active::before{content:"";position:absolute;left:-10px;top:20%;bottom:20%;width:3px;border-radius:2px;background:var(--primary)}
/* 父级展开指示: 激活分组名带主色 */
.nav-parent.has-active{color:var(--primary-dark)}
.nav-parent.has-active .nav-ico{opacity:1;color:var(--primary)}
.nav-children{padding:3px 0 4px}
.nav-child{padding:7px 12px 7px 42px;font-size:13px;margin-top:2px;border-radius:7px}
.nav-child::before{left:23px;width:5px;height:5px;background:#ccd4e0}
.nav-child.active::before{background:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
/* 顶栏: 加轻微阴影层次, 与侧栏融合 */
.header{background:#fff;border-bottom:1px solid var(--line-soft);box-shadow:0 1px 2px rgba(16,24,40,.02)}
/* 顶部分区切换: 由"蓝描边胶囊"改为更高级的"ghost + 激活实心胶囊"精致版 */
.topnav a,.topnav-dl{font-size:13px;font-weight:600;border-radius:999px;padding:5px 13px;letter-spacing:.2px}
/* 内容区: 统一呼吸边距 */
.content{padding:20px 22px 48px}
/* 卡片: 更柔和的边框与圆角层次 */
.card{border-color:var(--line-soft);border-radius:var(--r-lg);box-shadow:0 1px 2px rgba(16,24,40,.02),0 3px 10px rgba(16,24,40,.03)}
.card-hd{padding:14px 18px;gap:12px}
.card-hd h3{font-size:var(--fs-title);font-weight:650;letter-spacing:.2px;color:var(--ink)}
.card-hd .sub{font-size:var(--fs-small);color:var(--ink-3)}
.card-bd{padding:18px}
/* 卡片垂直节奏统一 (图表模块间一致留白) */
.card+.card,.card + .grid-2,.grid-2 + .card{margin-top:16px}
.grid-2,.grid-3{gap:16px;margin-top:16px}
/* 分区标题(首页/图表模块分组): 统一定义, 标题加大、副题降低、节奏统一 */
.sec-hd{margin:22px 0 14px;padding-left:13px}
.sec-hd::before{width:4px;border-radius:3px;background:var(--primary);left:0}
.sec-hd h2{font-size:var(--fs-title);font-weight:700;color:var(--ink);letter-spacing:.4px}
.sec-hd .sub{font-size:var(--fs-small);color:var(--ink-3)}
/* 筛选条(render_filterbar): 卡片化但内边距更统一, 下拉/控件高度咬合 */
.fb-bar .card-bd{padding:14px 18px}
.filters{gap:12px}
.fld{gap:5px}
.fld>label{font-size:12px;color:var(--ink-3);letter-spacing:.2px;font-weight:600}
/* 输入/选择/按钮: 统一到 --fs-body + 更精致边框圆角 */
input[type=text],input[type=password],input[type=date],input[type=number],select,textarea,
input.inp,.sel,.btn,.btn-group button,.month-tile{font-size:var(--fs-body)}
select,input.inp,.sel{height:33px;border-radius:var(--r-md)}
.btn{height:33px;border-radius:var(--r-md);padding:0 14px;font-size:var(--fs-body)}
.btn.primary{letter-spacing:.3px}
.btn-group{border-radius:var(--r-md)}
.btn-group button{height:31px;border-radius:0}
/* KPI: 数字更大更清晰, 标签更克制 */
.kpi{padding:15px 16px;border-color:var(--line-soft);border-radius:var(--r-lg)}
.kpi-v{font-size:var(--fs-kpi);font-weight:700;letter-spacing:-.5px;color:var(--ink)}
.kpi-t{font-size:var(--fs-small);color:var(--ink-3);font-weight:500}
.kpi-c{font-size:12px;color:var(--ink-3)}
/* 表格: 表头更轻、正文字号统一、行高呼吸 */
table.tbl{font-size:var(--fs-body)}
table.tbl th{font-size:var(--fs-small);color:var(--ink-2);letter-spacing:.2px;background:#fafbfd}
table.tbl th,table.tbl td{padding:9px 12px}
/* 徽章/标签: 字号统一, 圆角柔和 */
.badge,.st-pill,.kwtag~*{font-size:12px}
/* 空态/提示: 居中留白统一 */
.empty{padding:54px 20px}
/* 弹窗: 更精致圆角与层次 */
.modal{border-radius:var(--r-lg)}
/* 全局 tabular 数字覆盖到更多数值容器 */
.num,td.num,th.num,.kpi-v,.compact,.mono,table.tbl td[data-kind="money"],table.tbl td[data-kind="rate"],table.tbl td[data-kind="cnt"]{font-variant-numeric:tabular-nums}
/* 中英混排微调: 中文后英文/数字默认不加宽, 保持自然 */
.crumb{font-size:15px;font-weight:650;letter-spacing:.2px}

/* =============================================================
   v1.8.522 删除图表标题/卡片标题边上的副标题(灰色说明小字)
   父级反馈: "系统大部分图表标题边上都有一个副标题, 删除这个, 不需要"
   原 v1.8.517 起的 .sec-hd .sub / .card-hd .sub 一刀切隐藏, 不渲染不占位。
   JS 维护的副题(dashboard 的 lv2Sub1/2 等)DOM 仍在, setTextContent 仍生效,
   只是不可见——后续如需恢复可见性, 把这条 display:none 删掉即可。
   .sec-hd/.card-hd 原 flex 布局会把 .sub 空间让给主标题(更紧凑)。
   物理追加在最末, 同特异性靠后胜出。
   ============================================================= */
.sec-hd .sub,.card-hd .sub{display:none}

/* =============================================================
   v1.8.528 表格表头统一淡蓝背景
   父级反馈: "给所有页面的这类表格图表的表头都加一个淡蓝色"
   将 table.tbl th 背景从 v1.8.521 的 #fafbfd 改为 --info-soft(#eaf0ff),
   与表头悬停/排序态同色系但更淡, 全站数据表格表头视觉统一。
   物理追加在最末, 同特异性靠后胜出; 不影响 th.num / th[data-sort]
   等既有状态色(因其特异性相同或更高, 或靠后定义)。
   ============================================================= */
table.tbl th{background:var(--info-soft)}

/* =============================================================
   v1.8.632 卡片头部右侧筛选控件「标签与控件同行」
   父级反馈: 关键词趋势图的「关键词」标签独占一行、下拉掉到第二行,
   与右侧的图表类型按钮不在同一水平线, 看着不整齐。
   根因: .fld 默认 flex-direction:column(label 在上), 且 .fld select 带
        width:100%, 放进 .card-hd .right 这种 shrink-to-fit 的 flex 容器里
        必然换行 + 撑开。
   处理: 仅限定在 .card-hd .right 内改为横排(label 与控件同行、nowrap、
        控件宽 auto 由内联 min/max-width 决定), 不触碰筛选条与表单里的 .fld。
   仅 2 处使用该结构(关键词来源页·关键词趋势、流失分析页·竞品SKU), 统一整齐。
   物理追加在最末, 同特异性靠后胜出。
   ============================================================= */
.card-hd .right .fld{display:flex;flex-direction:row;align-items:center;gap:6px;margin:0}
.card-hd .right .fld>label{display:inline-block;white-space:nowrap;margin:0;font-size:12px;color:var(--ink-3);font-weight:600;letter-spacing:.2px}
.card-hd .right .fld>select,.card-hd .right .fld>input{width:auto;flex:0 0 auto}
.card-hd .right .fld>select{height:32px;padding:0 10px}

/* =============================================================
   v1.8.633 授权管理「模块开关」列表
   5 个模块(促销监控/团队协作/知识库/资料下载/热卖榜单)各一行:
   左=模块名+说明, 右=启停开关; 「资料下载」「热卖榜单」两行在开关
   下方内嵌各自配置(下载链接 / 4 条榜单网址)。
   物理追加在最末, 同特异性靠后胜出。
   ============================================================= */
.mod-list{display:flex;flex-direction:column;gap:12px}
.mod-row{border:1px solid var(--line);border-radius:var(--r-md);padding:14px 16px;background:var(--card)}
.mod-head{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.mod-info{flex:1;min-width:220px}
.mod-name{font-size:13px;font-weight:650;color:var(--ink);line-height:1.4}
.mod-desc{font-size:12px;color:var(--ink-3);margin-top:3px;line-height:1.5}
.mod-extra{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:12px;padding-top:12px;border-top:1px dashed var(--line-soft)}
.mod-extra-t{font-size:12px;font-weight:600;color:var(--ink-3);white-space:nowrap}
.mod-extra>input{flex:1;min-width:240px;width:auto;height:32px;border:1px solid var(--border);border-radius:8px;padding:0 10px;font-size:13px;background:var(--card);color:var(--text);font-family:inherit;box-sizing:border-box}
.mod-extra-col{margin-top:12px;padding-top:12px;border-top:1px dashed var(--line-soft)}
.mod-hot-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}
.mod-hot-grid>input{width:100%;height:32px;border:1px solid var(--border);border-radius:8px;padding:0 10px;font-size:13px;background:var(--card);color:var(--text);font-family:inherit;box-sizing:border-box}
.mod-btns{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px}
@media(max-width:720px){.mod-hot-grid{grid-template-columns:1fr}}

/* ============ v1.8.652 授权管理 · 品牌 LOGO 设置（三卡一行铺满，消除右侧留白） ============ */
.logo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px;align-items:stretch}

/* ============ v1.8.790 授权管理页 · 模块导航（吸顶）+ 序号徽标 ============ */
.lic-nav{position:sticky;top:0;z-index:25;display:flex;gap:8px;flex-wrap:wrap;align-items:center;
  padding:10px 12px;margin-bottom:16px;background:var(--card);border:1px solid var(--border);
  border-radius:var(--r-lg);box-shadow:0 1px 2px rgba(16,24,40,.04),0 6px 18px rgba(16,24,40,.05)}
.lic-nav::before{content:"模块导航";flex:0 0 auto;font-size:12px;font-weight:600;color:var(--muted);
  padding-right:10px;margin-right:2px;border-right:1px solid var(--border)}
.lic-nav-item{display:inline-flex;align-items:center;gap:7px;padding:7px 13px;font-size:13px;color:var(--text-2);
  text-decoration:none;border:1px solid var(--border);border-radius:999px;background:var(--bg);
  transition:background .15s,color .15s,border-color .15s;white-space:nowrap}
.lic-nav-item:hover{color:var(--text);border-color:var(--primary-soft);background:var(--card-2,#f3f6fb)}
.lic-nav-item b{flex:0 0 auto;width:18px;height:18px;line-height:18px;text-align:center;font-size:12px;
  font-weight:700;color:var(--primary);background:var(--primary-soft);border-radius:50%}
.lic-nav-item.active{color:var(--primary);border-color:var(--primary);background:var(--primary-soft);font-weight:600}
.lic-idx{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;
  font-size:12px;font-weight:700;color:var(--primary);background:var(--primary-soft);border-radius:50%}
/* 跳转落点让出吸顶导航高度，避免标题被遮 */
/* v1.8.849: 顶栏(58) + 本页导航(44) + 间距(10) —— 锚点跳转不被遮 */
#licStatus,#logoCard,#startSet,#moduleSet,#aiSet{scroll-margin-top:112px}

/* ============ v1.8.792 授权管理 · 起始页设置 子区块手风琴折叠 ============ */
.ss-sec{margin-bottom:14px}
.ss-sec:last-child{margin-bottom:0}
.ss-sec-h{cursor:pointer;user-select:none;transition:color .12s}
.ss-sec-h:hover{color:var(--primary)}
.ss-sec-h .ss-chev{width:9px;height:9px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);
  transform:rotate(45deg);transition:transform .18s;flex:0 0 auto;margin-left:auto}
/* v1.8.795 收起规则改「子选择器 >」：防止任何未来结构嵌套事故导致父区块收起连带藏掉子区块 body
   （v1.8.794 及之前用后代选择器，license.php 少一个 </div> 时 ② 被嵌进 ① → 点 ① 连带全展开/点 ② 展不开） */
.ss-sec.collapsed > .ss-sec-h .ss-chev{transform:rotate(-45deg)}
.ss-sec.collapsed > .ss-sec-body{display:none}

/* =============================================================
   v1.8.654 暗色主题 (GitHub Dark · 配色参考待办管理系统)
   基准: bg #000000 / 面板 #0b0b0d / 卡片 #1c1c1e / 悬浮 #2a2a2c / 边框 #31363e
         文字 #f5f5f7 (次级 64% / 弱 42%) / 状态色 GitHub 系(#30d158 #ffb340 #ff453a #d1d1d6)
   机制: html[data-theme="dark"] 由 PHP 按 Cookie 服务端渲染(v1.8.655) + head 内联脚本兜底;
   切换: 侧边栏底部「浅色/深色」两颗按钮(v1.8.656) setTheme() 双通道写入后整页刷新。
   ============================================================= */

/* ---- 变量覆盖 ---- */
html[data-theme="dark"]{
  color-scheme:dark;
  --primary:#d1d9e0;                    /* v1.8.658 黑白灰: 暗色主色=浅灰白(按钮白底黑字) */
  --primary-soft:rgba(209,217,224,.12);
  --primary-dark:#f5f5f7;               /* 深底 hover 更亮 */
  --bg:#000000;
  --card:#1c1c1e;
  --text:#f5f5f7;
  --text-2:rgba(245,245,247,.75);       /* v1.8.658 对比度提升(.64→.75) */
  --muted:rgba(245,245,247,.55);        /* (.42→.55) */
  --border:#38383a;
  --border-2:#2c2c2e;
  --up:#ff453a;
  --down:#30d158;
  --warn:#ffb340;
  --shadow:0 1px 2px rgba(0,0,0,.5),0 8px 24px rgba(0,0,0,.4);
  --success:#30d158;--success-soft:rgba(63,185,80,.14);--success-bd:rgba(63,185,80,.42);
  --warning:#ffb340;--warning-soft:rgba(210,153,34,.14);--warning-bd:rgba(210,153,34,.42);
  --danger:#ff453a;--danger-soft:rgba(248,81,73,.13);--danger-bd:rgba(248,81,73,.4);
  --info:#98989f;--info-soft:rgba(154,164,176,.13);--info-bd:rgba(154,164,176,.4);
  --neutral:#8e8e93;--neutral-soft:rgba(139,148,158,.13);--neutral-bd:rgba(139,148,158,.4);
  --purple:#aeaeb2;--purple-soft:rgba(176,186,196,.13);--purple-bd:rgba(176,186,196,.4);
  --teal:#98989f;--teal-soft:rgba(154,164,176,.13);--teal-bd:rgba(154,164,176,.4);
  --amber:#ffb340;--amber-soft:rgba(210,153,34,.14);--amber-bd:rgba(210,153,34,.42);
  --cyan:#98989f;--cyan-soft:rgba(154,164,176,.13);--cyan-bd:rgba(154,164,176,.4);
  --pink:#aeaeb2;--pink-soft:rgba(173,181,191,.13);--pink-bd:rgba(173,181,191,.4);
  --shadow-1:0 1px 2px rgba(0,0,0,.4);
  --shadow-2:0 1px 2px rgba(0,0,0,.5),0 4px 16px rgba(0,0,0,.4);
  --shadow-3:0 4px 12px rgba(0,0,0,.5),0 12px 32px rgba(0,0,0,.45);
  --row-stripe:rgba(245,245,247,.03);
  --row-hover:#2a2a2c;
}
/* 排版/字重对齐待办系统: Segoe UI Variable Text 优先(Windows 下观感一致) */
html[data-theme="dark"] body{
  font-family:"Segoe UI Variable Text",-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  background:#000000;color:#f5f5f7;
}
html[data-theme="dark"] ::-webkit-scrollbar-thumb{background:#3a3a3c}
html[data-theme="dark"] ::-webkit-scrollbar-thumb:hover{background:#48484a}

/* ---- 全局 chrome: 侧边栏 / 顶栏 / 下拉 ---- */
html[data-theme="dark"] .sidebar{background:#0b0b0d;border-right-color:#2c2c2e}
html[data-theme="dark"] .header{background:#0b0b0d;border-bottom-color:#2c2c2e;box-shadow:none}
html[data-theme="dark"] .sidebar .brand{border-bottom-color:#2c2c2e}
html[data-theme="dark"] .userbox .dropdown,
html[data-theme="dark"] .shop-switch .dropdown{background:#1c1c1e;border-color:#31363e;box-shadow:0 8px 24px rgba(0,0,0,.5)}
html[data-theme="dark"] .userbox .dropdown a{color:var(--text-2)}
html[data-theme="dark"] .userbox .dropdown a:hover{background:#2a2a2c;color:#f5f5f7}
html[data-theme="dark"] .userbox:hover{background:#2a2a2c}
html[data-theme="dark"] .shop-switch{background:#1c1c1e;border-color:#31363e}
html[data-theme="dark"] .menu-toggle svg{stroke:#d1d1d6}

/* ---- 卡片 / KPI ---- */
html[data-theme="dark"] .card{background:#1c1c1e;border-color:#2c2c2e;box-shadow:var(--shadow-1)}
html[data-theme="dark"] .kpi,html[data-theme="dark"] .kpi.k2,html[data-theme="dark"] .kpi.k3,
html[data-theme="dark"] .kpi.k4,html[data-theme="dark"] .kpi.k5,html[data-theme="dark"] .kpi.k6,
html[data-theme="dark"] .kpi.k7{background:#1c1c1e;border-color:#2c2c2e}
html[data-theme="dark"] .kpi .kpi-v{color:#f5f5f7}

/* ---- 表单控件 / 按钮 ---- */
html[data-theme="dark"] input[type=text],html[data-theme="dark"] input[type=password],
html[data-theme="dark"] input[type=date],html[data-theme="dark"] input[type=number],
html[data-theme="dark"] select,html[data-theme="dark"] textarea{
  background:#0d1117;border-color:#3a3a3c;color:#f5f5f7}
html[data-theme="dark"] input[type=text]:focus,html[data-theme="dark"] input[type=password]:focus,
html[data-theme="dark"] input[type=date]:focus,html[data-theme="dark"] input[type=number]:focus,
html[data-theme="dark"] select:focus,html[data-theme="dark"] textarea:focus{border-color:#98989f}
html[data-theme="dark"] select option,html[data-theme="dark"] select optgroup{
  background:#1c1c1e !important;color:#f5f5f7 !important}
html[data-theme="dark"] select option:checked{
  /* v1.8.678: 同上改实色 + 浅字(原 rgba 底 + #000000 深字在暗浮层里同样发黑) */
  background:#3a424d !important;color:#f5f5f7 !important}
html[data-theme="dark"] .btn{background:#2c2c2e;border-color:#3a3a3c;color:var(--text)}
html[data-theme="dark"] .btn:hover{background:#262d36;border-color:#48484a;color:#f5f5f7}
html[data-theme="dark"] .btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}
html[data-theme="dark"] .btn.primary:hover{background:#f5f5f7;border-color:#f5f5f7;color:#fff}
html[data-theme="dark"] .btn.danger{color:#ff7b72;border-color:rgba(248,81,73,.45)}
html[data-theme="dark"] .btn.danger:hover{background:rgba(248,81,73,.14);border-color:#ff453a;color:#ff7b72}
html[data-theme="dark"] .btn-group{background:#0d1117;border-color:#3a3a3c}
html[data-theme="dark"] .btn-group button{background:#0d1117;color:var(--text-2);border-right-color:#2c2c2e}
html[data-theme="dark"] .btn-group button:hover{background:#2a2a2c;color:#f5f5f7}
html[data-theme="dark"] .month-tile{background:#0d1117;border-color:#3a3a3c}
html[data-theme="dark"] .month-tile:hover{background:#2a2a2c;border-color:#48484a}
html[data-theme="dark"] .month-tile.more{background:transparent;border-color:#3a3a3c}
html[data-theme="dark"] .month-tile.older{background:transparent}
html[data-theme="dark"] .pager button{background:#0d1117;border-color:#3a3a3c;color:var(--text-2)}
html[data-theme="dark"] .pager button:hover{background:#2a2a2c}
html[data-theme="dark"] input.inp{background:#0d1117;border-color:#3a3a3c}
html[data-theme="dark"] .city-sel{background:#0d1117;border-color:#3a3a3c}

/* ---- 表格 ---- */
html[data-theme="dark"] .tbl th{background:#1c1c1e;color:#d1d1d6;border-bottom-color:#30363e}
html[data-theme="dark"] .tbl td{border-bottom-color:#2c2c2e}
html[data-theme="dark"] .tbl tbody tr:hover td{background:#2a2a2c}
html[data-theme="dark"] table.tbl.xgrid tbody tr.hl-row td{background:rgba(209,217,224,.12)!important}

/* ---- 提示 / 弹窗 / 空态 / 徽章 ---- */
html[data-theme="dark"] .alert.info{background:rgba(88,166,255,.12);color:#d1d1d6;border-color:rgba(88,166,255,.35)}
html[data-theme="dark"] .alert.ok{background:rgba(63,185,80,.12);color:#56d364;border-color:rgba(63,185,80,.35)}
html[data-theme="dark"] .alert.err{background:rgba(248,81,73,.12);color:#ff7b72;border-color:rgba(248,81,73,.35)}
html[data-theme="dark"] .alert.warn{background:rgba(210,153,34,.12);color:#e3b341;border-color:rgba(210,153,34,.35)}
html[data-theme="dark"] .modal{background:#1c1c1e;box-shadow:0 20px 60px rgba(0,0,0,.6)}
html[data-theme="dark"] .modal-hd{border-bottom-color:#2c2c2e}
html[data-theme="dark"] .empty{background:transparent;border-color:#31363e}
html[data-theme="dark"] .badge.gray{background:rgba(139,148,158,.15);color:#8e8e93}
html[data-theme="dark"] .badge.orange{background:rgba(210,153,34,.15);color:#e3b341}
html[data-theme="dark"] .badge.purple{background:rgba(163,113,247,.15);color:#d1d1d6}
html[data-theme="dark"] .badge.teal{background:rgba(57,197,207,.15);color:#d1d1d6}
html[data-theme="dark"] .badge.danger{background:rgba(248,81,73,.13);color:#ff7b72;border-color:rgba(248,81,73,.4)}

/* ---- 图表全屏按钮 (v1.8.656: 跟随新文字按钮样式) ---- */
html[data-theme="dark"] .chart-fs-btn{background:var(--card);color:var(--primary);border-color:var(--primary)}
html[data-theme="dark"] .chart-fs-btn:hover{background:var(--primary);color:#fff}
html[data-theme="dark"] .chart-fs .chart-fs-btn,html[data-theme="dark"] .chart-fs-btn.in-fs{background:var(--card);color:var(--primary);border-color:var(--primary)}

/* ---- v1.8.656 主题切换: 侧边栏最下方 浅色/深色 两颗按钮 ---- */
.sidebar-theme{margin-top:auto;display:flex;gap:8px;padding:10px 12px 14px;border-top:1px solid var(--border);flex-shrink:0}
.sidebar-theme button{flex:1;height:30px;display:inline-flex;align-items:center;justify-content:center;gap:5px;border:1px solid var(--border);background:transparent;color:var(--text-2);font-size:12px;cursor:pointer;transition:.15s}
.sidebar-theme button:hover{border-color:var(--primary);color:var(--primary)}
.sidebar-theme button.on{background:var(--primary-soft);border-color:var(--primary);color:var(--primary);font-weight:600}

/* ---- 团队协作 / 甘特 / 日历 等浅色硬编码面 ---- */
html[data-theme="dark"] .panel,html[data-theme="dark"] .kcard,html[data-theme="dark"] .dist,
html[data-theme="dark"] .proj,html[data-theme="dark"] .proj-detail,html[data-theme="dark"] .pli,
html[data-theme="dark"] .view-chip,html[data-theme="dark"] .tk-side,html[data-theme="dark"] .tk-list,
html[data-theme="dark"] .tk-row,html[data-theme="dark"] .tk-collab,html[data-theme="dark"] .tk-tab,
html[data-theme="dark"] .tk-filter,html[data-theme="dark"] .sched .day,html[data-theme="dark"] .cal-cell{
  background:#1c1c1e;border-color:#2c2c2e}
html[data-theme="dark"] .cal-cell.weekend{background:#0d1117}
html[data-theme="dark"] .cal-cell.weekend:hover{background:#2a2a2c}
html[data-theme="dark"] .pli.overdue,html[data-theme="dark"] .sched .day.overdue,
html[data-theme="dark"] .node.overdue,html[data-theme="dark"] .ms-item.overdue{
  background:rgba(248,81,73,.08);border-color:rgba(248,81,73,.35)}
html[data-theme="dark"] .river .kcard{background:#1c1c1e}

/* ---- 登录页(跟随主题) ---- */
html[data-theme="dark"] .login-wrap{background:#000000}
html[data-theme="dark"] .login-right{background:#0d1117}
html[data-theme="dark"] .login-card{background:#1c1c1e;box-shadow:0 20px 60px rgba(0,0,0,.55)}
html[data-theme="dark"] .login-welcome h2{color:#f5f5f7}
html[data-theme="dark"] .login-welcome p{color:#8e8e93}
html[data-theme="dark"] .login-card .form-row label{color:#d1d1d6}
html[data-theme="dark"] .login-card input[type="text"],
html[data-theme="dark"] .login-card input[type="password"]{background:#0d1117;border-color:#3a3a3c;color:#f5f5f7}
html[data-theme="dark"] .login-card input[type="text"]:focus,
html[data-theme="dark"] .login-card input[type="password"]:focus{border-color:#98989f}

/* ---- 知识库左侧导航(layout 内嵌样式为浅色硬编码, 此处覆盖) ---- */
html[data-theme="dark"] .kb-nav-cats{background:#1c1c1e;border-color:#2c2c2e}
html[data-theme="dark"] .kb-nav-hd{color:#8e8e93}
html[data-theme="dark"] .kb-nav-cat{color:#d1d1d6}
html[data-theme="dark"] .kb-nav-cat:hover{background:#2a2a2c;color:#f5f5f7}
html[data-theme="dark"] .kb-nav-cat .cnt{background:#2c2c2e;color:#8e8e93}
html[data-theme="dark"] .kb-nav-cat.active .cnt{background:rgba(209,217,224,.2)}

/* =============================================================
   v1.8.655 全站直角化(爹需求: 不喜欢圆角 —— 按钮/筛选框/卡片/弹窗/图表提示框等全直角)
   做法: 通配清零(!important 压过全部既有规则与 ECharts tooltip 内联样式),
         再豁免「圆形功能件」; 保留头像/状态圆点/加载圈/开关胶囊的圆形(视觉功能件, 非表面圆角)。
   ============================================================= */
:root{--radius:0;--r-sm:0;--r-md:0;--r-lg:0}
*{border-radius:0!important}
*::before,*::after{border-radius:0!important}
/* 豁免清单: 50% 圆形 */
.avatar,.av,.u-avatar,
.kcol h4 .dot,.cal-bar .cb-dot,.gantt-left .gl-dot,.gantt-left .pg-dot,
.rcol-h .ch-ico,.start-link .sl-ico,.lnk-row .lnk-ico,
.ss-switch-track,.ss-switch-track .ss-switch-knob,
.spin,.spin.dark,
.nav-child::before,.nav-child.active::before,.tk-row.st-done .tk-title:before,
.lic-state-dot{border-radius:50%!important}
/* v1.8.696: .eng-ico 移出圆形豁免 —— 搜索引擎图标改方形(直角) */
/* 滚动条保留微圆(纯触感, 非 UI 表面) */
::-webkit-scrollbar-thumb{border-radius:4px!important}

/* =============================================================
   v1.8.657 暗色补丁: 全站浅色残留清扫(jdbps 实测反馈: 标题暗蓝/LOGO白带/导航hover白底白字/十字光标黄)
   ============================================================= */
html[data-theme="dark"]{
  /* 设计 token(v1.8.517) 中性灰族 —— 此前未覆盖, 导致 .card-hd h3/.sec-hd h2 等标题
     (color:var(--ink)) 与次级文字(--ink-2) 在暗底下呈深墨蓝; 按爹要求标题类用白色 */
  --ink:#f5f5f7;
  --ink-2:#d1d1d6;
  --ink-3:#8e8e93;
  --line:#30363e;
  --line-soft:#2c2c2e;
}
/* 品牌区: 干掉白→浅灰渐变(暗色下 LOGO 背后一条白带) */
html[data-theme="dark"] .sidebar .brand{background:#0b0b0d}
html[data-theme="dark"] body.no-sidebar .sidebar{background:#0b0b0d;border-right-color:#2c2c2e}
/* 侧栏导航 hover: 原硬编码 #f2f2f7 白底 + 暗色白字 = 白块白字(文字隐形) → 主色半透明底 */
html[data-theme="dark"] .nav-item:hover,html[data-theme="dark"] .nav-parent:hover,
html[data-theme="dark"] .nav-child:hover{background:rgba(209,217,224,.10);color:#f5f5f7}
html[data-theme="dark"] .nav-child::before{background:#3d4654}
/* xgrid 十字光标: 硬编码淡黄(#fff7e6/#ffe8a3/#fdf3dc) → 主色半透明(行/列/交点) */
html[data-theme="dark"] table.tbl.xgrid tbody tr.hl-row td{background:rgba(209,217,224,.10)!important}
html[data-theme="dark"] table.tbl.xgrid tbody tr.hl-row td.x-c-hl{background:rgba(245,245,247,.22)!important}
html[data-theme="dark"] table.tbl.xgrid tbody td.x-c-hl{background:rgba(209,217,224,.06)!important}
/* 价盘页十字高亮(页面级淡金) */
html[data-theme="dark"] .pb-table tbody tr.hl-row td{background:rgba(209,217,224,.10)}
html[data-theme="dark"] .pb-table tbody tr.hl-row td.c-hl{background:rgba(245,245,247,.22)}
/* 知识库页白底正文区 */
html[data-theme="dark"] .content{background:#000000}
/* v1.8.680: 删除 html[data-theme="dark"] .kb-hero{background:#1c1c1e} —— 比 --kb-page(#000000)
   亮一截, 深色下页面顶部出现灰色横条; hero 现随 --kb-page 与页面同底, 仅留底部 hairline */

/* =============================================================
   v1.8.658 暗色增强: 主按钮白底黑字 / 白 th 修复 / 侧栏主题按钮强化 / 输入框强制暗底
   ============================================================= */
html[data-theme="dark"] .btn.primary{background:#f5f5f7;border-color:#f5f5f7;color:#000000}
html[data-theme="dark"] .btn.primary:hover{background:#fff;border-color:#fff;color:#000000}
html[data-theme="dark"] .btn.primary:disabled{opacity:.5}
/* 任意表头(th)在暗色下统一深底浅字 —— 修「月度环比明细表」个别 th 白底白字 */
html[data-theme="dark"] .tbl thead th,html[data-theme="dark"] table.tbl thead th{
  background:#1c1c1e!important;color:#d1d1d6!important;border-color:#30363e!important}
html[data-theme="dark"] .tbl thead th.sorted,html[data-theme="dark"] table.tbl.xgrid thead th.sorted{
  background:#2c2c2e!important;color:#f5f5f7!important}
/* 侧栏主题按钮: 当前主题按钮高对比反白 */
html[data-theme="dark"] .sidebar-theme button.on{background:#f5f5f7;border-color:#f5f5f7;color:#000000}
.sidebar-theme button.on{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:600}
/* 页面级样式把输入框写成白底(如产品管理成本列) → 暗色强制 */
html[data-theme="dark"] .content input[type=text],html[data-theme="dark"] .content input[type=number],
html[data-theme="dark"] .content input[type=password],html[data-theme="dark"] .content input[type=date],
html[data-theme="dark"] .content select,html[data-theme="dark"] .content textarea{
  background:#0d1117!important;border-color:#3a3a3c!important;color:#f5f5f7!important}
html[data-theme="dark"] .content input::placeholder,html[data-theme="dark"] .content textarea::placeholder{color:#7c7c80}

/* ---- v1.8.659 暗色补丁: 数据导入拖拽区 / 数据检测汇总卡 ---- */
html[data-theme="dark"] #drop{background:#1c1c1e!important;border-color:#31363e!important;color:#f5f5f7}
html[data-theme="dark"] #drop *{color:#d1d1d6}
html[data-theme="dark"] .dc-sum .it{background:#1c1c1e;border-color:#2c2c2e}
html[data-theme="dark"] .dc-sub th{background:#1c1c1e;color:#d1d1d6}
html[data-theme="dark"] .dc-sub td{background:#1c1c1e}

/* =============================================================
   v1.8.663 暗色增强二轮: 顶栏选中态浅底暗字 / ::selection 灰阶(修文字拖选默认蓝底)
   ============================================================= */
html[data-theme="dark"] .topnav a.active{background:#f5f5f7;border-color:#f5f5f7;color:#000000}
html[data-theme="dark"] .topnav a.active .tn-ico{color:#000000}
html[data-theme="dark"] .topnav a{color:var(--text-2);background:rgba(245,245,247,.05);border-color:rgba(245,245,247,.14)}
html[data-theme="dark"] .topnav a:hover{background:rgba(245,245,247,.10);color:#f5f5f7}
::selection{background:rgba(135,145,155,.45);color:inherit}
html[data-theme="dark"] ::selection{background:rgba(209,217,224,.35);color:#f5f5f7}

/* =============================================================
   v1.8.664 暗色增强三轮: 选中/未选中按钮强区分 / 表格正文白字 / 导入弹窗深底 / 筛选组换行
   ============================================================= */
/* 选中态按钮一律反白(浅灰白底+黑字), 与幽灵态未选中按钮强区分 */
/* v1.8.860: 选中态改 Apple 分段控制器滑块(#636366 灰底白字, 与灰轨道强区分; 原"反白"方案废弃) */
html[data-theme="dark"] .btn-group button.on,
html[data-theme="dark"] .month-tile.on,
html[data-theme="dark"] .view-chip.on,
html[data-theme="dark"] .tk-tab.on,
html[data-theme="dark"] .tk-type.on,
html[data-theme="dark"] .metric-tabs button.on,
html[data-theme="dark"] .range-tabs button.on,
html[data-theme="dark"] .ps.on,
html[data-theme="dark"] .sidebar-theme button.on{background:#636366!important;border-color:#636366!important;color:#ffffff!important;font-weight:600}
/* 表格正文: 暗色下统一白字(继承发暗的列全部提亮; 行内红/绿/橙等语义色不受影响) */
html[data-theme="dark"] .tbl td{color:#f5f5f7}
html[data-theme="dark"] .tbl td b{color:#f5f5f7}
html[data-theme="dark"] .tbl td small{color:rgba(245,245,247,.6)}
/* 产品管理 Excel 导入弹窗: 页面内联白底 → 暗色深底 */
html[data-theme="dark"] #impModal > div{background:#1c1c1e!important;color:#f5f5f7}
html[data-theme="dark"] #impModal h3{color:#f5f5f7}
html[data-theme="dark"] #impModal .muted{color:rgba(245,245,247,.55)}
html[data-theme="dark"] #impResult table,html[data-theme="dark"] #impResult tbody{background:transparent!important}
html[data-theme="dark"] #impResult th,html[data-theme="dark"] #impResult td{background:transparent!important;color:#d1d1d6!important;border-color:#30363e!important}
/* 筛选按钮组允许换行(广告概览 Top 渠道趋势 11+ 按钮溢出卡外) */
.btn-group{flex-wrap:wrap;row-gap:6px}

/* =============================================================
   v1.8.665 暗色补丁: 价盘页十字光标/字段色 + 毛保计算器整页(爹实测反馈)
   ============================================================= */
/* ---- 自营价盘分析(fin_pricebook): 十字光标淡金→主色半透明; 字段族深海军蓝→灰阶 ---- */
html[data-theme="dark"] .pb-table tbody tr.hl-row td{background:rgba(209,217,224,.10)!important}
html[data-theme="dark"] .pb-table tbody tr.hl-row td.c-hl{background:rgba(209,217,224,.24)!important}
html[data-theme="dark"] .pb-table tbody td.c-hl{background:rgba(209,217,224,.07)!important}
html[data-theme="dark"] .pb-table tbody tr.miss-row td{background:transparent;color:#8e8e93}
html[data-theme="dark"] .pb-col-price{color:#d1d1d6}
html[data-theme="dark"] .pb-col-act{color:#98989f}
html[data-theme="dark"] .pb-col-net{color:#f5f5f7}
html[data-theme="dark"] .pb-col-supply{color:#adbac7}
html[data-theme="dark"] .pb-col-cost{color:#98989f}
html[data-theme="dark"] .pb-col-fee{color:#8e8e93}
html[data-theme="dark"] .pb-col-floor{color:#e3b341}
html[data-theme="dark"] .pb-table thead th[data-k]:hover,
html[data-theme="dark"] .pb-table thead th.sorted{background:#2c2c2e;color:#f5f5f7}
/* ---- 毛保计算器(tool_margin): 整页白卡/淡蓝横幅/白公式面板 → 暗色 ---- */
html[data-theme="dark"] .margin-calc .card{background:#1c1c1e;box-shadow:none;border-color:#2c2c2e}
html[data-theme="dark"] .margin-calc .mc-head{background:linear-gradient(135deg,#1c1c1e,#2c2c2e)}
html[data-theme="dark"] .margin-calc .tag{background:#2c2c2e;color:#98989f}
html[data-theme="dark"] .margin-calc .f label{color:#d1d1d6}
html[data-theme="dark"] .margin-calc .f input,
html[data-theme="dark"] .margin-calc .f select{background:#0d1117;border-color:#30363e;color:#f5f5f7}
html[data-theme="dark"] .margin-calc .f input::placeholder{color:#7c7c80}
html[data-theme="dark"] .margin-calc .ph.ok{background:rgba(209,217,224,.10);color:#f5f5f7;border-color:#31363e}
html[data-theme="dark"] .margin-calc .ph.warn{background:rgba(210,153,34,.12);color:#e3b341;border-color:rgba(210,153,34,.4)}
html[data-theme="dark"] .margin-calc .bp{background:#f5f5f7;color:#000000}
html[data-theme="dark"] .margin-calc .bp:hover{background:#fff}
html[data-theme="dark"] .margin-calc .br{background:#2c2c2e;color:#d1d1d6}
html[data-theme="dark"] .margin-calc th{background:#1c1c1e;border-bottom-color:#30363e;color:#d1d1d6}
html[data-theme="dark"] .margin-calc tr:hover{background:#2a2a2c}
html[data-theme="dark"] .margin-calc tr.hl{background:rgba(209,217,224,.10)}
html[data-theme="dark"] .margin-calc .ty{background:rgba(63,185,80,.15);color:#56d364}
html[data-theme="dark"] .margin-calc .tn{background:rgba(248,81,73,.14);color:#ff7b72}
html[data-theme="dark"] .margin-calc .fb{background:#0d1117;border-color:#2c2c2e;color:#d1d1d6}
html[data-theme="dark"] .margin-calc .fb code{background:#2c2c2e;color:#d1d1d6}

/* =============================================================
   v1.8.666 暗色根治: XGrid 分类着色(data-kind) 主题化 —— 满屏暗字的真正根因
   (cnt=#334155 深灰蓝 / dim=#111827 近黑 / money=#14509a 深蓝, 特异性压过 .tbl td 白字规则。
    深色配色下此类表格文字一律浅色: 爹明确要求)
   ============================================================= */
html[data-theme="dark"] table.tbl.xgrid td[data-kind="money"],html[data-theme="dark"] table.tbl.xgrid td.x-money{color:#d1d1d6}
html[data-theme="dark"] table.tbl.xgrid td[data-kind="rate"],html[data-theme="dark"] table.tbl.xgrid td.x-rate{color:#e3b341}
html[data-theme="dark"] table.tbl.xgrid td[data-kind="cnt"],html[data-theme="dark"] table.tbl.xgrid td.x-cnt{color:#f5f5f7}
html[data-theme="dark"] table.tbl.xgrid td[data-kind="code"],html[data-theme="dark"] table.tbl.xgrid td.x-code{color:#8e8e93}
html[data-theme="dark"] table.tbl.xgrid td[data-kind="dim"]{color:#f5f5f7}
html[data-theme="dark"] table.tbl.xgrid td.x-neg{color:#ff7b72}
html[data-theme="dark"] .margin-calc td{color:#f5f5f7}

/* =============================================================
   v1.8.668 暗色补丁: 团队协作全系 / 知识库首页 / 促销SKU选择 / 表格内输入框(爹实测反馈)
   ============================================================= */
/* ---- 团队协作: 筛选白条 / 看板列 / 进度条轨道 ---- */
html[data-theme="dark"] .team-bar{background:#1c1c1e;border-color:#2c2c2e}
html[data-theme="dark"] .team-bar .tk-search{background:#0d1117;border-color:#30363e}
html[data-theme="dark"] .kcol{background:#1c1c1e;border-color:#2c2c2e}
html[data-theme="dark"] .kcol h4{color:#f5f5f7}
html[data-theme="dark"] .kcol.drop{border-color:#98989f;background:#1a2027}
html[data-theme="dark"] .kanban .kcol.st-todo{background:#1c1c1e;border-color:#2c2c2e}
html[data-theme="dark"] .kanban .kcol.st-doing{background:#10161c;border-color:#1f3a33}
html[data-theme="dark"] .kanban .kcol.st-done{background:#12141a;border-color:#2c2c2e}
html[data-theme="dark"] .sd-bar,html[data-theme="dark"] .load-bar,
html[data-theme="dark"] .proj-bar{background:#2c2c2e}
html[data-theme="dark"] .sd-fill,html[data-theme="dark"] .load-fill{opacity:.92}
/* ---- 知识库首页: 标题提亮(fcard 色块 v1.8.679 由页面内样式自带, 不再覆盖) ---- */
html[data-theme="dark"] .kb-hero .title{color:#f5f5f7}
html[data-theme="dark"] .kb-hero .subtitle{color:#98989f}
/* ---- 促销管理 SKU 选择面板(promo_list) ---- */
html[data-theme="dark"] .sku-btn{background:#2c2c2e;border-color:#3a3a3c;color:#d1d1d6}
html[data-theme="dark"] .sku-btn:hover{border-color:#98989f;color:#f5f5f7;background:#262d36}
html[data-theme="dark"] .sku-opt{background:#0d1117;border-color:#3a3a3c;color:#d1d1d6}
html[data-theme="dark"] .sku-opt:hover{background:#2a2a2c}
html[data-theme="dark"] .sku-opt:has(input:checked){background:rgba(209,217,224,.12)}
/* ---- 表格内联输入框(产品管理 公司限价等自定义字段列) ---- */
html[data-theme="dark"] .tbl input,html[data-theme="dark"] .tbl select,html[data-theme="dark"] .tbl textarea{
  background:#0d1117!important;border-color:#3a3a3c!important;color:#f5f5f7!important}
html[data-theme="dark"] .tbl input::placeholder{color:#7c7c80}

/* ---- v1.8.674 暗色补丁: 产品管理 自定义字段列(col-cf 近白底灰字) ---- */
html[data-theme="dark"] .prod-table-wrap td.col-cf{background:#0d1117;color:#d1d1d6}
html[data-theme="dark"] .prod-table-wrap td.col-cf.num{color:#ff7b72}

html[data-theme="dark"] .prod-table-wrap td.col-sku{color:#98989f}
html[data-theme="dark"] .prod-table-wrap td.col-shop{color:#aeaeb2}
html[data-theme="dark"] .prod-table-wrap td.col-manu,html[data-theme="dark"] .prod-table-wrap td.col-model{color:#98989f}
html[data-theme="dark"] .prod-table-wrap td.col-cat{color:#30d158}
html[data-theme="dark"] .prod-table-wrap td.col-cost,html[data-theme="dark"] .prod-table-wrap td.col-price{color:#ff7b72}

/* =============================================================
   v1.8.675 暗色补丁: 产品编辑弹窗 / 知识库编辑器全系 / 示例数据 / fcard 重设计
   ============================================================= */
html[data-theme="dark"] #prodModal > div{background:#1c1c1e!important;color:#f5f5f7}
html[data-theme="dark"] #prodModal h3{color:#f5f5f7}
html[data-theme="dark"] #prodModal .muted{color:rgba(245,245,247,.55)}
html[data-theme="dark"] .kb-tool button{background:#2c2c2e;border-color:#3a3a3c;color:#d1d1d6}
html[data-theme="dark"] .kb-tool button:hover{border-color:#98989f;color:#f5f5f7}
html[data-theme="dark"] #editor{background:#0d1117;border-color:#3a3a3c;color:#f5f5f7}
html[data-theme="dark"] .side-card{background:#1c1c1e;border-color:#2c2c2e}
html[data-theme="dark"] .kb-side .ipt,html[data-theme="dark"] .kb-side select.ipt,
html[data-theme="dark"] .kb-side textarea{background:#0d1117;border-color:#3a3a3c;color:#f5f5f7}
html[data-theme="dark"] .role-box label{background:#0d1117;border-color:#3a3a3c;color:#d1d1d6}
html[data-theme="dark"] .cat-collapse,html[data-theme="dark"] .cat-manage{background:#1c1c1e;border-color:#2c2c2e}
html[data-theme="dark"] .kb-url-ipt{background:#0d1117;border-color:#3a3a3c;color:#f5f5f7}
html[data-theme="dark"] .kb-url-ipt:focus{background:#0d1117;box-shadow:0 0 0 3px rgba(209,217,224,.12)}
/* v1.8.679: fcard 色块卡(深灰/红)由页面内样式定义, 明暗通用, 此处不再覆盖 */
html[data-theme="dark"] .kb-pub a{background:#f5f5f7;color:#000000}
html[data-theme="dark"] .kb-pub a:hover{background:#fff}
/* 示例数据页 */
html[data-theme="dark"] .demo-status th{color:#98989f;border-bottom-color:#2c2c2e}
html[data-theme="dark"] .demo-status td{border-bottom-color:#2c2c2e}
html[data-theme="dark"] .demo-status .num{color:#f5f5f7}
html[data-theme="dark"] .demo-status .empty{color:#8e8e93}

/* ==========================================================================
   v1.8.676 知识库(KB) 设计 token —— 全灰阶, 无蓝/无彩虹
   浅/深双套, 页面内一律引用变量而非硬编码, 主题自动跟随。
   设计语言: GitHub Primer / Linear —— 细 hairline 边框 + 低对比分层 + 排版层级,
   高级感来自「留白与层级」而非色块。
   ========================================================================== */
:root{
  --kb-page:#ffffff;          /* 页面底 */
  --kb-surface:#ffffff;       /* 卡片面 */
  --kb-surface-2:#f7f9fc;     /* 次级面(输入框底/表头) */
  --kb-surface-3:#f1f4f9;     /* 三级面(缩略图/图标块) */
  --kb-line:#e5e5ea;          /* hairline 边框 */
  --kb-line-2:#ececf0;        /* 更淡分隔线 */
  --kb-ink:#111827;           /* 主标题 */
  --kb-ink-2:#3f4a5c;         /* 正文 */
  --kb-ink-3:#667085;         /* 次级说明 */
  --kb-ink-4:#98a2b3;         /* 极弱(meta/时间) */
  --kb-hover:#f2f2f7;         /* 行悬停 */
  --kb-accent:#24292f;        /* 强调(近黑) */
  --kb-accent-ink:#ffffff;    /* 强调上的文字 */
  --kb-shadow:0 1px 2px rgba(16,24,40,.04),0 4px 16px rgba(16,24,40,.05);
  --kb-shadow-lift:0 2px 6px rgba(16,24,40,.06),0 12px 28px rgba(16,24,40,.08);
}
html[data-theme="dark"]{
  --kb-page:#000000;
  --kb-surface:#0d1117;
  --kb-surface-2:#1c1c1e;
  --kb-surface-3:#26262a;
  --kb-line:#3a3a3c;
  --kb-line-2:#2c2c2e;
  --kb-ink:#f5f5f7;
  --kb-ink-2:#d1d1d6;
  --kb-ink-3:#8e8e93;
  --kb-ink-4:#7c7c80;
  --kb-hover:#1c1c1e;
  --kb-accent:#f5f5f7;
  --kb-accent-ink:#000000;
  --kb-shadow:0 1px 2px rgba(0,0,0,.5);
  --kb-shadow-lift:0 2px 8px rgba(0,0,0,.55),0 12px 30px rgba(0,0,0,.5);
}

/* ---------- 知识库左侧分类导航(layout.php 内联) ---------- */
.kb-nav-cats{background:var(--kb-surface)!important;border:1px solid var(--kb-line)!important}
.kb-nav-hd{color:var(--kb-ink-4)!important}
.kb-nav-cat{color:var(--kb-ink-2)!important}
.kb-nav-cat:hover{background:var(--kb-hover)!important;color:var(--kb-ink)!important}
.kb-nav-cat.active{background:var(--kb-surface-2)!important;color:var(--kb-ink)!important}
.kb-nav-cat .cnt{color:var(--kb-ink-4)!important;background:var(--kb-surface-3)!important}
.kb-nav-cat.active .cnt{color:var(--kb-ink)!important;background:var(--kb-surface-3)!important}

/* ---------- v1.8.676 编辑器/正文 代码块: 深色下改中性深底 + hairline ---------- */
html[data-theme="dark"] #editor pre,
html[data-theme="dark"] .art-content pre{background:#000000!important;color:#d1d1d6!important;border:1px solid #3a3a3c}
html[data-theme="dark"] #editor blockquote,
html[data-theme="dark"] .art-content blockquote{border-left-color:#3a3a3c;color:var(--ink-3)}

/* =============================================================
   v1.8.680 起始页搜索框: 玻璃半透明(明暗通用)
   背景: 白胶囊改磨砂玻璃; 深色背景图下改深色玻璃+白字。
   同时阻断深色主题全局 input 深底规则对搜索输入框的污染
   (v1.8.678 截图里输入框纯黑的根因)。
   ============================================================= */
.start-search{background:rgba(255,255,255,.9);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid rgba(255,255,255,.35)}
.start-search input{background:transparent!important;border:0!important;color:#111827}
.start-search input::placeholder{color:rgba(17,24,39,.45)}
.start-search>button{background:#24292f;color:#fff}
.start-search>button:hover{background:#0d1117}
/* 深色背景(未开浅色背景模式)下: 深色玻璃 + 白字 + 白色半透明按钮 */
.start-wrap:not(.start-light) .start-search{background:rgba(255,255,255,.13);border-color:rgba(255,255,255,.22);box-shadow:0 12px 36px rgba(0,0,0,.38)}
.start-wrap:not(.start-light) .start-search input{color:#fff!important}
.start-wrap:not(.start-light) .start-search input::placeholder{color:rgba(255,255,255,.55)}
.start-wrap:not(.start-light) .start-search>button{background:rgba(255,255,255,.2);color:#fff}
.start-wrap:not(.start-light) .start-search>button:hover{background:rgba(255,255,255,.32)}
.start-wrap:not(.start-light) .start-engine-select{background:transparent!important;border-right:1px solid rgba(255,255,255,.18)}
.start-wrap:not(.start-light) .start-engine-select .eng-trigger{color:#fff!important}
.start-wrap:not(.start-light) .start-engine-select .eng-arrow{color:rgba(255,255,255,.6)}
/* 深色主题下阻断全局 input 深底规则(浅色背景图时保持深字) */
html[data-theme="dark"] .start-search input{background:transparent!important;border:0!important}
html[data-theme="dark"] .start-wrap:not(.start-light) .start-search input{color:#fff!important}
html[data-theme="dark"] .start-wrap.start-light .start-search input{color:#111827!important}
html[data-theme="dark"] .start-wrap.start-light .start-search input::placeholder{color:rgba(17,24,39,.45)}

/* =============================================================
   v1.8.681 起始页深色双修(无头浏览器实测定位):
   ① 顶栏黑条: html[data-theme="dark"] .header{background:#0b0b0d}(L1700, 无important)
      与 body.start-transparent .header{background:transparent}(L1356) 同特异性(0,1,1),
      前者在后 → 起始页顶栏被染黑。用更高特异性 + important 压回透明。
   ② 搜索输入框纯黑真凶(680 没修掉的根因): 全局规则
      html[data-theme="dark"] .content input[type=text]{background:#0d1117!important}
      特异性 (0,3,2)+important —— 起始页也在 .content 容器里, 压过 680 的
      .start-search input(0,1,1)+important。用 #q ID 级特异性 (1,0,0) 终极压制。
      (经 playwright 线上注入验证: q_bg → rgba(0,0,0,0), header_bg → 透明)
   ============================================================= */
#q{background:transparent!important;border:0!important;box-shadow:none!important;appearance:none;-webkit-appearance:none}
.start-wrap:not(.start-light) .start-search input#q{color:#fff!important}
.start-wrap:not(.start-light) .start-search input#q::placeholder{color:rgba(255,255,255,.55)!important}
html[data-theme="dark"] .start-wrap.start-light .start-search input#q{color:#111827!important}
html[data-theme="dark"] .start-wrap.start-light .start-search input#q::placeholder{color:rgba(17,24,39,.45)!important}
html[data-theme="dark"] body.start-transparent .header,
html[data-theme="dark"] body.start-transparent.start-light .header{background:transparent!important;border-bottom-color:transparent!important;box-shadow:none!important}

/* =============================================================
   v1.8.682 知识库正文内联色深色适配(实测: 公众号采集文 99 个元素带
   内联 color:rgba(0,0,0,.9) + 内联蓝链接 rgb(0,128,255), 深色下隐形)。
   用 !important 压过富文本内联样式; 标题/链接/代码块在其后重申。
   阅读页(.art-content)与编辑器(#editor)同套处理。
   ============================================================= */
html[data-theme="dark"] .art-content,
html[data-theme="dark"] .art-content *{color:var(--kb-ink-2)!important}
html[data-theme="dark"] .art-content h1,html[data-theme="dark"] .art-content h2,
html[data-theme="dark"] .art-content h3,html[data-theme="dark"] .art-content h4,
html[data-theme="dark"] .art-content h5,html[data-theme="dark"] .art-content h6,
html[data-theme="dark"] .art-content strong,html[data-theme="dark"] .art-content b{color:var(--kb-ink)!important;font-weight:700}
html[data-theme="dark"] .art-content a{color:var(--kb-ink)!important;text-decoration:underline!important;text-underline-offset:2px}
html[data-theme="dark"] .art-content a:hover{color:#fff!important}
html[data-theme="dark"] .art-content pre,
html[data-theme="dark"] .art-content pre *{background:#000000!important;color:#d1d1d6!important;border:1px solid #3a3a3c}
html[data-theme="dark"] .art-content pre *{border:0!important}
html[data-theme="dark"] .art-content blockquote,
html[data-theme="dark"] .art-content blockquote *{color:var(--kb-ink-3)!important;background:var(--kb-surface-2)!important}
/* 编辑器同套(发布/采集页编辑旧文时同样看不清) */
html[data-theme="dark"] #editor,
html[data-theme="dark"] #editor *{color:var(--kb-ink-2)!important}
html[data-theme="dark"] #editor h1,html[data-theme="dark"] #editor h2,
html[data-theme="dark"] #editor h3,html[data-theme="dark"] #editor h4,
html[data-theme="dark"] #editor h5,html[data-theme="dark"] #editor h6,
html[data-theme="dark"] #editor strong,html[data-theme="dark"] #editor b{color:var(--kb-ink)!important}
html[data-theme="dark"] #editor a{color:var(--kb-ink)!important;text-decoration:underline!important}
html[data-theme="dark"] #editor pre,html[data-theme="dark"] #editor pre *{background:#000000!important;color:#d1d1d6!important}
html[data-theme="dark"] #editor blockquote,html[data-theme="dark"] #editor blockquote *{color:var(--kb-ink-3)!important;background:var(--kb-surface-2)!important}

/* ========== v1.8.684: 起始页搜索引擎下拉被网址导航区遮挡修复 ==========
   根因: .start-links-wrap(网址导航区)带 backdrop-filter:blur(4px) 形成独立层叠上下文,
   在 .start-inner{zoom:1.2} 环境下按"定位元素层级0"绘制, 压住了 .start-search 内
   未定位祖先的 .eng-dropdown(z-index:30 无法跨层生效)。
   修复: 搜索框自身提升为定位元素并抬高层级, 下拉随父级整体盖过链接区。 */
.start-search{position:relative;z-index:10}

/* ========== v1.8.691: 抖音指数页「每日指数趋势」卡片头右侧控件(关键词A/B/趋势样式) ========== */
#dyBar{gap:10px}
#dyBar .dy-lab{font-size:12px;color:var(--muted);font-weight:600;white-space:nowrap}

/* ========== v1.8.704: AI 配置卡(授权管理)布局修正 ==========
   开关不再套在 label 里(会被 .fld label 的块级样式压扁成小圆点), 改为 span.ss-switch 独立成项 */
.ai-cfg-filters{align-items:flex-end!important;row-gap:12px}
.ai-cfg-filters .fld{margin-bottom:0;min-width:0}
.ai-cfg-filters .fld>label{display:block;margin-bottom:4px;white-space:nowrap}
.ai-cfg-filters .fld>input,.ai-cfg-filters .fld>select{height:32px}
.ai-cfg-actions{display:flex!important;flex-direction:row!important;align-items:center;gap:12px;flex-wrap:wrap}
.ai-cfg-switch{display:inline-flex!important;align-items:center;gap:8px;cursor:pointer}
/* v1.8.706: 开关组用 label 包裹(点击文字或开关都能切换); 覆盖 .fld>label 的块级规则 */
.ai-cfg-filters .ai-cfg-actions>label{display:inline-flex!important;align-items:center;gap:8px;margin:0!important;width:auto!important;cursor:pointer}
.ai-cfg-switch-lab{font-size:12px;color:var(--text-2);font-weight:600;white-space:nowrap}
.ai-cfg-actions .ss-switch{display:inline-flex;width:auto;margin:0;cursor:pointer}

/* ========== v1.8.713: 爹钦定 —— 开关滑块也直角, 全站不允许再出现圆角按钮/开关 ========== */
/* 覆盖 .ss-switch-track 的 999px 胶囊与 .ss-switch-knob 的 50% 圆形(从圆形豁免清单移除) */
.ss-switch-track,.ss-switch-track .ss-switch-knob{border-radius:0!important}
.ai-qb,.ai-sg{border-radius:0!important}

/* ========== v1.8.722: AI 两页限宽 + 顶部小鲸鱼(游动动画, 深浅主题双色) ========== */
.ai-narrow{max-width:1080px;margin:0 auto}
.ai-whale-zone{height:78px;position:relative;overflow:hidden;margin:4px 0 8px}
.ai-whale-swim{position:absolute;left:0;top:4px;width:100%;animation:aiWhaleSwim 32s linear infinite}
.ai-whale-bob{display:inline-block;animation:aiWhaleBob 3.2s ease-in-out infinite}
.ai-whale-tail{transform-origin:106px 58px;animation:aiWhaleTail 1.6s ease-in-out infinite}
.ai-whale-spout{animation:aiWhaleSpout 3.2s ease-in-out infinite}
.ai-whale-body,.ai-whale-tail path,.ai-whale-back{fill:#2b3138}
.ai-whale-belly,.ai-whale-face,.ai-whale-face2{stroke:#f5f7fa;fill:none;stroke-linecap:round}
.ai-whale-belly{stroke-width:9}
.ai-whale-face{stroke-width:2.5}
.ai-whale-face2{stroke-width:5}
.ai-whale-eye{fill:#f5f7fa}
html[data-theme="dark"] .ai-whale-body,html[data-theme="dark"] .ai-whale-tail path,html[data-theme="dark"] .ai-whale-back{fill:#9aa4ae}
html[data-theme="dark"] .ai-whale-belly,html[data-theme="dark"] .ai-whale-face,html[data-theme="dark"] .ai-whale-face2{stroke:#0d1117}
html[data-theme="dark"] .ai-whale-eye{fill:#0d1117}
@keyframes aiWhaleSwim{
  0%{transform:translateX(-100px) scaleX(-1)}
  49.9%{transform:translateX(calc(100% + 20px)) scaleX(-1)}
  50%{transform:translateX(calc(100% + 20px)) scaleX(1)}
  100%{transform:translateX(-100px) scaleX(1)}
}
@keyframes aiWhaleBob{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}
@keyframes aiWhaleTail{0%,100%{transform:rotate(0deg)}50%{transform:rotate(14deg)}}
@keyframes aiWhaleSpout{0%,55%,100%{opacity:0}62%,80%{opacity:.85}}
@media (prefers-reduced-motion: reduce){
  .ai-whale-swim,.ai-whale-bob,.ai-whale-tail,.ai-whale-spout{animation:none}
}

/* ========== v1.8.738: 趋势图类型切换按钮(横向按钮组, 选中黑底白字) ========== */
.ct-sw{display:inline-flex;gap:6px;margin-left:auto}
.ct-sw button{padding:5px 12px;font-size:12px;border:1px solid var(--border);background:var(--card);color:var(--text-2);cursor:pointer;font-family:inherit}
.ct-sw button.cur{background:var(--primary);color:#fff;border-color:var(--primary)}
html[data-theme="dark"] .ct-sw button.cur{background:#d1d1d6;color:#0d1117;border-color:#d1d1d6}

/* ========== v1.8.740: 渠道对比页 KPI 四行布局(每渠道一行 × 6 指标) ========== */
.kpi-line{display:flex;gap:10px;margin-bottom:10px;align-items:stretch}
.kpi-line .ch-tag{width:150px;flex:none;display:flex;align-items:center;justify-content:center;background:var(--bg);font-weight:700;font-size:13px;color:var(--text);border:1px solid var(--border);text-align:center;word-break:break-all;line-height:1.55;padding:6px 8px}
.kpi-line .kpi{flex:1;margin:0}

/* ============ v1.8.804: 表格类卡片全屏(明细表/热力表/环比透视表) ============
   复用 .chart-fs 定位(fixed 铺满 + var(--card) 背景已主题感知); 追加: 卡片自身可滚动、
   表格内层 wrap 放开高度限制、卡头吸顶(长表滚动时标题/全屏按钮始终可见)。 */
.card.chart-fs{overflow:auto!important;padding:14px 18px!important}
.card.chart-fs .tbl-wrap,.card.chart-fs .xgrid-wrap,.card.chart-fs .table-wrap,.card.chart-fs .card-bd{max-height:none!important;height:auto!important;overflow:visible!important}
.card.chart-fs .card-hd{position:sticky;top:-14px;z-index:6;background:var(--card);margin:0 -18px 10px;padding:2px 18px 8px;border-bottom:1px solid var(--line)}
.card.chart-fs .card-hd .chart-fs-btn{position:static;margin-left:10px}

/* ============ v1.8.806: 图表卡整卡全屏 ============
   全屏对象从「图表容器」改为「整个 .card」—— 卡头右侧的下拉筛选/图表类型按钮随卡进全屏(爹实测原方案筛选控件丢失)。
   卡头吸顶(v1.8.804 已有), 图表撑满卡头以下剩余高度(60ms 后 c.resize() 已在 toggleChartFullscreen 里)。 */
.card.chart-fs{display:flex!important;flex-direction:column}
.card.chart-fs .card-hd{flex:0 0 auto}
.card.chart-fs .card-bd,.card.chart-fs > .chart-wrap{flex:1 1 0!important;display:flex;flex-direction:column;min-height:0}
.card.chart-fs .card-bd > .chart,.card.chart-fs > .chart{flex:1 1 auto;height:auto!important;min-height:320px;width:100%}

/* ============ v1.8.838: 暗色主题下的下拉选项浮层（爹反馈"点店铺切换器弹出一条白条"） ============
   根因: 上方全局规则 `select option{ background:#fff !important; color:#111827 !important }`
   只考虑了浅色主题, 暗色下点开任意下拉(最明显是顶栏店铺切换器)浮层整片纯白 —— 即"白色的条"。
   修复: 补暗色覆盖。option 背景必须用【实色】, 不能用 rgba ——
   Windows Chrome 原生下拉浮层会把半透明底合成到黑色上, 选中项会变成纯黑+深字(隐形), 见 v1.8.678 热修记录。 */
html[data-theme="dark"] select option,
html[data-theme="dark"] select optgroup{
  /* v1.8.851: 与上方 L1760 的同名规则完全重复, 此处仅保留一份; 颜色沿用后者 !important 以保证压过浅色底 */
  background:#1c1c1e !important;
  color:#f5f5f7 !important;
}
html[data-theme="dark"] select option:checked{
  background:#3a3a3c !important;
  color:#f5f5f7 !important;
}
html[data-theme="dark"] select option:disabled{
  background:#1c1c1e !important;
  color:#7c7c80 !important;
}

/* ============ v1.8.847: 深色下顶栏店铺切换器「下拉文字看不清」 ============
   根因: 第 331 行 `.shop-switch select{ background:transparent !important }`(为让它在顶栏里透明融合)。
   Chrome 的原生下拉浮层会参考 select 自身的背景色, **transparent 会被回退成白底**;
   而深色主题又把 option 文字设成浅色 #f5f5f7 → 浅字落白底, 打开下拉就是一片看不清。
   (浅色主题下 option 是深字, 所以只表现为"深色模式看不清", 与爹的描述完全一致。)
   修复: 深色下给该 select 一个与容器同色的【实色】背景(视觉与透明无差别), 并显式锁定选项配色。 */
html[data-theme="dark"] .shop-switch select{
  background:#1c1c1e !important;          /* 不用 transparent: 原生浮层不再回落白底 */
  color:#f5f5f7 !important;
  color-scheme:dark;
}
html[data-theme="dark"] .shop-switch select option{
  background:#1c1c1e !important;
  color:#f5f5f7 !important;
}
html[data-theme="dark"] .shop-switch select option:checked{
  background:#3a3a3c !important;
  color:#f5f5f7 !important;
}
/* 顶栏其它原生下拉(若有)同样处理, 避免同类问题再冒出来。
   注意顶栏容器类名是 .header (views/layout.php:200), 不是 .topbar。 */
html[data-theme="dark"] .header select,
html[data-theme="dark"] .header-right select{
  background:#1c1c1e !important;
  color:#f5f5f7 !important;
  color-scheme:dark;
}
html[data-theme="dark"] .header select option,
html[data-theme="dark"] .header-right select option{
  background:#1c1c1e !important;
  color:#f5f5f7 !important;
}

/* ============================================================================
   v1.8.849 授权管理页 · 设计系统整改示范（第一页）
   ----------------------------------------------------------------------------
   设计主张: 质感来自"纪律"而非"装饰" ——
     · 字阶只用 3 档: 12(元信息) / 15(卡片标题) / 28(状态主数字)
     · 间距只用 4 档: 8 / 12 / 16 / 24
     · 所有边框降为 1px 发丝线(var(--line)), 卡片去阴影
     · 保持直角(不引入圆角, 与全站一致), 靠留白与细线撑质感
     · 单一中性色族(--ink / --ink-2 / --ink-3 / --line), 不再混用 --text/--muted
   作用域: 仅本页 6 个根节点, 不触碰全局规则, 其它页面零影响。
   ============================================================================ */

/* ---------- 1) 顶部导航: 胶囊 → 下划线分段 ---------- */
.lic-nav{
  display:flex; align-items:center; flex-wrap:wrap; gap:0;
  padding:0; margin:0 0 24px;
  background:var(--card);
  /* 必须整条重置: 全局 .lic-nav 有 border:1px + box-shadow, 只写 border-bottom 会留下三边框和阴影 */
  border:0;
  border-bottom:1px solid var(--line);
  box-shadow:none;
  /* 顶栏 .header 为 sticky/top:0/z-index:40, 这里必须让位到顶栏下方, 否则被完全遮住 */
  position:sticky; top:var(--header-h); z-index:25;
}
.lic-nav::before{
  content:"配置"; flex:0 0 auto;
  display:flex; align-items:center; height:44px;
  padding-right:16px; margin-right:8px;
  font-size:12px; font-weight:400; color:var(--ink-3);
  border-right:1px solid var(--line);
}
.lic-nav-item{
  display:inline-flex; align-items:center; gap:8px;
  height:44px; padding:0 16px;
  font-size:13px; font-weight:400; color:var(--ink-3);
  background:transparent; border:0; position:relative;
  transition:color .15s ease;
}
.lic-nav-item b{
  width:auto; height:auto; line-height:1; background:none; border:0;
  font-size:12px; font-weight:400; color:inherit;
  font-variant-numeric:tabular-nums; letter-spacing:.06em;
}
.lic-nav-item:hover{ color:var(--ink); background:transparent; border:0; }
.lic-nav-item.active{ color:var(--ink); background:transparent; border:0; font-weight:500; }
.lic-nav-item.active::after{
  content:""; position:absolute; left:16px; right:16px; bottom:-1px;
  height:2px; background:var(--ink);
}

/* ---------- 2) 卡片外壳: 去阴影 / 发丝线 / 统一节奏 ---------- */
#licStatus,#logoCard,#startSet,#moduleSet,#aiSet{
  border:1px solid var(--line);
  box-shadow:none;
  background:var(--card);
  margin-bottom:24px;
}
#licStatus>.card-hd,#logoCard>.card-hd,#startSet>.card-hd,
#moduleSet>.card-hd,#aiSet>.card-hd{
  display:flex; align-items:center; gap:12px;
  padding:16px 20px;
  border-bottom:1px solid var(--line-soft);
  background:transparent;
}
#licStatus>.card-hd h3,#logoCard>.card-hd h3,#startSet>.card-hd h3,
#moduleSet>.card-hd h3,#aiSet>.card-hd h3{
  margin:0; font-size:15px; font-weight:500; color:var(--ink);
  letter-spacing:.01em;
}
#licStatus>.card-bd,#logoCard>.card-bd,#startSet>.card-bd,
#moduleSet>.card-bd,#aiSet>.card-bd{ padding:20px; }

/* 序号: 彩色方块 → 细等宽数字 */
.lic-idx{
  display:inline-block; width:auto; height:auto; min-width:22px;
  padding:0; margin:0; background:none; border:0;
  font-size:12px; font-weight:400; color:var(--ink-3);
  font-variant-numeric:tabular-nums; letter-spacing:.08em;
}

/* ---------- 3) 授权状态面板 ---------- */
.lic-state{
  display:flex; align-items:flex-start; gap:16px;
  padding:0 0 20px; margin-bottom:20px;
  border-bottom:1px solid var(--line-soft);
}
.lic-state-main{ flex:1; min-width:0; }
.lic-state-kicker{
  font-size:12px; color:var(--ink-3); margin:0 0 6px;
  letter-spacing:.06em;
}
.lic-state-title{
  display:flex; align-items:center; gap:8px;
  font-size:28px; font-weight:500; line-height:1.2; color:var(--ink);
  font-variant-numeric:tabular-nums;
}
.lic-state-dot{ width:8px; height:8px; border-radius:50%; flex:0 0 auto; }
.lic-state-dot.ok{ background:var(--success); }
.lic-state-dot.bad{ background:var(--danger); }
.lic-state-desc{ font-size:12px; color:var(--ink-3); margin:8px 0 0; line-height:1.6; }
.lic-state-side{ flex:0 0 auto; text-align:right; }
.lic-state-side .k{ font-size:12px; color:var(--ink-3); margin:0 0 2px; }
.lic-state-side .v{ font-size:13px; color:var(--ink); margin:0 0 12px;
  font-variant-numeric:tabular-nums; }

/* 定义列表: 替代原来的表格 */
.lic-def{ display:grid; grid-template-columns:96px minmax(0,1fr); row-gap:0; margin:0; }
.lic-def dt{
  font-size:12px; color:var(--ink-3); padding:10px 0;
  border-bottom:1px solid var(--line-soft);
}
.lic-def dd{
  margin:0; padding:10px 0; font-size:13px; color:var(--ink);
  border-bottom:1px solid var(--line-soft); min-width:0;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.lic-def dt:last-of-type,.lic-def dd:last-of-type{ border-bottom:0; }
.lic-def code{
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size:13px; letter-spacing:.04em;
  background:var(--line-soft); padding:2px 6px; color:var(--ink);
}

/* ---------- 4) 表单控件统一 ---------- */
#licStatus .form-row,#aiSet .fld,#moduleSet .fld{ margin:0 0 16px; }
#licStatus .form-row label,#aiSet .fld label,#moduleSet .fld label{
  display:block; font-size:12px; font-weight:400; color:var(--ink-3);
  margin:0 0 6px;
}
#licBox input[type=text],#licBox input:not([type]),#aiSet .fld>input,#aiSet .fld>select{
  height:36px; padding:0 12px; font-size:13px;
  border:1px solid var(--line); background:var(--card); color:var(--ink);
  width:100%; max-width:420px;
}
#licBox input:focus,#aiSet .fld>input:focus,#aiSet .fld>select:focus{
  outline:none; border-color:var(--ink-3);
}

/* ---------- 5) 按钮: 统一高度, 去掉胶囊感 ---------- */
#licStatus .btn,#logoCard .btn,#startSet .btn,#moduleSet .btn,#aiSet .btn{
  height:34px; padding:0 16px; font-size:13px; font-weight:500;
}
#licStatus .btn.primary,#logoCard .btn.primary,#startSet .btn.primary,
#moduleSet .btn.primary,#aiSet .btn.primary{ border:1px solid var(--primary); }
#licStatus .btn.ghost,#logoCard .btn.ghost,#startSet .btn.ghost,
#moduleSet .btn.ghost,#aiSet .btn.ghost{ border:1px solid var(--line); color:var(--ink-2); }

/* ---------- 6) LOGO 预览卡: 虚线占位 + 克制留白 ---------- */
#logoCard .logo-grid{ gap:16px; }
#logoCard .logo-setting{
  border:1px solid var(--line); background:var(--card);
}
#logoCard .logo-preview{
  padding:20px 16px; border-bottom:1px dashed var(--line);
  background:var(--line-soft); min-height:112px;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:8px;
}
#logoCard .logo-prev-img{ max-height:40px; max-width:100%; object-fit:contain; }
#logoCard .logo-prev-meta{ font-size:12px; color:var(--ink-2); }
#logoCard .logo-hint{ font-size:12px; color:var(--ink-3); }
#logoCard .logo-actions{ padding:14px 16px; }
#logoCard .logo-btns{ display:flex; gap:8px; margin-top:10px; }
#logoCard .logo-msg{ font-size:12px; margin-top:8px; min-height:18px; }

/* ---------- 7) 模块开关: 等宽正方形磁贴 ---------- */
#moduleSet .mod-tiles{
  display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:12px;
}
#moduleSet .mod-tile{
  aspect-ratio:1/1; display:flex; flex-direction:column;
  padding:14px; border:1px solid var(--line); background:var(--card);
  transition:border-color .15s ease;
}
#moduleSet .mod-tile:hover{ border-color:var(--ink-3); }
#moduleSet .mod-tile-name{
  font-size:13px; font-weight:500; color:var(--ink); line-height:1.4; margin:0 0 6px;
}
#moduleSet .mod-tile-desc{
  flex:1 1 auto; min-height:0; overflow:hidden;
  font-size:12px; color:var(--ink-3); line-height:1.55;
}
#moduleSet .mod-tile-foot{ display:flex; align-items:center; gap:8px; margin-top:10px; }
#moduleSet .mod-tile-foot .ss-switch-label{ font-size:12px; color:var(--ink-3); }
#moduleSet .mod-tile.off{ background:var(--line-soft); }
#moduleSet .mod-tile.off .mod-tile-name{ color:var(--ink-3); }

/* 附加配置区(资料下载 / 热卖榜单) */
#moduleSet .mod-extras{
  margin-top:20px; padding-top:20px; border-top:1px solid var(--line-soft);
  display:grid; gap:20px;
}
#moduleSet .mod-extra-hd{ font-size:13px; font-weight:500; color:var(--ink); margin:0 0 8px; }
#moduleSet .mod-extra-line{ display:flex; align-items:center; gap:12px; flex-wrap:wrap; }
#moduleSet .mod-extra-line input{
  height:36px; padding:0 12px; font-size:13px; width:100%; max-width:520px;
  border:1px solid var(--line); background:var(--card); color:var(--ink);
}
#moduleSet .mod-hot-grid{ display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; max-width:760px; }
#moduleSet .mod-hot-grid input{
  height:36px; padding:0 12px; font-size:13px; width:100%;
  border:1px solid var(--line); background:var(--card); color:var(--ink);
}
#moduleSet .mod-btns{ display:flex; align-items:center; gap:12px; margin-top:12px; flex-wrap:wrap; }
@media (max-width:1180px){ #moduleSet .mod-tiles{ grid-template-columns:repeat(3,minmax(0,1fr)); } }
@media (max-width:760px){ #moduleSet .mod-tiles{ grid-template-columns:repeat(2,minmax(0,1fr)); } }

/* ---------- 8) 深色下: 只补必要的层次(不重复定义颜色族) ---------- */
html[data-theme="dark"] #logoCard .logo-preview{ background:#1c1c1e; }
html[data-theme="dark"] .lic-nav{ background:var(--card); }
html[data-theme="dark"] .lic-def code{ background:#26262a; }

/* ---------- 9) 起始页设置: 手风琴改发丝分隔, 与其它区块同语言 ---------- */
#startSet .ss-sec,#moduleSet .ss-sec{
  border-top:1px solid var(--line-soft);
  padding:16px 0; margin:0;
}
#startSet .ss-sec:first-of-type,#moduleSet .ss-sec:first-of-type{ border-top:0; padding-top:0; }
#startSet .ss-sec-t,#moduleSet .ss-sec-t{
  font-size:13px; font-weight:500; color:var(--ink); margin:0;
}
#startSet .ss-sec-h:hover,#moduleSet .ss-sec-h:hover{ color:var(--ink); }
#startSet .ss-sec-body,#moduleSet .ss-sec-body{ padding-top:14px; }

/* 说明文字统一为 12px 三级灰(替换散落的 .muted 14px) */
#logoCard>.card-bd>p.muted,#startSet>.card-bd>p.muted,
#moduleSet>.card-bd>p.muted,#aiSet>.card-bd>p.muted{
  font-size:12px; color:var(--ink-3); margin:0 0 16px; line-height:1.6;
}
#startSet .logo-hint,#moduleSet .logo-hint{ font-size:12px; color:var(--ink-3); margin-top:8px; }

/* 上传行 / 开关行: 统一 12px 间距节奏 */
#startSet .ss-upload,#startSet .ss-light-row,#startSet .ss-home-row{
  display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-top:12px;
}

/* ============================================================================
   v1.8.850 全站推进 · P0 基础层（只调"纪律"层面，不改任何业务样式）
   ----------------------------------------------------------------------------
   1) 中性色单一来源：浅色主题把旧 --text/--border 族指向 --ink/--line 族。
      深色主题在 html[data-theme="dark"] 内自带定义，优先级更高，完全不受影响。
      顺带修掉 --border(#e5e5ea 偏蓝) 与 --line(#e6eaf1 中性) 并存的"冷暖灰混用"。
   2) 卡片去投影，只用 1px 发丝线分层（投影是"后台感"的主要来源之一）。
   3) 卡片间距/卡头卡体统一到 16/18 节奏（原来 14 与 16 两处并存）。
   4) 表格单元格 9/11 → 10/12；表头底色由偏蓝 #fafbfd 改为中性 --line-soft。
   ============================================================================ */

:root{
  --text:var(--ink);
  --text-2:var(--ink-2);
  --muted:var(--ink-3);
  --border:var(--line);
  --border-2:var(--line-soft);
}

.card{box-shadow:none}
.card+.card{margin-top:16px}
.card-hd{padding:14px 18px}
.card-bd{padding:18px}

table.tbl th,table.tbl td{padding:10px 12px}
table.tbl th{background:var(--line-soft)}


/* ============================================================================
   v1.8.851 · 关于 !important 的处置说明（只记录，不改动）
   ----------------------------------------------------------------------------
   全站仍有 100+ 处 !important，经逐条核查后**判定为承重，不可批量删除**：
     1) 8 处 `border-radius:xx !important`（.avatar / .spin / 开关胶囊等）
        —— 全站有 `*{border-radius:0!important}`。这些正是"圆形功能件豁免"，
        去掉 !important 后会立刻被压成方块（头像、开关、加载圈全部变形）。
     2) 20+ 处 `select / option` 链（select:not([disabled])、.shop-switch select、暗色 option）
        —— 它们存在的目的就是**强制覆盖各页面自带的 select 样式**。
        去掉后页面级选择器（如 `.filters .fld>select`）会反超，刚修好的
        "顶栏下拉白条/深色看不清"会立刻复发。
     3) 53 处位于 html[data-theme="dark"] 覆盖块
        —— 必须压过浅色基础规则，属于主题机制本身，删不得。
   结论：!important 的减少必须伴随"基础规则不再用 !important 强制"的重构，
        且需逐页视觉回归，属于独立一轮工作（建议排在字阶/间距稳定之后）。
   本次仅清掉 1 处完全重复的声明（删掉不改变任何渲染结果）。
   ============================================================================ */

/* ============================================================================
   v1.8.852 · 控件尺寸统一（按钮 / 下拉 / 输入）
   ----------------------------------------------------------------------------
   审计发现：默认控件高度存在 32 / 33 / 36 三种并存，且 `.sel` 有两处定义(32 与 33)；
   页面级筛选条各自写 36px，导致同一行里「按钮 34 + 下拉 36」错位 2px。
   统一为两档：默认 34px（按钮/下拉/输入一律同高），紧凑 28px（.btn.sm）。
   ============================================================================ */

select,input.inp,.sel,.fld input,.fld select{height:34px}
.btn{height:34px}
.card-hd .right .fld>select,.card-hd .right .fld>input,
.ai-cfg-filters .fld>input,.ai-cfg-filters .fld>select{height:34px}
.fld textarea{height:auto}   /* 多行输入不参与高度统一 */
.river-bar select,.sched-bar select,.tk-filter select,.team-bar select,.city-sel{height:34px}


/* ============================================================================
   v1.8.860 · Apple HIG 化: 强调色/玻璃功能层/表格内缩分隔线/卡片内边距/内容限宽/分段控制器
   ---------------------------------------------------------------------------- */
:root{--accent:#007aff;--accent-soft:rgba(0,122,255,.10);}
html[data-theme="dark"]{--accent:#0a84ff;--accent-soft:rgba(10,132,255,.16);}

:focus-visible{outline:2px solid var(--accent);outline-offset:1px;}
input[type=checkbox],input[type=radio]{accent-color:var(--accent);}
.fld input:focus,.fld select:focus,.sel:focus{border-color:var(--accent);}

/* 表格行分隔线内缩(iOS 分组列表手法): 左右各留 10px, 不通栏 */
table.tbl tbody td{border-bottom:0;
  background-image:linear-gradient(var(--line),var(--line));
  background-size:calc(100% - 20px) 1px;background-position:10px 100%;background-repeat:no-repeat;}
table.tbl tbody tr:last-child td{background-image:none;}

/* 卡片内边距: Apple 手法 内边距 > 外间距 */
.card-hd{padding:16px 20px}
.card-bd{padding:20px}

/* 玻璃功能层: 只给弹窗/下拉(导航与控制), 内容层保持纯色; 不支持时回退实色 */
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .modal{background:rgba(255,255,255,.82);-webkit-backdrop-filter:blur(24px) saturate(180%);backdrop-filter:blur(24px) saturate(180%);}
  .dropdown{background:rgba(255,255,255,.80);-webkit-backdrop-filter:blur(24px) saturate(180%);backdrop-filter:blur(24px) saturate(180%);}
  html[data-theme="dark"] .modal{background:rgba(28,28,30,.80);}
  html[data-theme="dark"] .dropdown{background:rgba(28,28,30,.80);}
}

/* 内容最大宽度: 宽屏收拢(与 POP 页 1560 一致) */
.content{max-width:1560px;margin:0 auto;width:100%}

/* 分段控制器(iOS segmented): 灰轨道 + 浮起选中块; 直角保留 */
.btn-group{border:0;background:rgba(120,120,128,.12);padding:2px;gap:2px;border-radius:8px}
.btn-group button{background:transparent;border:0;color:var(--ink-2)}
.btn-group button:hover{background:rgba(120,120,128,.10)}
.btn-group button.on{background:#ffffff;color:var(--ink);box-shadow:0 1px 3px rgba(0,0,0,.14)}
.btn-group button.on:hover{background:#ffffff}
html[data-theme="dark"] .btn-group{background:rgba(120,120,128,.24)}
html[data-theme="dark"] .btn-group button.on{background:#636366;color:#ffffff;box-shadow:0 1px 3px rgba(0,0,0,.4)}
html[data-theme="dark"] .btn-group button.on:hover{background:#636366}

/* ============================================================================
   v1.8.865 · 授权管理 LOGO 设置: 三个预览卡复用一套上传/恢复控件
   ---------------------------------------------------------------------------- */
.logo-shared{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px 16px;margin:0 0 18px;padding:0 0 16px;border-bottom:1px solid var(--line)}
.logo-shared-fld{display:flex;flex-direction:column;gap:6px;min-width:0}
.logo-shared-fld>span{font-size:12px;color:var(--ink-3)}
.logo-shared-fld select{height:32px;min-width:170px;padding:0 10px;border:1px solid var(--line);font-size:13px}
.logo-shared-fld .ipt-file{height:32px;padding:5px 0;font-size:12px;max-width:260px}
.logo-shared-btns{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.logo-shared .logo-msg{flex:1 1 100%;margin-top:0}
#logoCard .logo-setting{transition:border-color .15s ease}
#logoCard .logo-setting.on{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}
#logoCard .logo-setting .logo-preview{flex:1;width:100%;border-bottom:0}

/* ============================================================================
   v1.8.867 · 模块开关: 描述文字下线, 开关与名称同一行
   ----------------------------------------------------------------------------
   🔴 DOM 里 .ss-switch-track 必须紧跟 input —— 选中态靠
      .ss-switch input:checked + .ss-switch-track 相邻兄弟选择器生效;
      想让「已启用」文字排在开关前面只能用 flex order 调视觉顺序, 不能插节点。 */
#moduleSet .mod-tile{
  aspect-ratio:auto; min-height:52px;
  flex-direction:row; align-items:center; justify-content:space-between; gap:10px;
  padding:12px 14px;
}
#moduleSet .mod-tile-name{ margin:0; flex:1 1 auto; min-width:0; }
#moduleSet .mod-tile-foot{ margin-top:0; flex:0 0 auto; gap:8px; }
#moduleSet .mod-tile-foot .ss-switch-label{ order:-1; }
