*, ::before, ::after {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(59 130 246 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}
::backdrop {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(59 130 246 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}
.container {
  width: 100%;
}
@media (min-width: 640px) {
  .container {
    max-width: 640px;
  }
}
@media (min-width: 768px) {
  .container {
    max-width: 768px;
  }
}
@media (min-width: 1024px) {
  .container {
    max-width: 1024px;
  }
}
@media (min-width: 1280px) {
  .container {
    max-width: 1280px;
  }
}
@media (min-width: 1536px) {
  .container {
    max-width: 1536px;
  }
}
.visible {
  visibility: visible;
}
.collapse {
  visibility: collapse;
}
.static {
  position: static;
}
.fixed {
  position: fixed;
}
.absolute {
  position: absolute;
}
.relative {
  position: relative;
}
.sticky {
  position: sticky;
}
.block {
  display: block;
}
.inline-block {
  display: inline-block;
}
.inline {
  display: inline;
}
.flex {
  display: flex;
}
.inline-flex {
  display: inline-flex;
}
.table {
  display: table;
}
.grid {
  display: grid;
}
.contents {
  display: contents;
}
.\!hidden {
  display: none !important;
}
.hidden {
  display: none;
}
.flex-shrink {
  flex-shrink: 1;
}
.border-collapse {
  border-collapse: collapse;
}
.transform {
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.resize {
  resize: both;
}
.flex-wrap {
  flex-wrap: wrap;
}
.truncate {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.break-all {
  word-break: break-all;
}
.border {
  border-width: 1px;
}
.text-left {
  text-align: left;
}
.text-center {
  text-align: center;
}
.text-right {
  text-align: right;
}
.italic {
  font-style: italic;
}
.underline {
  text-decoration-line: underline;
}
.line-through {
  text-decoration-line: line-through;
}
.shadow {
  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.outline {
  outline-style: solid;
}
.blur {
  --tw-blur: blur(8px);
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
.filter {
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
.transition {
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
.ease-in-out {
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html, body, #root {
  height: 100%;
  min-height: 100vh;
}

body {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC',
    'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue', Arial, sans-serif;
  background-color: #f0f2f5;
  color: #333;
}

/* 滚动条美化 */
::-webkit-scrollbar {
  width: 6px;
  height: 6px;
}
::-webkit-scrollbar-thumb {
  background: #c1c1c1;
  border-radius: 3px;
}
::-webkit-scrollbar-thumb:hover {
  background: #999;
}
::-webkit-scrollbar-track {
  background: #f1f1f1;
}

/* 暗色侧边栏滚动条（G21）：覆盖全局浅色滚动条在暗底上的不协调 */
.ant-layout-sider {
  scrollbar-width: thin;
  scrollbar-color: rgba(255, 255, 255, 0.18) transparent;
}
.ant-layout-sider ::-webkit-scrollbar {
  width: 6px;
  height: 6px;
}
.ant-layout-sider ::-webkit-scrollbar-thumb {
  background: rgba(255, 255, 255, 0.18);
  border-radius: 3px;
}
.ant-layout-sider ::-webkit-scrollbar-thumb:hover {
  background: rgba(255, 255, 255, 0.32);
}
.ant-layout-sider ::-webkit-scrollbar-track {
  background: transparent;
}

/* ⭐ UI 永久规则：所有列表表头强制居中（标题行对齐一致）
   无论某列是否显式设置 align，表头都统一居中，彻底避免"有的居中有的没居中"；
   单元格对齐仍由各列 align 控制（金额 right / 名称 left 等），此处只管表头 */
.ant-table-thead > tr > th {
  text-align: center !important;
}

/* ══════════════ 设计系统：共用组件样式（原内联于 PurchaseManagement，已提取为全局，供所有模块复用） ══════════════ */
.ant-table-thead > tr > th {
  background: linear-gradient(135deg, #f0f5ff, #e6f0ff) !important;
  color: #1a1a2e !important;
  font-weight: 600 !important;
  font-size: 12px !important;
  padding: 10px 8px !important;
  border-bottom: 2px solid #d6e4ff !important;
}
.ant-table-tbody > tr > td {
  padding: 8px !important;
  transition: background 0.2s ease;
}
.ant-table-tbody > tr:nth-child(even) > td {
  background: #fafbff;
}
.ant-table-tbody > tr:hover > td {
  background: #e6f4ff !important;
}
.ant-table-tbody > tr:last-child > td {
  border-bottom: none !important;
}
.pm-stat-card .ant-statistic-content {
  font-size: 24px !important;
  display: flex;
  align-items: center;
  gap: 6px;
}
.pm-stat-card .ant-statistic-title {
  margin-bottom: 0 !important;
  font-size: 12px !important;
  color: #8c8c8c !important;
}
.pm-btn-gradient {
  background: linear-gradient(135deg, #1677ff, #0958d9) !important;
  border: none !important;
  color: #fff !important;
  box-shadow: 0 2px 8px rgba(22,119,255,0.25) !important;
  transition: all 0.3s ease !important;
}
.pm-btn-gradient:hover {
  box-shadow: 0 4px 16px rgba(22,119,255,0.4) !important;
  transform: translateY(-1px);
}
.pm-btn-success {
  background: linear-gradient(135deg, #52c41a, #389e0d) !important;
  border: none !important;
  color: #fff !important;
  box-shadow: 0 2px 8px rgba(82,196,26,0.25) !important;
}
.pm-btn-success:hover {
  box-shadow: 0 4px 16px rgba(82,196,26,0.4) !important;
  transform: translateY(-1px);
}
.pm-btn-purple {
  background: linear-gradient(135deg, #722ed1, #531dab) !important;
  border: none !important;
  color: #fff !important;
  box-shadow: 0 2px 8px rgba(114,46,209,0.25) !important;
}
.pm-btn-purple:hover {
  box-shadow: 0 4px 16px rgba(114,46,209,0.4) !important;
  transform: translateY(-1px);
}
.pm-btn-orange {
  background: linear-gradient(135deg, #fa8c16, #d46b08) !important;
  border: none !important;
  color: #fff !important;
  box-shadow: 0 2px 8px rgba(250,140,22,0.25) !important;
}
.pm-btn-orange:hover {
  box-shadow: 0 4px 16px rgba(250,140,22,0.4) !important;
  transform: translateY(-1px);
}

/* ══════════════ U-02 全局主按钮渐变：type="primary" 统一品牌渐变（零逻辑改动，纯样式提升）
     注意：小尺寸(size=small)按钮排除渐变——表格操作列/树节点等窄按钮用纯色更清晰可读 ══════════════ */
.ant-btn-primary {
  color: #fff !important;
  background: linear-gradient(135deg, #1677ff, #0958d9) !important;
  border-color: transparent !important;
  box-shadow: 0 2px 8px rgba(22,119,255,0.25) !important;
  transition: all 0.3s ease !important;
}
.ant-btn-primary:hover {
  box-shadow: 0 4px 16px rgba(22,119,255,0.4) !important;
  transform: translateY(-1px);
}
.ant-btn-primary:active {
  transform: translateY(0);
}
/* P2-3 修复：保留品牌渐变底，禁用态用半透明白字，文字清晰不发虚（不再用暗灰字叠亮底） */
.ant-btn-primary:disabled,
.ant-btn-primary[disabled] {
  background: linear-gradient(135deg, #1677ff, #0958d9) !important;
  border-color: transparent !important;
  color: #fff !important;
  box-shadow: none !important;
  opacity: 1 !important;
  cursor: not-allowed;
}

/* 小尺寸 primary 按钮保持纯色（表格操作列/图标按钮在窄空间下渐变会导致文字不可读） */
.ant-btn-primary.ant-btn-sm,
.ant-btn-sm.ant-btn-primary {
  background: #1677ff !important;
  border-color: #1677ff !important;
  box-shadow: none !important;
}
.ant-btn-primary.ant-btn-sm:hover,
.ant-btn-sm.ant-btn-primary:hover {
  background: #4096ff !important;
  border-color: #4096ff !important;
  transform: none !important;
  box-shadow: none !important;
}

/* Ghost primary 按钮保持幽灵样式（透明底+蓝边框+蓝字，不受渐变覆盖）
   表格操作列大量使用 type="primary" ghost，若被 U-02 渐变覆盖会变成实心蓝块 */
.ant-btn-primary.ant-btn-ghost,
.ant-btn-ghost.ant-btn-primary {
  background: transparent !important;
  border-color: #1677ff !important;
  color: #1677ff !important;
  box-shadow: none !important;
}
/* 三合一：small + primary + ghost → 必须透明底（sm 规则设了纯蓝底，需 ghost 覆盖回去） */
.ant-btn-primary.ant-btn-sm.ant-btn-ghost,
.ant-btn-sm.ant-btn-primary.ant-btn-ghost,
.ant-btn-ghost.ant-btn-primary.ant-btn-sm {
  background: transparent !important;
  border-color: #1677ff !important;
  color: #1677ff !important;
  box-shadow: none !important;
}
.ant-btn-primary.ant-btn-ghost:hover,
.ant-btn-ghost.ant-btn-primary:hover,
.ant-btn-primary.ant-btn-sm.ant-btn-ghost:hover {
  color: #4096ff !important;
  border-color: #4096ff !important;
  background: rgba(22,119,255,0.06) !important;
  transform: none !important;
  box-shadow: none !important;
}
/* ═══ U-04 表格「操作」列浅灰底（全系统 UI 一致性铺开·批2）
     由 _inject_ui_consistency.js 给每个 title:'操作' 列注入 className:'yunjia-action-col'，
     此规则让表头 th 与单元格 td 同时浅灰底，零逻辑改动、未来新增自动生效 ═══ */
.yunjia-action-col {
  background-color: #fafafa !important;
}
.yunjia-action-col.ant-table-cell-fix-right,
.yunjia-action-col.ant-table-cell-fix-left {
  background-color: #fafafa !important;
}
/* ═══ U-03 弹窗/抽屉头部全局渐变（原 .pm-modal-header 提升为全局，零逻辑改动） ═══ */
.ant-modal-header {
  border-bottom: 1px solid #f0f0f0 !important;
  padding: 16px 24px !important;
  background: linear-gradient(135deg, #f0f5ff, #fafbff) !important;
  border-radius: 12px 12px 0 0 !important;
}
.ant-drawer-header {
  border-bottom: 1px solid #f0f0f0 !important;
  padding: 16px 24px !important;
  background: linear-gradient(135deg, #f0f5ff, #fafbff) !important;
}
.pm-section-card {
  background: #fff;
  border-radius: 12px;
  padding: 16px;
  box-shadow: 0 1px 4px rgba(0,0,0,0.04);
  border: 1px solid #f0f0f0;
  transition: box-shadow 0.2s ease;
}
.pm-section-card:hover {
  box-shadow: 0 2px 12px rgba(0,0,0,0.08);
}
/* ═══ U-03 状态标签全局统一形状（原 .pm-tag-status 提升为全局 .ant-tag） ═══ */
.ant-tag {
  border-radius: 6px !important;
  padding: 2px 10px !important;
  font-size: 11px !important;
  font-weight: 500 !important;
  border: none !important;
  line-height: 20px !important;
}
/* 状态语义色板：页面可直接用 className="tag-success" 等，或继续用 antd color="success" */
.tag-success   { background:#f6ffed !important; color:#389e0d !important; }
.tag-error     { background:#fff1f0 !important; color:#cf1322 !important; }
.tag-warning   { background:#fffbe6 !important; color:#d48806 !important; }
.tag-info      { background:#e6f4ff !important; color:#0958d9 !important; }
.tag-processing { background:#f9f0ff !important; color:#722ed1 !important; }
.tag-default   { background:#fafafa !important; color:#595959 !important; border:1px solid #d9d9d9 !important; }
@keyframes pmFadeIn {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}
.pm-fade-in {
  animation: pmFadeIn 0.3s ease forwards;
}

/* 卡片统一样式 */
.page-card {
  background: #fff;
  border-radius: 12px;
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
  padding: 24px;
}

/* 隐藏 number 输入框的上下箭头 */
input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
  -webkit-appearance: none !important;
  margin: 0;
}
input[type="number"] {
  -moz-appearance: textfield !important;
}

/* ══════════════ P2 打磨（全局提升，零逐页改动）：U-08 卡片 / U-13 颜色 / U-09 数值 / U-10 表单 / U-12 响应式 ══════════════ */

/* ── U-08 卡片收敛：所有 antd 卡片统一圆角+阴影，消除"新页面自造 radius/shadow"漂移 ── */
.ant-card {
  border-radius: 12px !important;
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06) !important;
  border-color: #f0f0f0 !important;
}
.ant-card-hoverable {
  transition: all 0.25s ease !important;
}
.ant-card-hoverable:hover {
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.10) !important;
  transform: translateY(-2px);
}
/* 收敛 .pm-section-card 与 .page-card 为一致阴影（保留各自内边距差异） */
.pm-section-card {
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06) !important;
  border-radius: 12px !important;
}

/* ── U-13 语义色文字工具类：供内联文本统一引用，杜绝硬编码 hex 漂移 ── */
.c-primary { color: #1677ff !important; }
.c-success { color: #52c41a !important; }
.c-warning { color: #fa8c16 !important; }
.c-error   { color: #ff4d4f !important; }
.c-info    { color: #1677ff !important; }
.c-text    { color: #333333 !important; }
.c-text-secondary { color: #666666 !important; }
.c-text-tertiary  { color: #8c8c8c !important; }

/* ── U-09 数值/金额工具类：等宽数字+右对齐，供表格金额列 className 复用 ── */
.pm-num    { font-variant-numeric: tabular-nums; }
.pm-amount { text-align: right; font-variant-numeric: tabular-nums; font-weight: 600; }

/* ── U-10 表单标签字重统一（控件/校验样式由 antd 主题接管） ── */
.ant-form-item-label > label { font-weight: 500; }

/* ── U-12 小屏响应式安全网：表格横向滚动，避免操作列挤压/溢出 ── */
.ant-table-wrapper { overflow-x: auto; }

/* ══════════════ A) 手机浏览器响应式适配（≤768px 安全网，零业务页面改动） ══════════════ */
@media (max-width: 768px) {
  /* 缩小基础字号，缓解窄屏文字溢出 */
  body { font-size: 13px; }

  /* 内容区留白收紧 */
  .ant-layout-content { margin: 8px !important; }

  /* 顶栏内边距收窄，给面包屑/操作区更多空间 */
  .ant-layout-header { padding: 0 12px !important; }

  /* 页面卡片内边距与区块卡片间距缩小 */
  .page-card { padding: 16px; }
  .pm-section-card { padding: 12px; }

  /* Row/Col 兜底：强制单列换行，避免写死宽度的栅格在窄屏溢出 */
  .ant-row { flex-wrap: wrap !important; }
  .ant-col {
    flex: 0 0 100% !important;
    max-width: 100% !important;
  }

  /* 统计卡片横向铺满并允许换行 */
  .pm-stat-card { width: 100% !important; }

  /* 表格容器横向滚动（已有全局兜底，此处再次保证窄屏生效） */
  .ant-table-wrapper { overflow-x: auto; }

  /* 表单/描述列表标签与控件在窄屏下纵向堆叠更友好（antd 已默认，这里仅收间距） */
  .ant-form-item { margin-bottom: 12px; }
}
