:root {
  --color-primary: #f3573c;
  --color-primary-hover: #e04530;
  --color-primary-light: #f6796a;
  --color-primary-soft: #fecaca;
  --color-primary-bg: rgba(243, 87, 60, 0.08);
  --color-primary-bg-hover: rgba(243, 87, 60, 0.14);
  --color-primary-bg-12: rgba(243, 87, 60, 0.12);
  --color-primary-bg-15: rgba(243, 87, 60, 0.15);
  --color-primary-bg-20: rgba(243, 87, 60, 0.2);
  --color-primary-bg-30: rgba(243, 87, 60, 0.3);
  --color-primary-bg-50: rgba(243, 87, 60, 0.5);
  --color-primary-shadow-sm: rgba(243, 87, 60, 0.12);
  --color-primary-shadow: rgba(243, 87, 60, 0.3);
  --color-primary-shadow-lg: rgba(243, 87, 60, 0.4);
  --color-bg: #0c0f1a;
  --color-bg-elevated: #151929;
  --color-surface: #131620;
  --color-surface-hover: #1a1e2e;
  --color-sidebar: #0a0d16;
  --color-sidebar-hover: rgba(255, 255, 255, 0.06);
  --color-sidebar-active: var(--color-primary-bg-20);
  --color-text: #e2e8f0;
  --color-text-secondary: #94a3b8;
  --color-text-muted: #64748b;
  --color-border: rgba(255, 255, 255, 0.08);
  --color-border-light: rgba(255, 255, 255, 0.05);
  --color-success: #34d399;
  --color-success-bg: rgba(52, 211, 153, 0.12);
  --color-warning: #fbbf24;
  --color-warning-bg: rgba(251, 191, 36, 0.12);
  --color-danger: #f87171;
  --color-danger-bg: rgba(248, 113, 113, 0.12);
  --color-blue: #60a5fa;
  --color-blue-bg: rgba(96, 165, 250, 0.12);
  --color-green: #34d399;
  --color-orange: #fbbf24;
  --color-purple: #a78bfa;
  --color-purple-bg: rgba(167, 139, 250, 0.12);
  --radius-sm: 6px;
  --radius: 8px;
  --radius-lg: 12px;
  --radius-xl: 16px;
  --radius-2xl: 20px;
  --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.3);
  --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.4), 0 1px 2px rgba(0, 0, 0, 0.3);
  --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.5), 0 2px 4px -2px rgba(0, 0, 0, 0.4);
  --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.5), 0 4px 6px -4px rgba(0, 0, 0, 0.3);
  --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.5), 0 8px 10px -6px rgba(0, 0, 0, 0.3);
  --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
  --transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1);
  --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
}

[v-cloak] { display: none; }

*, *::before, *::after { box-sizing: border-box; }

body {
  margin: 0;
  font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  color: var(--color-text);
  background: var(--color-bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  font-feature-settings: 'cv02', 'cv03', 'cv04', 'cv11';
  line-height: 1.5;
}

.mono {
  font-family: 'SF Mono', 'Fira Code', 'Fira Mono', 'JetBrains Mono', Menlo, Consolas, monospace;
  font-size: 0.85em;
}

.text-blue { color: var(--color-blue); }
.text-green { color: var(--color-green); }
.text-orange { color: var(--color-orange); }
.text-purple { color: var(--color-purple); }
.text-muted { color: var(--color-text-muted); }
.text-secondary { color: var(--color-text-secondary); }
.font-medium { font-weight: 500; }

.page-card {
  background: var(--color-surface);
  border-radius: var(--radius-lg);
  border: 1px solid var(--color-border);
  box-shadow: var(--shadow-sm);
}

.page-card-header {
  padding: 20px 24px;
  border-bottom: 1px solid var(--color-border-light);
}

.page-card-header h3 {
  margin: 0;
  font-size: 15px;
  font-weight: 600;
}

.page-card-header p {
  margin: 4px 0 0;
  font-size: 12px;
  color: var(--color-text-muted);
}

.stat-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 20px;
  margin-bottom: 24px;
}

@media (max-width: 1200px) {
  .stat-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
  .stat-grid { grid-template-columns: 1fr; }
}

/* ========== Antd 深色主题 — 批量覆写 ========== */

/* --- 1. 深色背景：所有容器/面板/弹层 --- */
.ant-card,
.ant-modal-content,
.ant-popover-inner,
.ant-popover-arrow-content,
.ant-select-dropdown,
.ant-dropdown-menu,
.ant-picker-panel-container,
.ant-message-notice-content,
.ant-notification-notice,
.ant-tooltip-inner,
.ant-drawer-content,
.ant-collapse-content,
.ant-table-wrapper .ant-table,
.ant-table-placeholder,
.ant-table-filter-dropdown { background: var(--color-surface) !important; }

/* --- 2. 深色背景：所有输入类控件 --- */
.ant-input,
.ant-input-affix-wrapper,
.ant-input-number,
.ant-input-number-handler-wrap,
.ant-select-selector,
.ant-select-selection-search-input,
.ant-picker,
.ant-cascader-input,
.ant-btn-default,
.ant-pagination-item,
.ant-pagination-prev .ant-pagination-item-link,
.ant-pagination-next .ant-pagination-item-link { background: var(--color-bg-elevated) !important; }

/* --- 3. 深色边框：统一 --- */
.ant-input,
.ant-input-affix-wrapper,
.ant-input-number,
.ant-select-selector,
.ant-picker,
.ant-btn-default,
.ant-card,
.ant-modal-content,
.ant-popover-inner,
.ant-select-dropdown,
.ant-message-notice-content,
.ant-pagination-item,
.ant-pagination-prev .ant-pagination-item-link,
.ant-pagination-next .ant-pagination-item-link,
.ant-table-thead > tr > th,
.ant-collapse-item { border-color: var(--color-border) !important; }

/* --- 4. 文字颜色 --- */
.ant-input,
.ant-input-affix-wrapper,
.ant-input-number,
.ant-select-selector,
.ant-select-item,
.ant-select-selection-item,
.ant-picker-input > input,
.ant-modal-title,
.ant-modal-body,
.ant-popover-message-title,
.ant-message-notice-content,
.ant-table-tbody > tr > td,
.ant-btn-default,
.ant-form-item-label > label,
.ant-collapse-header { color: var(--color-text) !important; }

/* 次要文字 */
.ant-input::placeholder,
.ant-input-affix-wrapper .ant-input::placeholder,
.ant-select-selection-placeholder,
.ant-picker-input > input::placeholder,
.ant-pagination-total-text,
.ant-empty-description,
.ant-table-thead > tr > th { color: var(--color-text-muted) !important; }

/* --- 5. 交互态：hover / focus 统一品牌色边框 --- */
.ant-input:hover,
.ant-input:focus,
.ant-input-focused,
.ant-input-affix-wrapper:hover,
.ant-input-affix-wrapper-focused,
.ant-input-number:hover,
.ant-input-number-focused,
.ant-select:hover .ant-select-selector,
.ant-select-focused .ant-select-selector,
.ant-picker:hover,
.ant-picker-focused,
.ant-btn-default:hover { border-color: var(--color-primary) !important; }

/* --- 6. 清除按钮 / 小图标背景透明 --- */
.ant-select-clear,
.ant-input-clear-icon,
.ant-picker-clear,
.ant-select-arrow,
.ant-input-suffix,
.ant-input-prefix { background: transparent !important; color: var(--color-text-muted) !important; }

/* --- 7. 表格 --- */
.ant-table { font-size: 13px; }
.ant-table-thead > tr > th { background: var(--color-bg-elevated) !important; border-bottom: 1px solid var(--color-border) !important; }
.ant-table-tbody > tr > td { border-bottom: 1px solid var(--color-border-light) !important; }
.ant-table-tbody > tr > td, .ant-table-tbody > tr.ant-table-row > td { transition: none !important; }
.ant-table-tbody > tr:hover > td,
.ant-table-tbody > tr.ant-table-row:hover > td,
.ant-table-tbody td.ant-table-cell-row-hover { background: var(--color-surface-hover) !important; transition: none !important; }
.ant-empty-description { visibility: hidden !important; position: relative !important; }
.ant-empty-description::after { content: '暂无数据'; visibility: visible; position: absolute; left: 50%; transform: translateX(-50%); color: var(--color-text-muted); }

/* --- 8. 下拉选项 --- */
.ant-select-item-option-active { background: var(--color-surface-hover) !important; }
.ant-select-item-option-selected { background: var(--color-primary-bg) !important; color: var(--color-primary) !important; }
.ant-select-dropdown { box-shadow: var(--shadow-lg) !important; border: 1px solid var(--color-border) !important; }

/* --- 9. 按钮 --- */
.ant-btn { border-radius: var(--radius) !important; font-weight: 500; }
.ant-btn-primary { background: var(--color-primary) !important; border-color: var(--color-primary) !important; color: #fff !important; box-shadow: 0 2px 6px var(--color-primary-shadow-sm) !important; }
.ant-btn-primary:hover, .ant-btn-primary:focus { background: var(--color-primary-hover) !important; border-color: var(--color-primary-hover) !important; }
.ant-btn-default:hover { color: var(--color-primary) !important; }
.ant-btn-text { color: var(--color-text-secondary) !important; }
.ant-btn-text:hover { background: var(--color-surface-hover) !important; color: var(--color-text) !important; }
.ant-btn-link { color: var(--color-text-secondary) !important; }
.ant-btn-link:hover { color: var(--color-text) !important; }
.ant-btn-dangerous.ant-btn-link { color: var(--color-danger) !important; }
.ant-btn-dangerous.ant-btn-link:hover { color: #fca5a5 !important; }

/* --- 10. 弹窗 --- */
.ant-modal-content { border-radius: var(--radius-xl) !important; box-shadow: var(--shadow-xl) !important; }
.ant-modal-header { background: transparent !important; border-bottom: 1px solid var(--color-border-light) !important; border-radius: var(--radius-xl) var(--radius-xl) 0 0 !important; padding: 20px 24px !important; }
.ant-modal-footer { border-top: 1px solid var(--color-border-light) !important; background: transparent !important; border-radius: 0 0 var(--radius-xl) var(--radius-xl) !important; }
.ant-modal-close { color: var(--color-text-muted) !important; }
.ant-modal-close:hover { color: var(--color-text) !important; }
.ant-modal-mask { background: rgba(0, 0, 0, 0.6) !important; }

/* --- 11. 分页 --- */
.ant-pagination-item-active { border-color: var(--color-primary) !important; }
.ant-pagination-item a { color: var(--color-text-secondary) !important; }
.ant-pagination-item-active a { color: var(--color-primary) !important; }
.ant-pagination-disabled .ant-pagination-item-link { color: var(--color-text-muted) !important; }

/* --- 12. 其他组件 --- */
.ant-card { border-radius: var(--radius-lg) !important; }
.ant-tag { border-radius: var(--radius-sm) !important; font-weight: 500; font-size: 12px; }
.ant-input, .ant-input-number, .ant-select-selector { border-radius: var(--radius) !important; }

/* --- 13. 日期选择器 / 时间面板 --- */
.ant-picker-dropdown .ant-picker-panel-container,
.ant-picker-dropdown .ant-picker-panel,
.ant-picker-dropdown .ant-picker-header,
.ant-picker-dropdown .ant-picker-date-panel,
.ant-picker-dropdown .ant-picker-time-panel,
.ant-picker-dropdown .ant-picker-footer {
  background: var(--color-surface) !important;
  color: var(--color-text) !important;
}

.ant-picker-dropdown .ant-picker-header,
.ant-picker-dropdown .ant-picker-footer,
.ant-picker-dropdown .ant-picker-time-panel-column:not(:first-child) {
  border-color: var(--color-border) !important;
}

.ant-picker-dropdown .ant-picker-header button,
.ant-picker-dropdown .ant-picker-content th,
.ant-picker-dropdown .ant-picker-time-panel-column > li,
.ant-picker-dropdown .ant-picker-now,
.ant-picker-dropdown .ant-picker-time-panel-column-count {
  color: var(--color-text-secondary) !important;
}

.ant-picker-dropdown .ant-picker-cell,
.ant-picker-dropdown .ant-picker-cell .ant-picker-cell-inner,
.ant-picker-dropdown .ant-picker-content td,
.ant-picker-dropdown .ant-picker-content td span {
  color: var(--color-text) !important;
}

.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-disabled .ant-picker-cell-inner,
.ant-picker-dropdown .ant-picker-cell-disabled .ant-picker-cell-inner,
.ant-picker-dropdown .ant-picker-time-panel-column > li.ant-picker-time-panel-cell-disabled {
  color: var(--color-text-muted) !important;
  opacity: 0.45;
}

.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-today .ant-picker-cell-inner::before {
  border-color: var(--color-primary) !important;
}

.ant-picker-dropdown .ant-picker-cell-in-view:hover .ant-picker-cell-inner,
.ant-picker-dropdown .ant-picker-time-panel-column > li:hover {
  background: var(--color-surface-hover) !important;
}

.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner,
.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-start .ant-picker-cell-inner,
.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-end .ant-picker-cell-inner,
.ant-picker-dropdown .ant-picker-time-panel-column > li.ant-picker-time-panel-cell-selected {
  background: var(--color-primary) !important;
  color: #fff !important;
}

.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-start::after,
.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-end::after,
.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-in-range::before {
  background: var(--color-primary-bg) !important;
}

.ant-picker-dropdown .ant-picker-time-panel-column > li.ant-picker-time-panel-cell-selected:hover,
.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-selected:hover .ant-picker-cell-inner {
  background: var(--color-primary-hover) !important;
}

.ant-picker-dropdown .ant-picker-ok .ant-btn,
.ant-picker-dropdown .ant-picker-now-btn {
  color: var(--color-primary) !important;
}

.ant-picker-dropdown .ant-picker-active-bar {
  background: var(--color-primary) !important;
}

.ant-picker-dropdown .ant-picker-header button:hover,
.ant-picker-dropdown .ant-picker-now:hover,
.ant-picker-dropdown .ant-picker-now-btn:hover {
  color: var(--color-text) !important;
}

.ant-picker-dropdown .ant-picker-clear {
  background: transparent !important;
}

.ant-picker-dropdown .ant-picker-time-panel-column > li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner,
.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner,
.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-start .ant-picker-cell-inner,
.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-end .ant-picker-cell-inner {
  color: #fff !important;
}

.ant-picker-dropdown .ant-picker-cell-out-view .ant-picker-cell-inner {
  color: var(--color-text-muted) !important;
  opacity: 0.35;
}

.ant-picker-dropdown .ant-picker-decade-panel,
.ant-picker-dropdown .ant-picker-year-panel,
.ant-picker-dropdown .ant-picker-month-panel,
.ant-picker-dropdown .ant-picker-quarter-panel,
.ant-picker-dropdown .ant-picker-week-panel {
  background: var(--color-surface) !important;
}

.ant-picker-dropdown .ant-picker-super-prev-icon::before,
.ant-picker-dropdown .ant-picker-super-next-icon::before,
.ant-picker-dropdown .ant-picker-prev-icon::before,
.ant-picker-dropdown .ant-picker-next-icon::before {
  border-color: var(--color-text-secondary) !important;
}

.ant-picker-dropdown .ant-picker-header-view button {
  color: var(--color-text) !important;
}

.ant-picker-dropdown .ant-picker-header-view button:hover {
  color: var(--color-primary) !important;
}

.ant-picker-dropdown .ant-picker-content th,
.ant-picker-dropdown .ant-picker-cell::before {
  border-color: var(--color-border-light) !important;
}

.ant-picker-dropdown .ant-picker-ranges {
  border-top-color: var(--color-border) !important;
  background: var(--color-surface) !important;
}

.ant-picker-dropdown .ant-picker-ranges .ant-picker-preset > .ant-tag-blue,
.ant-picker-dropdown .ant-picker-ranges a {
  color: var(--color-primary) !important;
}

.ant-picker-dropdown .ant-picker-ranges a:hover {
  color: var(--color-text) !important;
}

.ant-picker-dropdown .ant-picker-time-panel-column > li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner {
  color: inherit !important;
}

.ant-picker-dropdown .ant-picker-time-panel-column > li.ant-picker-time-panel-cell-disabled:hover {
  background: transparent !important;
}

.ant-picker-dropdown .ant-picker-header button,
.ant-picker-dropdown .ant-picker-header-view,
.ant-picker-dropdown .ant-picker-content,
.ant-picker-dropdown .ant-picker-body {
  color: var(--color-text) !important;
}

.ant-picker-dropdown .ant-picker-content th,
.ant-picker-dropdown .ant-picker-cell-disabled::before {
  background: transparent !important;
}

.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single)::before,
.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single)::before {
  background: var(--color-primary-bg) !important;
}

.ant-picker-dropdown .ant-picker-header button[disabled] {
  color: var(--color-text-muted) !important;
}
.ant-input-number-handler { color: var(--color-text-secondary) !important; }
.ant-input-number-handler:hover { color: var(--color-primary) !important; }
.ant-input-number-handler-up-inner, .ant-input-number-handler-down-inner { color: inherit !important; }
.ant-switch { background: var(--color-text-muted) !important; }
.ant-switch-checked { background: var(--color-primary) !important; }
.ant-popover-inner { box-shadow: var(--shadow-lg) !important; }
.ant-message-notice-content { box-shadow: var(--shadow-lg) !important; }

::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.12); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.2); }

