/* ═══════════════════════════════════════════════════════════════
   项目交易模块 · 统一设计规范 CSS
   版本: 1.0
   适用: 全部桌面端 + 移动端页面
   ═══════════════════════════════════════════════════════════════ */

/* ── 设计令牌 (CSS Custom Properties) ── */
:root {
  /* 主色系 */
  --ds-primary: #006a44;
  --ds-primary-container: #008557;
  --ds-on-primary: #ffffff;
  --ds-secondary: #476458;
  --ds-surface: #f6faf8;
  --ds-on-surface: #181d1c;
  --ds-on-surface-variant: #3d4a41;
  --ds-outline: #6d7a71;
  --ds-outline-variant: #bccabf;
  --ds-error: #ba1a1a;

  /* 33号方案 P0 - 全站状态与视觉增强色 */
  --ds-status-green: #059669;
  --ds-status-amber: #d97706;
  --ds-status-red: #dc2626;
  --ds-status-blue: #2563eb;
  --ds-status-gray: #9ca3af;

  /* 字号规范 — 桌面端 */
  --ds-dt-h1: 1.75rem;       /* 28px */
  --ds-dt-h2: 1.375rem;      /* 22px */
  --ds-dt-h3: 1.125rem;      /* 18px */
  --ds-dt-body: 0.875rem;    /* 14px */
  --ds-dt-label: 0.75rem;    /* 12px */
  --ds-dt-caption: 0.75rem;  /* 12px */

  /* 字号规范 — 移动端 */
  --ds-mb-h1: 1.25rem;       /* 20px */
  --ds-mb-h2: 1.0625rem;     /* 17px */
  --ds-mb-h3: 0.9375rem;     /* 15px */
  --ds-mb-body: 0.875rem;    /* 14px */
  --ds-mb-label: 0.75rem;    /* 12px */
  --ds-mb-caption: 0.75rem;  /* 12px */

  /* 间距 */
  --ds-section-gap-dt: 2rem;     /* 32px - 桌面端 section 间距 */
  --ds-section-gap-mb: 1.5rem;   /* 24px - 移动端 section 间距 */
  --ds-card-padding-dt: 1.5rem;  /* 24px - 桌面端卡片内距 */
  --ds-card-padding-mb: 1rem;    /* 16px - 移动端卡片内距 */

  /* 38号方案 - 桌面版式 alias：只扩展 --ds-*，不新增第二套 token 命名空间 */
  --ds-layout-aside-min: 280px;
  --ds-layout-aside-max: 320px;
  --ds-layout-card-padding-x: 20px;
  --ds-layout-card-padding-y: 16px;
  --ds-layout-block-gap: 16px;
  --ds-layout-field-gap: 0.75rem;
  --ds-layout-inline-gap: 0.5rem;
  --ds-layout-sticky-top: 64px;
  --ds-layout-sticky-bottom: 72px;
  --ds-component-button-height: 40px;
  --ds-component-button-height-lg: 44px;
  --ds-component-button-radius: 8px;
  --ds-component-button-gap: 8px;

  /* 圆角 */
  --ds-radius-card: 1rem;        /* 16px */
  --ds-radius-button: 9999px;   /* pill */
  --ds-radius-input: 0.75rem;   /* 12px */
  --ds-radius-badge: 9999px;

  /* 阴影 */
  --ds-shadow-card: 0px 12px 32px rgba(19, 37, 29, 0.06);
  --ds-shadow-header: 0px 4px 24px rgba(19, 37, 29, 0.04);
  --ds-shadow-elevated: 0px 16px 48px rgba(19, 37, 29, 0.10);

  /* 动效 */
  --ds-transition: 200ms cubic-bezier(0.4, 0, 0.2, 1);
}

/* ── 基础重置 ── */
*,
*::before,
*::after {
  box-sizing: border-box;
}

body {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  line-height: 1.6;
  color: var(--ds-on-surface);
}

/* ── 桌面端标准化 ── */
@media (min-width: 768px) {
  /* 桌面端页面标题统一 */
  body main > div > h1,
  body main > h1,
  body main > div > div > h1 {
    font-size: var(--ds-dt-h1);
    line-height: 1.3;
    letter-spacing: -0.01em;
  }

  /* 桌面端 section 标题统一 */
  body main h2 {
    font-size: var(--ds-dt-h2);
    line-height: 1.35;
  }

  body main h3 {
    font-size: var(--ds-dt-h3);
    line-height: 1.4;
  }

  /* 主内容区统一间距 */
  body main {
    padding-bottom: 3rem;
  }
}

/* ── 移动端标准化 ── */
@media (max-width: 767px) {
  body main > div > h1,
  body main > h1,
  body main > div > div > h1 {
    font-size: var(--ds-mb-h1);
    line-height: 1.3;
  }

  body main h2 {
    font-size: var(--ds-mb-h2);
    line-height: 1.35;
  }

  body main h3 {
    font-size: var(--ds-mb-h3);
    line-height: 1.4;
  }
}

/* ── 通用组件标准化 ── */

/* 玻璃卡片统一 */
.glass-card,
.glass-panel {
  background: rgba(255, 255, 255, 0.72);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border-radius: var(--ds-radius-card);
  box-shadow: var(--ds-shadow-card);
}

/* 翡翠渐变 CTA 统一 */
.emerald-pulse,
.emerald-pulse-gradient,
.emerald-gradient,
.primary-gradient {
  background: linear-gradient(135deg, #0c9d68 0%, #19b879 100%);
  color: white;
  border: none;
  transition: opacity var(--ds-transition), transform var(--ds-transition);
}

/* 深色技术卡片 */
.dark-tech-card {
  background: linear-gradient(135deg, #002112 0%, #003822 100%);
  color: #81f9bc;
  border-radius: var(--ds-radius-card);
}
.emerald-pulse:hover,
.emerald-pulse-gradient:hover,
.primary-gradient:hover {
  opacity: 0.92;
}
.emerald-pulse:active,
.emerald-pulse-gradient:active,
.primary-gradient:active {
  transform: scale(0.97);
}

/* 统一表格行高和间距 */
table th {
  font-size: 0.6875rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  padding: 0.75rem 1rem;
}
table td {
  font-size: 0.8125rem;
  padding: 0.75rem 1rem;
}

/* 统一 Badge/Tag 样式 */
.badge,
[class*="badge"] {
  font-weight: 700;
  letter-spacing: 0.01em;
}

/* 统一输入框 focus 样式 */
input:focus,
textarea:focus,
select:focus {
  outline: none;
  border-color: var(--ds-primary);
  box-shadow: 0 0 0 2px rgba(0, 106, 68, 0.12);
}

/* ── 滚动条样式 — 桌面端统一 ── */
@media (min-width: 768px) {
  ::-webkit-scrollbar {
    width: 6px;
    height: 6px;
  }
  ::-webkit-scrollbar-track {
    background: transparent;
  }
  ::-webkit-scrollbar-thumb {
    background: var(--ds-outline-variant);
    border-radius: 10px;
  }
  ::-webkit-scrollbar-thumb:hover {
    background: var(--ds-outline);
  }
}

/* ── 移动端底部安全区 ── */
@supports (padding-bottom: env(safe-area-inset-bottom)) {
  body > footer,
  body > nav:last-child,
  footer.fixed,
  nav.fixed[class*="bottom-0"] {
    padding-bottom: calc(2rem + env(safe-area-inset-bottom));
  }
}

/* ── 统一过渡动画 ── */
a,
button,
[role="button"] {
  transition: color var(--ds-transition),
              background-color var(--ds-transition),
              border-color var(--ds-transition),
              opacity var(--ds-transition),
              transform var(--ds-transition),
              box-shadow var(--ds-transition);
}

/* ── 统一 Material Icons 基准 ── */
.material-symbols-outlined {
  font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
  vertical-align: middle;
}

/* ── 33号方案 P0：标签与趋势提示（状态色条已撤销） ── */
.ds-status-bar {
  border-left: 0;
}

.ds-status-bar[data-status="green"],
.ds-status-bar.ds-status-green {
  border-left-color: transparent;
}

.ds-status-bar[data-status="amber"],
.ds-status-bar.ds-status-amber {
  border-left-color: transparent;
}

.ds-status-bar[data-status="red"],
.ds-status-bar.ds-status-red {
  border-left-color: transparent;
}

.ds-status-bar[data-status="blue"],
.ds-status-bar.ds-status-blue {
  border-left-color: transparent;
}

.ds-status-bar[data-status="gray"],
.ds-status-bar.ds-status-gray {
  border-left-color: transparent;
}

.ds-pill {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  border-radius: 9999px;
  padding: 0.125rem 0.5rem;
  font-size: 0.75rem;
  font-weight: 700;
  line-height: 1.35;
  white-space: nowrap;
}

.ds-pill-green {
  background: rgba(5, 150, 105, 0.10);
  color: var(--ds-status-green);
}

.ds-pill-amber {
  background: rgba(217, 119, 6, 0.10);
  color: var(--ds-status-amber);
}

.ds-pill-red {
  background: rgba(220, 38, 38, 0.10);
  color: var(--ds-status-red);
}

.ds-pill-blue {
  background: rgba(37, 99, 235, 0.10);
  color: var(--ds-status-blue);
}

.ds-pill-gray {
  background: rgba(156, 163, 175, 0.16);
  color: #6b7280;
}

.ds-trend-up,
.ds-trend-down,
.ds-trend-neutral {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  font-size: 0.75rem;
  font-weight: 700;
  line-height: 1.35;
}

.ds-trend-up {
  color: var(--ds-status-green);
}

.ds-trend-down {
  color: var(--ds-status-red);
}

.ds-trend-neutral {
  color: var(--ds-status-gray);
}

/* ═══════════════════════════════════════════════════════════════
   标准化组件类 — Phase 1 统一优化
   ═══════════════════════════════════════════════════════════════ */

/* ── 按钮系统 ── */

/* 主 CTA — 桌面端 */
.btn-primary {
  background: linear-gradient(135deg, #0c9d68 0%, #19b879 100%);
  color: white;
  border: none;
  border-radius: var(--ds-radius-button);
  padding: 0.75rem 1.5rem;
  font-weight: 700;
  font-size: 0.875rem;
  cursor: pointer;
  transition: opacity var(--ds-transition), transform var(--ds-transition), box-shadow var(--ds-transition);
}
.btn-primary:hover { opacity: 0.92; }
.btn-primary:active { transform: scale(0.97); }

/* 主 CTA — 移动端 */
.btn-primary-mobile {
  background: linear-gradient(135deg, #0c9d68 0%, #19b879 100%);
  color: white;
  border: none;
  border-radius: 0.75rem;
  padding: 0.875rem 1.5rem;
  width: 100%;
  font-weight: 700;
  font-size: 0.875rem;
  cursor: pointer;
  transition: opacity var(--ds-transition), transform var(--ds-transition);
}
.btn-primary-mobile:hover { opacity: 0.92; }
.btn-primary-mobile:active { transform: scale(0.97); }

/* 次级按钮 */
.btn-secondary {
  background: transparent;
  color: var(--ds-primary);
  border: 1px solid var(--ds-primary);
  border-radius: var(--ds-radius-button);
  padding: 0.625rem 1.5rem;
  font-weight: 600;
  font-size: 0.875rem;
  cursor: pointer;
  transition: background-color var(--ds-transition), color var(--ds-transition);
}
.btn-secondary:hover { background: rgba(0, 106, 68, 0.05); }

/* 幽灵按钮 */
.btn-ghost {
  background: transparent;
  color: var(--ds-primary);
  border: none;
  border-radius: var(--ds-radius-button);
  padding: 0.375rem 0.75rem;
  font-weight: 700;
  font-size: 0.75rem;
  cursor: pointer;
  transition: background-color var(--ds-transition);
}
.btn-ghost:hover { background: rgba(0, 106, 68, 0.05); }

/* ── 侧边栏系统 ── */

/* 标准侧边栏背景 */
.sidebar-standard {
  background-color: #f0f4f2;
}

/* 深色侧边栏（admin） */
.sidebar-dark {
  background: rgba(44, 49, 45, 0.9);
  backdrop-filter: blur(24px);
  -webkit-backdrop-filter: blur(24px);
}

/* 活跃菜单项 */
.sidebar-menu-active {
  background-color: var(--ds-primary);
  color: var(--ds-on-primary);
  border-radius: var(--ds-radius-button);
  padding: 0.5rem 1rem;
  font-size: 0.875rem;
  font-weight: 600;
}

/* ── 个人中心 · 左右分栏布局 ── */

.profile-layout {
  display: flex;
  min-height: calc(100vh - 4rem);
  gap: 0;
}

.profile-sidebar {
  width: 220px;
  min-width: 220px;
  background: #ffffff;
  border-right: 1px solid var(--ds-outline-variant);
  padding: 0;
  position: sticky;
  top: 4rem;
  height: calc(100vh - 4rem);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}

.profile-sidebar .profile-nav-scroll {
  flex: 1;
  overflow-y: auto;
  padding: 0.75rem 0;
}

.profile-sidebar .sidebar-user {
  flex-shrink: 0;
  padding: 1.5rem 1.25rem 1.25rem;
  border-bottom: 1px solid var(--ds-outline-variant);
  margin-bottom: 0;
}

.profile-sidebar .sidebar-user-avatar {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: rgba(0, 106, 68, 0.1);
  color: var(--ds-primary);
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 800;
  font-size: 1rem;
}

.profile-sidebar .sidebar-user-name {
  font-weight: 700;
  font-size: 0.9375rem;
  color: var(--ds-on-surface);
  margin-top: 0.5rem;
}

.profile-sidebar .sidebar-user-role {
  font-size: 0.75rem;
  color: var(--ds-on-surface-variant);
  margin-top: 0.125rem;
}

.profile-nav {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 0 0.75rem;
}

.profile-nav .nav-item {
  display: flex;
  align-items: center;
  gap: 0.625rem;
  padding: 0.625rem 1rem;
  border-radius: 0.5rem;
  font-size: 0.875rem;
  font-weight: 500;
  color: var(--ds-on-surface-variant);
  text-decoration: none;
  cursor: pointer;
  border-left: 3px solid transparent;
  transition: background-color var(--ds-transition), color var(--ds-transition), border-color var(--ds-transition);
}

.profile-nav .nav-item:hover {
  background: rgba(0, 106, 68, 0.05);
  color: var(--ds-on-surface);
}

.profile-nav .nav-item.active {
  background: rgba(0, 106, 68, 0.08);
  color: var(--ds-primary);
  font-weight: 700;
  border-left-color: var(--ds-primary);
}

.profile-nav .nav-item .material-symbols-outlined {
  font-size: 1.25rem;
}

.profile-content {
  flex: 1;
  min-width: 0;
  padding: 1.5rem 2rem 3rem;
  background: var(--ds-surface);
}

.profile-content .panel {
  display: none;
}

.profile-content .panel.active {
  display: block;
}

/* 个人中心面板内通用 */
.profile-content .panel-title {
  font-size: var(--ds-dt-h2);
  font-weight: 800;
  color: var(--ds-on-surface);
  margin-bottom: 1.25rem;
  font-family: 'Space Grotesk', sans-serif;
}

.profile-content .panel-section {
  margin-bottom: 1.5rem;
}

.profile-content .stat-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
  gap: 1rem;
}

.profile-content .stat-card {
  background: rgba(255, 255, 255, 0.72);
  backdrop-filter: blur(20px);
  border-radius: var(--ds-radius-card);
  box-shadow: var(--ds-shadow-card);
  border: 1px solid rgba(188, 202, 191, 0.2);
  padding: 1.25rem;
}

.profile-content .stat-card .stat-label {
  font-size: 0.75rem;
  color: var(--ds-on-surface-variant);
}

.profile-content .stat-card .stat-value {
  font-size: 1.75rem;
  font-weight: 800;
  font-family: 'Space Grotesk', sans-serif;
  color: var(--ds-primary);
  margin-top: 0.375rem;
}

.profile-content .data-table {
  width: 100%;
  border-collapse: collapse;
}

.profile-content .data-table th {
  text-align: left;
  font-size: 0.75rem;
  font-weight: 700;
  color: var(--ds-on-surface-variant);
  padding: 0.75rem 1rem;
  border-bottom: 1px solid var(--ds-outline-variant);
  background: rgba(240, 244, 242, 0.5);
}

.profile-content .data-table td {
  font-size: 0.8125rem;
  padding: 0.75rem 1rem;
  border-bottom: 1px solid rgba(188, 202, 191, 0.2);
  color: var(--ds-on-surface);
}

.profile-content .data-table tr:hover td {
  background: rgba(0, 106, 68, 0.03);
}

.profile-content .filter-bar {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  margin-bottom: 1rem;
  align-items: center;
}

.profile-content .filter-bar select {
  padding: 0.5rem 0.75rem;
  border: 1px solid var(--ds-outline-variant);
  border-radius: var(--ds-radius-input);
  font-size: 0.8125rem;
  color: var(--ds-on-surface);
  background: #fff;
}

.profile-content .empty-state {
  text-align: center;
  padding: 3rem 1rem;
  color: var(--ds-on-surface-variant);
  font-size: 0.875rem;
}

.profile-content .empty-state .material-symbols-outlined {
  font-size: 3rem;
  opacity: 0.3;
  display: block;
  margin-bottom: 0.75rem;
}

.profile-content .degraded-notice {
  background: rgba(0, 106, 68, 0.05);
  border: 1px dashed var(--ds-outline-variant);
  border-radius: var(--ds-radius-card);
  padding: 2rem;
  text-align: center;
  color: var(--ds-on-surface-variant);
  font-size: 0.875rem;
}

/* ── 统一平台后台 · 左右分栏布局 ── */

.admin-layout {
  display: flex;
  min-height: 100vh;
  padding-top: 4rem;
  gap: 0;
}

.admin-sidebar {
  width: 240px;
  min-width: 240px;
  background: #1a1a2e;
  color: #ffffff;
  padding: 0;
  position: sticky;
  top: 4rem;
  height: calc(100vh - 4rem);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}

.admin-sidebar .admin-nav-scroll {
  flex: 1;
  overflow-y: auto;
  padding: 0.75rem 0;
}

.admin-sidebar .sidebar-header {
  flex-shrink: 0;
  padding: 1.25rem 1.25rem 1rem;
  border-bottom: 1px solid rgba(255, 255, 255, 0.08);
  margin-bottom: 0;
}

.admin-sidebar .sidebar-header h2 {
  font-size: 1rem;
  font-weight: 800;
  color: #64dca1;
  font-family: 'Space Grotesk', sans-serif;
  margin: 0;
}

.admin-sidebar .sidebar-header .admin-user-info {
  margin-top: 0.5rem;
  font-size: 0.75rem;
  color: rgba(255, 255, 255, 0.5);
}

.admin-nav {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 0 0.75rem;
}

.admin-nav .nav-item {
  display: flex;
  align-items: center;
  gap: 0.625rem;
  padding: 0.625rem 1rem;
  border-radius: 0.5rem;
  font-size: 0.8125rem;
  font-weight: 500;
  color: rgba(255, 255, 255, 0.6);
  text-decoration: none;
  cursor: pointer;
  transition: background-color var(--ds-transition), color var(--ds-transition);
}

.admin-nav .nav-item:hover {
  background: rgba(100, 220, 161, 0.08);
  color: rgba(255, 255, 255, 0.9);
}

.admin-nav .nav-item.active {
  background: rgba(100, 220, 161, 0.15);
  color: #64dca1;
  font-weight: 700;
}

.admin-nav .nav-item .material-symbols-outlined {
  font-size: 1.125rem;
}

.admin-nav .nav-divider {
  height: 1px;
  background: rgba(255, 255, 255, 0.06);
  margin: 0.5rem 1rem;
}

.admin-nav .nav-group-label {
  font-size: 0.625rem;
  font-weight: 700;
  color: rgba(255, 255, 255, 0.3);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  padding: 0.75rem 1rem 0.25rem;
  margin-top: 0.25rem;
}

.admin-nav .nav-group-label:first-child {
  margin-top: 0;
}

.admin-content {
  flex: 1;
  min-width: 0;
  padding: 1.5rem 2rem 3rem;
  background: var(--ds-surface);
}

.admin-content .panel {
  display: none;
}

.admin-content .panel.active {
  display: block;
}

.admin-content .panel-title {
  font-size: var(--ds-dt-h2);
  font-weight: 800;
  color: var(--ds-on-surface);
  margin-bottom: 1.25rem;
  font-family: 'Space Grotesk', sans-serif;
}

.admin-content .panel-section {
  margin-bottom: 1.5rem;
}

.admin-content .stat-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
  gap: 1rem;
}

.admin-content .stat-card {
  background: rgba(255, 255, 255, 0.72);
  backdrop-filter: blur(20px);
  border-radius: var(--ds-radius-card);
  box-shadow: var(--ds-shadow-card);
  border: 1px solid rgba(188, 202, 191, 0.2);
  padding: 1.25rem;
}

.admin-content .stat-card .stat-label {
  font-size: 0.75rem;
  color: var(--ds-on-surface-variant);
}

.admin-content .stat-card .stat-value {
  font-size: 1.75rem;
  font-weight: 800;
  font-family: 'Space Grotesk', sans-serif;
  color: var(--ds-primary);
  margin-top: 0.375rem;
}

.admin-content .data-table {
  width: 100%;
  border-collapse: collapse;
}

.admin-content .data-table th {
  text-align: left;
  font-size: 0.75rem;
  font-weight: 700;
  color: var(--ds-on-surface-variant);
  padding: 0.75rem 1rem;
  border-bottom: 1px solid var(--ds-outline-variant);
  background: rgba(240, 244, 242, 0.5);
}

.admin-content .data-table td {
  font-size: 0.8125rem;
  padding: 0.75rem 1rem;
  border-bottom: 1px solid rgba(188, 202, 191, 0.2);
  color: var(--ds-on-surface);
}

.admin-content .data-table tr:hover td {
  background: rgba(0, 106, 68, 0.03);
}

.admin-content .filter-bar {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  margin-bottom: 1rem;
  align-items: center;
}

.admin-content .filter-bar select,
.admin-content .filter-bar input[type="text"] {
  padding: 0.5rem 0.75rem;
  border: 1px solid var(--ds-outline-variant);
  border-radius: var(--ds-radius-input);
  font-size: 0.8125rem;
  color: var(--ds-on-surface);
  background: #fff;
}

.admin-content .empty-state {
  text-align: center;
  padding: 3rem 1rem;
  color: var(--ds-on-surface-variant);
  font-size: 0.875rem;
}

.admin-content .empty-state .material-symbols-outlined {
  font-size: 3rem;
  opacity: 0.3;
  display: block;
  margin-bottom: 0.75rem;
}

.admin-content .panel-desc {
  font-size: 0.8125rem;
  color: var(--ds-on-surface-variant);
  margin-bottom: 1.25rem;
}

.admin-content .settings-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
  gap: 1.25rem;
}

/* ═══════════════════════════════════════════════════════════════
   M5 P1 · 全站防御性布局补丁（2026-04-23）
   目标：解决长文本溢出、标签未换行、空数据塌陷、表格撑破容器
   原则：尽量低侵入；全局规则只覆盖文本块，结构化能力按属性 hook 启用
   ═══════════════════════════════════════════════════════════════ */

/* —— 全局：文本块默认安全换行（仅作用于纯文本承载元素，避免影响按钮 / icon span）—— */
body main p,
body main li,
body main dd,
body main dt,
body main td,
body main th,
body main blockquote,
body main h1,
body main h2,
body main h3,
body main h4,
body main h5,
body main h6,
body main label,
body main textarea {
  overflow-wrap: anywhere;
  word-break: break-word;
}

/* 字段名默认保持单行，避免“预算范围”等短字段被密度规则压成逐字换行 */
body main [data-field-label],
body main [data-field-name],
body main dt,
body main .field-row > :first-child,
body main .meta-row > :first-child,
body main .kv-row > :first-child {
  white-space: nowrap;
  word-break: keep-all;
  overflow-wrap: normal;
  text-wrap: nowrap;
}

/* 长文本统一换行兜底（按 hook 启用） */
[data-long-text],
.long-text,
.text-clamp-none {
  overflow-wrap: anywhere;
  word-break: break-word;
  white-space: pre-wrap;
}

/* —— 标签 / Chip 容器自动换行（按 hook 启用，避免误伤已有 flex 单行布局）—— */
[data-defensive-wrap="tags"],
.tag-row,
.chip-row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  align-items: center;
}

[data-defensive-wrap="tags"] > *,
.tag-row > *,
.chip-row > * {
  max-width: 100%;
  overflow-wrap: anywhere;
}

/* —— 卡片溢出兜底：定高卡片必须显式声明滚动行为 —— */
.card-clip {
  overflow: hidden;
  text-overflow: ellipsis;
}

.card-scroll {
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}

.card-scroll-x {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

/* —— 表格横向滚动兜底（包裹层）—— */
.table-scroll,
.data-table-wrapper,
.admin-content .data-table-wrapper {
  width: 100%;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

.table-scroll > table,
.data-table-wrapper > table {
  min-width: 100%;
}

/* —— 空数据状态兜底：避免父容器塌陷，造成下方区块上移错位 —— */
body main .empty-state,
.admin-content .empty-state,
[data-empty-state] {
  min-height: 160px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  color: var(--ds-on-surface-variant);
  padding: 1.5rem 1rem;
}

/* —— 字段「上下结构」标准块（按 hook 启用：长文本字段独占整行）—— */
[data-field-stack] {
  display: flex;
  flex-direction: column;
  gap: 0.375rem;
  min-width: 0;
}

[data-field-stack] > [data-field-label] {
  font-size: var(--ds-dt-label);
  color: var(--ds-on-surface-variant);
  font-weight: 600;
  line-height: 1.4;
}

[data-field-stack] > [data-field-value] {
  font-size: var(--ds-dt-body);
  color: var(--ds-on-surface);
  line-height: 1.6;
  overflow-wrap: anywhere;
  word-break: break-word;
  white-space: pre-wrap;
}

/* —— 长文本字段在多列布局中独占整行 —— */
[data-field-stack][data-field-span="full"] {
  grid-column: 1 / -1;
}

/* —— 字段密度分类：固定短字段可紧凑，长文本字段必须独占 —— */
.field-layout-grid,
[data-field-layout="classified"] {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.75rem;
  align-items: stretch;
}

.field-card-short,
[data-field-kind="short"] {
  min-width: 0;
}

.field-card-long,
[data-field-kind="long"],
[data-field-span="full"] {
  grid-column: 1 / -1;
  min-width: 0;
}

.field-card-long [data-field-value],
[data-field-kind="long"] [data-field-value],
.field-card-long p:not([data-field-label]),
[data-field-kind="long"] p:not([data-field-label]) {
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  word-break: break-word;
}

@media (max-width: 980px) {
  .field-layout-grid,
  [data-field-layout="classified"] {
    grid-template-columns: 1fr;
  }
}

/* —— 底部操作栏防遮挡：sticky bottom + 顶部分隔线 —— */
.action-bar-sticky {
  position: sticky;
  bottom: 0;
  z-index: 20;
  background: var(--ds-surface, #f6faf8);
  padding: 0.75rem 0;
  border-top: 1px solid var(--ds-outline-variant);
}

/* —— Flex 子项最小宽度兜底：避免长文本撑破父级 flex 行 —— */
.min-w-0-safe,
[data-flex-shrink-safe] {
  min-width: 0;
}

/* —— 后台数据表行高与对齐统一（防止动态长文本与短状态列错位）—— */
.admin-content .data-table td,
.admin-content .data-table th {
  vertical-align: top;
  word-break: break-word;
  overflow-wrap: anywhere;
}

.admin-content .data-table .col-action {
  white-space: nowrap;
  vertical-align: middle;
}

.admin-content .degraded-notice {
  background: rgba(0, 106, 68, 0.05);
  border: 1px dashed var(--ds-outline-variant);
  border-radius: var(--ds-radius-card);
  padding: 2rem;
  text-align: center;
  color: var(--ds-on-surface-variant);
  font-size: 0.875rem;
}

/* 统一后台 · 移动端响应 */
@media (max-width: 767px) {
  .admin-layout {
    flex-direction: column;
  }

  .admin-sidebar {
    width: 100%;
    min-width: 100%;
    height: auto;
    position: relative;
    top: 0;
    padding: 0.75rem 0;
  }

  .admin-sidebar .sidebar-header {
    display: none;
  }

  .admin-nav {
    flex-direction: row;
    overflow-x: auto;
    padding: 0 0.75rem;
    gap: 4px;
    -webkit-overflow-scrolling: touch;
  }

  .admin-nav .nav-item {
    white-space: nowrap;
    padding: 0.5rem 0.75rem;
    font-size: 0.75rem;
  }

  .admin-nav .nav-divider {
    display: none;
  }

  .admin-content {
    padding: 1rem;
  }
}

/* 个人中心 · 移动端响应 */
@media (max-width: 767px) {
  .profile-layout {
    flex-direction: column;
  }

  .profile-sidebar {
    width: 100%;
    min-width: 100%;
    height: auto;
    position: relative;
    top: 0;
    border-right: none;
    border-bottom: 1px solid var(--ds-outline-variant);
    padding: 0.75rem 0;
  }

  .profile-sidebar .sidebar-user {
    display: none;
  }

  .profile-nav {
    flex-direction: row;
    overflow-x: auto;
    padding: 0 0.75rem;
    gap: 4px;
    -webkit-overflow-scrolling: touch;
  }

  .profile-nav .nav-item {
    white-space: nowrap;
    border-left: none;
    border-bottom: 2px solid transparent;
    border-radius: 0;
    padding: 0.5rem 0.75rem;
    font-size: 0.8125rem;
  }

  .profile-nav .nav-item.active {
    border-bottom-color: var(--ds-primary);
    border-left-color: transparent;
  }

  .profile-content {
    padding: 1rem;
  }
}

/* ── 打印优化 ── */
@media print {
  header, footer, nav, aside,
  .fixed, [class*="sticky"] {
    display: none !important;
  }
  body {
    background: white !important;
    color: black !important;
  }
  .glass-card, .glass-panel {
    background: white !important;
    backdrop-filter: none !important;
    box-shadow: none !important;
    border: 1px solid #ddd !important;
  }
}

/* ═══════════════════════════════════════════════════════════════
   M5 P1 · 阶段 1.5：通用 class 自动防御（2026-04-23）
   目标：无需逐页注入 hook，直接对全站现有通用 class 兜底
   作用范围：所有引入 design-system.css 的页面（桌面 + 移动）
   ═══════════════════════════════════════════════════════════════ */

/* —— 玻璃卡片：默认允许内容自动换行，不再硬截断 —— */
.glass-card,
.glass-panel {
  min-width: 0;
  overflow-wrap: anywhere;
  word-break: break-word;
}

/* —— 玻璃卡片内部：图标列保持单行，文本列允许换行 —— */
.glass-card .material-symbols-outlined,
.glass-panel .material-symbols-outlined {
  flex-shrink: 0;
}

/* —— 通用统计网格：自适应列数，避免在窄屏挤压成乱版 —— */
body main .stat-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
  gap: 0.75rem;
  min-width: 0;
}

body main .stat-grid > * {
  min-width: 0;
  overflow-wrap: anywhere;
}

/* —— 面板段落统一最小宽度 0，避免父级被子节点撑破 —— */
body main .panel-section {
  min-width: 0;
}

/* —— 全站 main 内表格：自动横向滚动兜底 —— */
body main table {
  max-width: 100%;
}

body main .glass-card > table,
body main .panel-section > table {
  display: block;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

/* —— 过滤栏 / 工具栏：自动换行，避免溢出版心 —— */
body main .filter-bar,
body main .toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  align-items: center;
  min-width: 0;
}

/* —— 常见标签 / Chip 类自动换行（无需注入 hook）—— */
body main .tag-list,
body main .skill-list,
body main .chip-list,
body main .badge-list,
body main [class*="tag-group"],
body main [class*="chip-group"] {
  display: flex;
  flex-wrap: wrap;
  gap: 0.375rem;
  min-width: 0;
}

body main .tag-list > *,
body main .skill-list > *,
body main .chip-list > *,
body main .badge-list > * {
  max-width: 100%;
  overflow-wrap: anywhere;
}

/* —— Flex 行内：第一列图标 + 第二列文本，第二列默认 min-width:0 防溢出 —— */
body main .flex > .flex-1,
body main .flex > [class*="grow"] {
  min-width: 0;
}

/* —— 强制 truncate 必须配 min-width:0 才能在 flex 里生效 —— */
body main .truncate {
  min-width: 0;
}

/* —— 个人中心 / 后台主内容区：右侧面板防溢出 —— */
.profile-content,
.admin-content {
  min-width: 0;
}

.profile-content > *,
.admin-content > * {
  min-width: 0;
}

/* —— 桌面端：长描述段落强制换行（不影响标题与按钮）—— */
body main .glass-card p,
body main .glass-card .description,
body main .glass-card [class*="desc"] {
  overflow-wrap: anywhere;
  word-break: break-word;
}

/* —— 后台数据表外包层：所有 .data-table 自动获得横向滚动 —— */
.admin-content > .data-table,
.admin-content .panel-section > .data-table {
  display: block;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

/* ═══════════════════════════════════════════════════════════════
   M5 P1 · 阶段 1.6：窄视口 grid 自动降列（2026-04-23）
   命中静态审计 R4-grid-fixed-cols：50+ 处硬编码 grid-cols-N
   不破坏桌面 (>= 1024px) 设计稿，仅在窄屏自动降列防错位
   ═══════════════════════════════════════════════════════════════ */

/* 平板及以下：≥4 列的 grid 自动降为 auto-fit minmax(220px,1fr) */
@media (max-width: 1023px) {
  body main .grid.grid-cols-4,
  body main .grid.grid-cols-5,
  body main .grid.grid-cols-6,
  body main .grid.grid-cols-7,
  body main .grid.grid-cols-8,
  body main .grid.grid-cols-9,
  body main .grid.grid-cols-10,
  body main .grid.grid-cols-11,
  body main .grid.grid-cols-12 {
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)) !important;
  }
}

/* 手机及以下：≥3 列的 grid 自动降为 auto-fit minmax(160px,1fr) */
@media (max-width: 767px) {
  body main .grid.grid-cols-3,
  body main .grid.grid-cols-4,
  body main .grid.grid-cols-5,
  body main .grid.grid-cols-6,
  body main .grid.grid-cols-7,
  body main .grid.grid-cols-8,
  body main .grid.grid-cols-9,
  body main .grid.grid-cols-10,
  body main .grid.grid-cols-11,
  body main .grid.grid-cols-12 {
    grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)) !important;
  }
}

/* M5 P4 - PC full-site density and navigation baseline, 2026-04-28 */
@media (min-width: 1024px) {
  body[data-terminal="desktop"][data-pc-density="20260428"] {
    --ds-section-gap-dt: 1rem;
    --ds-card-padding-dt: 1rem;
    --ds-radius-card: 0.75rem;
    line-height: 1.5;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main {
    padding-bottom: var(--ds-page-bottom-padding, 2rem);
  }

  body[data-terminal="desktop"][data-pc-density="20260428"]:not([data-page-scope="public"]) main > .max-w-5xl,
  body[data-terminal="desktop"][data-pc-density="20260428"]:not([data-page-scope="public"]) main > .max-w-6xl,
  body[data-terminal="desktop"][data-pc-density="20260428"]:not([data-page-scope="public"]) main > .max-w-7xl,
  body[data-terminal="desktop"][data-pc-density="20260428"]:not([data-page-scope="public"]) main > [class*="max-w-"] {
    max-width: min(100%, 1480px) !important;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main .glass-card,
  body[data-terminal="desktop"][data-pc-density="20260428"] main .glass-panel,
  body[data-terminal="desktop"][data-pc-density="20260428"] main .panel-section,
  body[data-terminal="desktop"][data-pc-density="20260428"] main section[class*="rounded-"],
  body[data-terminal="desktop"][data-pc-density="20260428"] main article[class*="rounded-"] {
    padding: clamp(0.875rem, 1vw, 1.125rem) !important;
    border-radius: 0.75rem !important;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main [class*="space-y-10"] > :not([hidden]) ~ :not([hidden]),
  body[data-terminal="desktop"][data-pc-density="20260428"] main [class*="space-y-12"] > :not([hidden]) ~ :not([hidden]) {
    margin-top: 1.25rem !important;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main [class*="space-y-6"] > :not([hidden]) ~ :not([hidden]),
  body[data-terminal="desktop"][data-pc-density="20260428"] main [class*="space-y-8"] > :not([hidden]) ~ :not([hidden]) {
    margin-top: 1rem !important;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main [class*="gap-8"],
  body[data-terminal="desktop"][data-pc-density="20260428"] main [class*="gap-10"],
  body[data-terminal="desktop"][data-pc-density="20260428"] main [class*="gap-12"] {
    gap: 1rem !important;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main .p-8 {
    padding: 1.25rem !important;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main .px-8 {
    padding-left: 1.25rem !important;
    padding-right: 1.25rem !important;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main .py-8 {
    padding-top: 1.25rem !important;
    padding-bottom: 1.25rem !important;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main a.text-xs,
  body[data-terminal="desktop"][data-pc-density="20260428"] main button.text-xs,
  body[data-terminal="desktop"][data-pc-density="20260428"] main [role="button"].text-xs {
    font-size: 13px !important;
    line-height: 1.35 !important;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main label,
  body[data-terminal="desktop"][data-pc-density="20260428"] main dt,
  body[data-terminal="desktop"][data-pc-density="20260428"] main [data-field-label] {
    font-size: 12px;
    line-height: 1.35;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main dd,
  body[data-terminal="desktop"][data-pc-density="20260428"] main [data-field-value] {
    font-size: 13px;
    line-height: 1.45;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main dl:not([data-field-layout="stack"]) > div,
  body[data-terminal="desktop"][data-pc-density="20260428"] main .field-row,
  body[data-terminal="desktop"][data-pc-density="20260428"] main .meta-row,
  body[data-terminal="desktop"][data-pc-density="20260428"] main .kv-row {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0.75rem;
    min-width: 0;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main dl:not([data-field-layout="stack"]) > div > dt,
  body[data-terminal="desktop"][data-pc-density="20260428"] main .field-row > :first-child,
  body[data-terminal="desktop"][data-pc-density="20260428"] main .meta-row > :first-child,
  body[data-terminal="desktop"][data-pc-density="20260428"] main .kv-row > :first-child {
    flex: 0 0 auto;
    min-width: max-content;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main dl:not([data-field-layout="stack"]) > div > dd,
  body[data-terminal="desktop"][data-pc-density="20260428"] main .field-row > :last-child,
  body[data-terminal="desktop"][data-pc-density="20260428"] main .meta-row > :last-child,
  body[data-terminal="desktop"][data-pc-density="20260428"] main .kv-row > :last-child {
    flex: 1 1 auto;
    min-width: 0;
    text-align: right;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main .filter-bar,
  body[data-terminal="desktop"][data-pc-density="20260428"] main .toolbar,
  body[data-terminal="desktop"][data-pc-density="20260428"] main [data-filter-bar],
  body[data-terminal="desktop"][data-pc-density="20260428"] main [data-sticky-toolbar],
  body[data-terminal="desktop"][data-pc-density="20260428"] .admin-content .panel-toolbar {
    position: sticky;
    top: calc(var(--xmjy-top-nav-height, 64px) + 8px);
    z-index: 35;
    padding: 0.75rem 0;
    background: rgba(246, 250, 248, 0.9);
    backdrop-filter: blur(18px);
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main table th,
  body[data-terminal="desktop"][data-pc-density="20260428"] main table td {
    padding: 0.625rem 0.75rem;
    font-size: 13px;
    line-height: 1.45;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main table thead th {
    position: sticky;
    top: 0;
    z-index: 5;
    background: rgba(246, 250, 248, 0.96);
  }

  body[data-terminal="desktop"][data-page-scope="admin"]:not([data-page-code="admin_01_dashboard"]) aside.fixed.left-0,
  body[data-terminal="desktop"][data-page-scope="admin"]:not([data-page-code="admin_01_dashboard"]) aside[class*="fixed"][class*="left-0"],
  body[data-terminal="desktop"][data-page-scope="admin"]:not([data-page-code="admin_01_dashboard"]) header[class*="fixed"],
  body[data-terminal="desktop"][data-page-scope="admin"]:not([data-page-code="admin_01_dashboard"]) nav[class*="fixed"][class*="top-0"] {
    display: none !important;
    visibility: hidden !important;
  }

  body[data-terminal="desktop"][data-page-scope="admin"]:not([data-page-code="admin_01_dashboard"]) main {
    margin-left: 0 !important;
    padding-left: clamp(1rem, 2vw, 1.5rem) !important;
    padding-right: clamp(1rem, 2vw, 1.5rem) !important;
    max-width: 100% !important;
  }

  body[data-terminal="desktop"][data-page-code*="project_detail"] aside.fixed.left-0,
  body[data-terminal="desktop"][data-page-code*="project_detail"] aside[class*="fixed"][class*="left-0"] {
    display: none !important;
    visibility: hidden !important;
  }

  body[data-terminal="desktop"][data-page-code*="project_detail"] main {
    margin-left: 0 !important;
    padding-left: clamp(1rem, 2vw, 1.5rem) !important;
    max-width: 100% !important;
  }

  body[data-embed-mode="true"] .sidebar-standard,
  body[data-embed-mode="true"] .sidebar-dark,
  body[data-embed-mode="true"] [data-unified-top-nav="true"],
  body[data-embed-mode="true"] [class*="breadcrumb"] {
    display: none !important;
    visibility: hidden !important;
  }
}

/* 20260505 - Plan33 strip de-duplication and proposal form width guard. */
@media (min-width: 1024px) {
  body[data-terminal="desktop"] > main[data-field-layout="classified"] {
    display: block !important;
    grid-template-columns: none !important;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"] main > [data-plan33-strip] {
    width: 100%;
    max-width: 100%;
    grid-column: 1 / -1;
  }

  body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] > main {
    width: min(calc(100vw - 64px), 1680px) !important;
    max-width: min(calc(100vw - 64px), 1680px) !important;
    margin-left: auto !important;
    margin-right: auto !important;
    padding-left: clamp(1.25rem, 2.2vw, 2rem) !important;
    padding-right: clamp(1.25rem, 2.2vw, 2rem) !important;
  }

  body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] [data-proposal-layout="20260505"] {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) minmax(340px, 380px) !important;
    align-items: start !important;
    gap: 1.25rem !important;
  }

  body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] [data-proposal-form-column],
  body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] [data-proposal-sidecard] {
    grid-column: auto !important;
    min-width: 0;
  }

  body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] [data-proposal-sidecard] {
    width: 100%;
    max-width: 380px;
    justify-self: stretch;
    top: calc(var(--xmjy-top-nav-height, 64px) + 16px) !important;
  }

  body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] [data-project-title-block] {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) !important;
    justify-items: start !important;
    align-items: start !important;
    text-align: left !important;
  }

  body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] [data-project-title-block] > * {
    grid-column: 1 / -1 !important;
    justify-self: start !important;
    text-align: left !important;
    max-width: 100% !important;
  }

  body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] [data-proposal-sidecard] h3 {
    display: block !important;
    margin-top: 0.35rem !important;
    text-align: left !important;
    font-size: clamp(1.08rem, 1.05vw, 1.32rem) !important;
    line-height: 1.24 !important;
    overflow-wrap: break-word;
    word-break: normal;
    text-wrap: auto;
  }
}

@media (max-width: 1279px) {
  body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] [data-proposal-layout="20260505"] {
    grid-template-columns: minmax(0, 1fr) !important;
  }

  body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] [data-proposal-sidecard] {
    position: static !important;
    max-width: none;
  }
}

/* 20260505 - Field display unification: avoid hard clipping on business fields. */
body main [data-field-row] {
  display: grid;
  grid-template-columns: minmax(5.5rem, max-content) minmax(0, 1fr);
  gap: 0.35rem 0.75rem;
  align-items: start;
  min-width: 0;
}

body main [data-field-row][data-field-kind="short"],
body main [data-field-row][data-field-kind="metric"],
body main [data-field-row][data-field-kind="money"],
body main [data-field-row][data-field-kind="status"] {
  align-items: center;
}

body main [data-field-label] {
  color: var(--md-sys-color-outline, #6b7870);
  font-weight: 700;
  min-width: 0;
  white-space: nowrap;
  word-break: keep-all;
}

body main [data-field-value],
body main [data-field-text],
body main [data-field-kind] > p,
body main [data-field-kind] > span {
  min-width: 0;
  max-width: 100%;
  overflow-wrap: break-word;
  word-break: normal;
}

body main [data-field-kind="long"],
body main [data-field-span="full"],
body main [data-field-panel="long-text-group"] > [data-field-kind="long"] {
  grid-column: 1 / -1;
}

body main [data-field-kind="long"] textarea,
body main textarea[data-field-kind="long"] {
  width: 100%;
  line-height: 1.65;
  resize: vertical;
  white-space: pre-wrap;
  overflow-wrap: break-word;
  word-break: normal;
}

body main [data-field-kind="metric"],
body main [data-field-kind="money"],
body main [data-field-kind="duration"] {
  overflow: visible;
}

body main [data-field-value].truncate,
body main [data-field-text].truncate,
body main [data-field-kind="long"].truncate {
  overflow: visible !important;
  text-overflow: clip !important;
  white-space: normal !important;
}

body main [data-field-preview="true"].truncate,
body main [data-field-preview="true"] .truncate {
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
}

body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] [data-field-panel="project-summary"] {
  overflow: visible;
}

body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] [data-field-panel="compact-metrics"] [data-field-kind] {
  min-width: 0;
  overflow: visible;
}

body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] [data-field-panel="compact-metrics"] {
  grid-template-columns: minmax(0, 1fr) !important;
}

body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] [data-field-panel="compact-metrics"] [data-field-kind] {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
}

body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] [data-field-panel="compact-metrics"] [data-field-kind] > span:last-child {
  white-space: nowrap;
  overflow-wrap: normal;
  word-break: keep-all;
}

body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] [data-proposal-sidecard] [data-field-row] {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.85rem;
}

body[data-terminal="desktop"][data-page-code="provider_02_submit_proposal"] [data-proposal-sidecard] [data-field-value] {
  white-space: nowrap;
  overflow-wrap: normal;
  word-break: keep-all;
}

/* M5 P4 - 全站底部固定操作栏防遮挡，避免密度规则覆盖页面 pb-* */
@supports selector(body:has(> footer.fixed)) {
  body[data-terminal="desktop"][data-pc-density="20260428"]:has(> footer.fixed[class*="bottom-0"]),
  body[data-terminal="desktop"][data-pc-density="20260428"]:has(> footer[class*="fixed"][class*="bottom-0"]) {
    --ds-page-bottom-padding: 11rem;
  }

  body[data-terminal="desktop"][data-pc-density="20260428"]:has(> footer.fixed[class*="bottom-0"]) main,
  body[data-terminal="desktop"][data-pc-density="20260428"]:has(> footer[class*="fixed"][class*="bottom-0"]) main {
    padding-bottom: var(--ds-page-bottom-padding, 11rem) !important;
  }
}

/* 20260430 project detail correction: avoid doubled top-nav whitespace and sidebar inner scrolling. */
@media (min-width: 1024px) {
  body[data-terminal="desktop"][data-unified-top-nav-offset-applied="true"]:not([data-page-code="public_01_home_landing"]) > main[class*="pt-"],
  body[data-terminal="desktop"][data-unified-top-nav-offset-applied="true"]:not([data-page-code="public_01_home_landing"]) > div[class*="pt-"] {
    padding-top: 12px !important;
  }

  body[data-terminal="desktop"][data-project-detail-layout-standard] main > div:first-child[class*="p-8"] {
    padding-top: 12px !important;
  }

  body[data-terminal="desktop"][data-project-detail-layout-standard] [data-project-detail-summary="compact"] {
    margin-bottom: 0.75rem !important;
    padding: 0.875rem 1rem !important;
  }

  body[data-terminal="desktop"][data-project-detail-layout-standard] [data-project-detail-summary="compact"] > div {
    align-items: center !important;
    gap: 0.75rem !important;
  }

  body[data-terminal="desktop"][data-project-detail-layout-standard] [data-project-detail-summary="compact"] .space-y-2 {
    display: grid !important;
    grid-template-columns: auto minmax(0, 1fr);
    align-items: center;
    column-gap: 0.75rem;
    row-gap: 0.5rem;
    width: 100%;
  }

  body[data-terminal="desktop"][data-project-detail-layout-standard] [data-project-detail-summary="compact"] h1 {
    margin: 0 !important;
    font-size: 1.125rem !important;
    line-height: 1.3 !important;
  }

  body[data-terminal="desktop"][data-project-detail-layout-standard] [data-project-detail-summary="compact"] [data-project-detail-summary-meta] {
    grid-column: 1 / -1;
    margin-top: 0 !important;
  }

  body[data-terminal="desktop"][data-project-detail-layout-standard] [data-project-detail-right-rail="sticky"],
  body[data-terminal="desktop"][data-project-detail-layout-standard] .density-sticky-actions {
    position: sticky;
    top: calc(var(--xmjy-top-nav-height, 64px) + 12px);
    max-height: none !important;
    overflow: visible !important;
    padding-right: 0 !important;
  }

  body[data-terminal="desktop"][data-project-detail-layout-standard] [data-project-detail-progress="compact"] {
    padding: 1rem !important;
  }

  body[data-terminal="desktop"][data-project-detail-layout-standard] [data-project-detail-progress-list] {
    row-gap: 0.75rem !important;
  }

  body[data-terminal="desktop"][data-project-detail-layout-standard] [data-project-detail-right-rail="sticky"] > section,
  body[data-terminal="desktop"][data-project-detail-layout-standard] [data-project-detail-right-rail="sticky"] > div {
    padding: 1rem !important;
  }

  body[data-terminal="desktop"][data-project-detail-layout-standard] [data-project-detail-right-rail="sticky"] .mb-8 {
    margin-bottom: 1rem !important;
  }

  body[data-terminal="desktop"][data-project-detail-layout-standard] [data-project-detail-right-rail="sticky"] .gap-8 {
    gap: 1rem !important;
  }
}
