/* ============================================================
   仓掌柜 · 统一主题层（Theme Override）v5.0
   ------------------------------------------------------------
   定位：本文件是全站【最后加载】的覆盖层，必须排在 v4.css 之后。
   作用：
   1. 把 v315~v339 / ui-redesign / v4 遗留的内部变量统一收口到
      tokens.css 的设计令牌（含 data-bg 多主题，强制同源）；
   2. 定点覆盖补丁文件中互相冲突的硬编码颜色；
   3. 补齐统一组件类（按钮/表格/表单/徽章/导航/选中态）。
   原则：只改颜色与少量圆角/阴影，不动任何布局与尺寸。
   运行时 body 恒为 data-perf="1"（app.js 初始化写入），因此覆盖
   规则沿用 body[data-perf="1"] 前缀以匹配补丁层优先级，靠加载顺序
   取胜；补丁层用了 !important 的地方，这里同样用 !important 对冲。
   ============================================================ */

/* ============================================================
   0. 遗留变量族 → 设计令牌（最关键的一步收口）
   三组选择器分别对应：无 data-bg / 浅色 data-bg / 深色 data-bg，
   三属性选择器与 v338.css 的主题覆写同优先级，本文件后加载故胜出，
   从而消除 7 套 data-bg 主题色各自为政的问题。
   ============================================================ */
body[data-perf="1"],
body[data-perf="1"][data-theme="light"][data-bg],
body[data-perf="1"][data-theme="dark"][data-bg]{
  /* 品牌族 → 主色令牌（v338 的 per-bg 主色在此被统一覆盖） */
  --brand:var(--color-primary);
  --brand-2:var(--color-primary-active);
  --brand-soft:var(--color-primary-bg);
  --brand-line:var(--color-selected-border);
  --accent:var(--color-primary);
  --accent-2:var(--color-primary-active);
  --accent-soft:var(--color-primary-bg);
  --accent-soft-2:var(--color-primary-bg-strong);
  --accent-line:var(--color-selected-border);
  --on-accent:var(--color-primary-text);
  /* 结构中性色 → 中性令牌 */
  --bg-page:var(--color-bg);
  --surface:var(--color-surface);
  --surface-2:var(--color-surface-hover);
  --surface-3:var(--color-surface-3);
  --text:var(--color-text-primary);
  --text-2:var(--color-text-secondary);
  --text-3:var(--color-text-muted);
  --line:var(--color-border);
  --line-2:var(--color-border);
  --hover:var(--color-surface-hover);
  --active:var(--color-selected);
  --input-border:var(--color-border);
  --track:var(--color-border-light);
  /* 系统语义色 → 语义令牌（固定语义，不随主题漂移） */
  --success:var(--color-success); --success-soft:var(--color-success-bg);
  --warning:var(--color-warning); --warning-soft:var(--color-warning-bg);
  --danger:var(--color-danger);   --danger-soft:var(--color-danger-bg);
  --info:var(--color-info);       --info-soft:var(--color-info-bg);
  /* 旧调色板别名（style.css / v3xx 补丁中 50+ 处把 --blue 当品牌色用，统一指向主色；
     真正的信息语义请使用 --info / --color-info） */
  --blue:var(--color-primary);
  --green:var(--color-success);
  --orange:var(--color-warning);
  --red:var(--color-danger);
  --purple:var(--mod-zones);
  /* 旧玻璃/表面变量 → 中性表面（普通流畅模式下不使用毛玻璃） */
  --bg:var(--color-bg);
  --glass-bg:var(--color-surface);
  --glass-border:var(--color-border);
  --glass-edge:none;
  --glass-shadow:var(--shadow-md);
  --input-bg:var(--color-surface);
  --divider:var(--color-border-light);
  /* 圆角/阴影族 → 令牌 */
  --sh-sm:var(--shadow-sm);
  --sh:var(--shadow-md);
  --sh-lg:var(--shadow-lg);
  --r-card:var(--radius-lg);
  --r-ctl:var(--radius-md);
  --r-sm:var(--radius-sm);
  --zone-grid:var(--color-border);
}

/* ============================================================
   1. 全局基底
   ============================================================ */
body[data-perf="1"]{
  background:var(--color-bg);
  color:var(--color-text-primary);
}
body[data-perf="1"] .app{ background:var(--color-bg); }
/* 文本选区统一为主色浅底 */
body[data-perf="1"] ::selection{ background:var(--color-highlight); }
/* 键盘焦点环：全站统一（鼠标点击不出现，键盘 Tab 才出现） */
body[data-perf="1"] a:focus-visible,
body[data-perf="1"] button:focus-visible,
body[data-perf="1"] [tabindex]:focus-visible{
  outline:none;
  box-shadow:0 0 0 3px var(--color-focus-ring);
}
/* 滚动条中性化 */
body[data-perf="1"] *::-webkit-scrollbar-thumb{ background:var(--color-border); }
body[data-perf="1"] *::-webkit-scrollbar-thumb:hover{ background:var(--color-text-disabled); }

/* ============================================================
   2. 侧边栏 / 顶栏 / 品牌 / 导航
   ============================================================ */
body[data-perf="1"] .sidebar{
  background:var(--sidebar-bg) !important;
  border:1px solid var(--color-border-light) !important;
  box-shadow:var(--shadow-sm) !important;
}
body[data-perf="1"] .topbar{
  background:var(--topbar-bg) !important;
  border-bottom:1px solid var(--color-border-light);
}
/* 品牌 Logo：主色实色渐变，不再使用蓝紫渐变 */
body[data-perf="1"] .brand-logo{
  background:linear-gradient(135deg,var(--color-primary),var(--color-primary-active)) !important;
  color:var(--color-primary-text);
  box-shadow:0 4px 12px var(--color-primary-bg-strong) !important;
}
/* 导航：默认中性文字，悬停中性浅底；激活 = 主色浅底 + 主色文字（不铺大块主色） */
body[data-perf="1"] .nav-item{ color:var(--sidebar-text) !important; }
body[data-perf="1"] .nav-item:hover{ background:var(--color-surface-hover); color:var(--color-text-primary) !important; }
body[data-perf="1"] .nav-item.active{
  background:var(--color-primary-bg) !important;
  color:var(--color-primary) !important;
  box-shadow:inset 0 0 0 1px var(--color-selected-border);
}
body[data-perf="1"] .nav-item.active .ni-ico{ color:var(--color-primary); }
body[data-perf="1"] .nav-item.active::before{ background:var(--color-primary) !important; }
/* 导航角标：数字提醒属于“待办/未读”，统一用危险红色，不跟随主色 */
body[data-perf="1"] .nav-badge{
  background:var(--color-danger) !important;
  color:#fff !important;
}
/* 侧栏底部主题切换按钮 / 玻璃按钮：中性化 */
body[data-perf="1"] .glass-btn,
body[data-perf="1"] .side-foot .theme-toggle{
  background:var(--color-surface-hover) !important;
  border:1px solid var(--color-border) !important;
  color:var(--color-text-secondary) !important;
  box-shadow:none !important;
}
body[data-perf="1"] .glass-btn:hover,
body[data-perf="1"] .side-foot .theme-toggle:hover{
  background:var(--color-primary-bg) !important;
  border-color:var(--color-selected-border) !important;
  color:var(--color-primary) !important;
}

/* ============================================================
   3. 卡片 / 面板（中性表面 + 中性描边 + 统一阴影圆角）
   ============================================================ */
body[data-perf="1"] .glass,
body[data-perf="1"] .card,
body[data-perf="1"] .set-card,
body[data-perf="1"] .stat-card,
body[data-perf="1"] .task-item,
body[data-perf="1"] .member-card,
body[data-perf="1"] .meeting-card{
  background:var(--color-surface) !important;
  border:1px solid var(--color-border-light) !important;
  box-shadow:var(--shadow-sm) !important;
  border-radius:var(--radius-lg);
}
body[data-perf="1"] .stat-card:hover,
body[data-perf="1"] .task-item:hover,
body[data-perf="1"] .member-card:hover,
body[data-perf="1"] .meeting-card:hover{
  border-color:var(--color-border) !important;
  box-shadow:var(--shadow-md) !important;
}
body[data-perf="1"] .table-wrap{
  background:var(--color-surface) !important;
  border:1px solid var(--color-border-light) !important;
  box-shadow:var(--shadow-sm);
}

/* ============================================================
   4. 按钮（主色克制：只有 .btn-primary 用主色实底）
   ============================================================ */
body[data-perf="1"] .btn{
  border-radius:var(--radius-md);
  border:1px solid var(--color-border);
  font-weight:600;
}
/* 主要按钮：全站每屏 1~2 个，主色实底 */
body[data-perf="1"] .btn-primary{
  background:var(--color-primary) !important;
  background-image:none !important;
  border:1px solid var(--color-primary) !important;
  color:var(--color-primary-text) !important;
  box-shadow:0 2px 8px var(--color-primary-bg-strong) !important;
}
body[data-perf="1"] .btn-primary:hover{
  background:var(--color-primary-hover) !important;
  border-color:var(--color-primary-hover) !important;
}
body[data-perf="1"] .btn-primary:active{ background:var(--color-primary-active) !important; }
/* 次要按钮：白底中性描边（不再悬停泛主色，保持安静） */
body[data-perf="1"] .btn-ghost{
  background:var(--color-surface) !important;
  border:1px solid var(--color-border) !important;
  color:var(--color-text-primary) !important;
}
body[data-perf="1"] .btn-ghost:hover{
  background:var(--color-surface-hover) !important;
  border-color:var(--color-text-disabled) !important;
  color:var(--color-text-primary) !important;
}
/* 辅助色按钮（辅助色实底，用于次级强调场景） */
body[data-perf="1"] .btn-secondary{
  background:var(--color-secondary) !important;
  border:1px solid var(--color-secondary) !important;
  color:var(--color-secondary-text) !important;
}
body[data-perf="1"] .btn-secondary:hover{ background:var(--color-secondary-hover) !important; border-color:var(--color-secondary-hover) !important; }
/* 语义按钮：统一“浅底 + 语义色文字 + 同色描边”的克制样式 */
body[data-perf="1"] .btn-success{
  background:var(--color-success-bg) !important; background-image:none !important;
  border:1px solid color-mix(in srgb,var(--color-success) 35%,transparent) !important;
  color:var(--color-success) !important;
}
body[data-perf="1"] .btn-success:hover{ background:color-mix(in srgb,var(--color-success) 20%,var(--color-surface)) !important; }
body[data-perf="1"] .btn-warning{
  background:var(--color-warning-bg) !important;
  border:1px solid color-mix(in srgb,var(--color-warning) 35%,transparent) !important;
  color:var(--color-warning) !important;
}
body[data-perf="1"] .btn-warning:hover{ background:color-mix(in srgb,var(--color-warning) 20%,var(--color-surface)) !important; }
body[data-perf="1"] .btn-info{
  background:var(--color-info-bg) !important;
  border:1px solid color-mix(in srgb,var(--color-info) 35%,transparent) !important;
  color:var(--color-info) !important;
}
body[data-perf="1"] .btn-info:hover{ background:color-mix(in srgb,var(--color-info) 20%,var(--color-surface)) !important; }
/* 危险按钮：定点清除 ui-redesign/v4 的硬编码红 */
body[data-perf="1"] .btn-danger{
  background:var(--color-danger-bg) !important; background-image:none !important;
  border:1px solid color-mix(in srgb,var(--color-danger) 30%,transparent) !important;
  color:var(--color-danger) !important;
}
body[data-perf="1"] .btn-danger:hover{ background:color-mix(in srgb,var(--color-danger) 18%,var(--color-surface)) !important; }
body[data-perf="1"][data-theme="dark"] .btn-danger{
  background:var(--color-danger-bg) !important;
  border:1px solid color-mix(in srgb,var(--color-danger) 30%,transparent) !important;
}
body[data-perf="1"][data-theme="dark"] .btn-danger:hover{ background:color-mix(in srgb,var(--color-danger) 24%,transparent) !important; }
/* 禁用态统一 */
body[data-perf="1"] .btn:disabled,
body[data-perf="1"] .btn[disabled]{
  background:var(--color-surface-3) !important;
  border-color:var(--color-border) !important;
  color:var(--color-text-disabled) !important;
  box-shadow:none !important; cursor:not-allowed;
}
/* 图标小按钮：中性，悬停主色浅底 */
body[data-perf="1"] .icon-btn{
  background:transparent; border:1px solid transparent; color:var(--color-text-secondary);
}
body[data-perf="1"] .icon-btn:hover{ background:var(--color-primary-bg); color:var(--color-primary); border-color:var(--color-selected-border); }

/* ============================================================
   5. 表单（边框中性，焦点统一主色环）
   ============================================================ */
body[data-perf="1"] input,
body[data-perf="1"] select,
body[data-perf="1"] textarea{
  background:var(--color-surface) !important;
  border:1px solid var(--color-border) !important;
  color:var(--color-text-primary) !important;
  border-radius:var(--radius-md);
}
body[data-perf="1"] input::placeholder,
body[data-perf="1"] textarea::placeholder{ color:var(--color-text-muted); }
body[data-perf="1"] input:disabled,
body[data-perf="1"] select:disabled,
body[data-perf="1"] textarea:disabled{ background:var(--color-surface-hover) !important; color:var(--color-text-disabled) !important; }
body[data-perf="1"] input:focus,
body[data-perf="1"] select:focus,
body[data-perf="1"] textarea:focus{
  border-color:var(--color-primary) !important;
  box-shadow:0 0 0 3px var(--color-primary-bg) !important;
}
body[data-perf="1"] select option{ background:var(--color-surface); color:var(--color-text-primary); }
body[data-perf="1"] input[type=checkbox],
body[data-perf="1"] input[type=radio]{ accent-color:var(--color-primary); }

/* ============================================================
   6. 表格（表头 / 行悬停 / 选中行 / 斑马纹 全站统一）
   ============================================================ */
body[data-perf="1"] table th,
body[data-perf="1"] thead th{
  background:var(--color-surface-hover) !important;
  color:var(--color-text-secondary) !important;
  border-bottom:1px solid var(--color-border) !important;
  font-weight:600;
}
body[data-perf="1"] table td,
body[data-perf="1"] tbody td{ border-bottom:1px solid var(--color-border-light); color:var(--color-text-primary); }
/* 行悬停：中性浅底（不是主色） */
body[data-perf="1"] table tbody tr:hover td{ background:var(--color-surface-hover) !important; }
/* 选中行：全站唯一 --color-selected，任何模块不得自定义 */
body[data-perf="1"] table tbody tr.selected td,
body[data-perf="1"] table tbody tr[aria-selected="true"] td,
body[data-perf="1"] .list-row.selected,
body[data-perf="1"] .row.selected{ background:var(--color-selected) !important; }
body[data-perf="1"] table tbody tr.selected:hover td,
body[data-perf="1"] table tbody tr[aria-selected="true"]:hover td{ background:var(--color-selected-strong) !important; }
/* 斑马纹（按需给 table 加 .striped 类启用，默认关闭保持干净） */
body[data-perf="1"] table.striped tbody tr:nth-child(even) td{ background:var(--color-surface-hover); }
body[data-perf="1"] table.striped tbody tr:nth-child(even):hover td{ background:var(--color-border-light); }

/* 分段控件 / 标签页：激活态统一主色浅底 */
body[data-perf="1"] .seg button,
body[data-perf="1"] .perf-seg button{
  background:var(--color-surface-3); border:1px solid transparent; color:var(--color-text-secondary);
}
body[data-perf="1"] .seg button.on,
body[data-perf="1"] .perf-seg button.on,
body[data-perf="1"] .tab.active{
  background:var(--color-primary-bg) !important;
  color:var(--color-primary) !important;
  border-color:var(--color-selected-border) !important;
}

/* ============================================================
   7. 徽章 / 标签（语义专用，定点清除 v4 硬编码色值）
   ============================================================ */
body[data-perf="1"] .tag,
body[data-perf="1"] .tags,
body[data-perf="1"] .badge{
  border-radius:var(--radius-full); font-weight:600;
}
/* 成功 */
body[data-perf="1"] .badge-success,
body[data-perf="1"] .tag-confirmed,
body[data-perf="1"] .tag-low{
  background:var(--color-success-bg) !important; color:var(--color-success-text,var(--color-success)) !important;
}
/* 警告/待处理 */
body[data-perf="1"] .badge-warning,
body[data-perf="1"] .tag-pending,
body[data-perf="1"] .tag-med{
  background:var(--color-warning-bg) !important; color:var(--color-warning-text,var(--color-warning)) !important;
}
/* 危险 */
body[data-perf="1"] .badge-danger,
body[data-perf="1"] .tag-cancelled,
body[data-perf="1"] .tag-high{
  background:var(--color-danger-bg) !important; color:var(--color-danger-text,var(--color-danger)) !important;
}
/* 信息 */
body[data-perf="1"] .badge-info,
body[data-perf="1"] .tag-info{
  background:var(--color-info-bg) !important; color:var(--color-info-text,var(--color-info)) !important;
}
/* 主色标签（管理员/主业务标记，小面积） */
body[data-perf="1"] .badge-primary,
body[data-perf="1"] .tag-admin{
  background:var(--color-primary-bg) !important; color:var(--color-primary) !important;
}
/* 中性标签 */
body[data-perf="1"] .badge-gray,
body[data-perf="1"] .tag-user{
  background:var(--color-surface-3) !important; color:var(--color-text-secondary) !important;
}
/* 超级管理员：沿用模块-区域堇紫，不再使用扎眼纯紫实底白字 */
body[data-perf="1"] .tag-super{
  background:var(--mod-zones-bg) !important; color:var(--mod-zones) !important;
}

/* ============================================================
   8. 弹层 / 模态 / Toast
   ============================================================ */
body[data-perf="1"] .modal-mask,
body[data-perf="1"] .pop-mask{ background:var(--color-mask); }
body[data-perf="1"] .modal,
body[data-perf="1"] .pop-sheet{
  background:var(--color-surface) !important;
  border:1px solid var(--color-border-light) !important;
  box-shadow:var(--shadow-lg) !important;
  border-radius:var(--radius-lg);
}
body[data-perf="1"] .modal-head,
body[data-perf="1"] .pop-head,
body[data-perf="1"] .modal-foot,
body[data-perf="1"] .pop-foot{ border-color:var(--color-border-light); }
body[data-perf="1"] .modal-x,
body[data-perf="1"] .pop-x{ background:var(--color-surface-hover); color:var(--color-text-secondary); }
body[data-perf="1"] .modal-x:hover,
body[data-perf="1"] .pop-x:hover{ background:var(--color-primary-bg); color:var(--color-primary); }
/* Toast：默认中性深底；成功/失败用语义色，去掉花哨渐变 */
body[data-perf="1"] .toast{ background:color-mix(in srgb,var(--color-text-primary) 92%,transparent); color:#fff; }
body[data-perf="1"] .toast.ok{ background:var(--color-success) !important; background-image:none !important; }
body[data-perf="1"] .toast.err{ background:var(--color-danger) !important; background-image:none !important; }

/* ============================================================
   9. 业务模块归属色（低饱和、小面积：模块图标/小标签/标题点缀）
   用法：模块图标容器加 .mod-ico-products 等类；小标签加 .mod-tag-*
   ============================================================ */
.mod-ico-products{ color:var(--mod-products); }
.mod-ico-arrivals{ color:var(--mod-arrivals); }
.mod-ico-zones{ color:var(--mod-zones); }
.mod-ico-flow{ color:var(--mod-flow); }
.mod-ico-checks{ color:var(--mod-checks); }
.mod-ico-tasks{ color:var(--mod-tasks); }
.mod-ico-chat{ color:var(--mod-chat); }
.mod-ico-meetings{ color:var(--mod-meetings); }
.mod-tag-products{ background:var(--mod-products-bg); color:var(--mod-products); }
.mod-tag-arrivals{ background:var(--mod-arrivals-bg); color:var(--mod-arrivals); }
.mod-tag-zones{ background:var(--mod-zones-bg); color:var(--mod-zones); }
.mod-tag-flow{ background:var(--mod-flow-bg); color:var(--mod-flow); }
.mod-tag-checks{ background:var(--mod-checks-bg); color:var(--mod-checks); }
.mod-tag-tasks{ background:var(--mod-tasks-bg); color:var(--mod-tasks); }
.mod-tag-chat{ background:var(--mod-chat-bg); color:var(--mod-chat); }
.mod-tag-meetings{ background:var(--mod-meetings-bg); color:var(--mod-meetings); }
[class*="mod-tag-"]{ display:inline-block; padding:2px 10px; border-radius:var(--radius-full); font-size:12px; font-weight:600; }
[class*="mod-ico-"]{ display:inline-flex; align-items:center; justify-content:center; }

/* ============================================================
   10. 文字语义工具类（供页面内零星状态文字统一取色）
   ============================================================ */
body[data-perf="1"] .text-success{ color:var(--color-success) !important; }
body[data-perf="1"] .text-warning{ color:var(--color-warning) !important; }
body[data-perf="1"] .text-danger{ color:var(--color-danger) !important; }
body[data-perf="1"] .text-info{ color:var(--color-info) !important; }
body[data-perf="1"] .text-muted{ color:var(--color-text-muted) !important; }
