/* ========== Sourcing & Bidding ========== */
/* ========== 寻源招标新增页 ========== */

/* --- 步骤条 --- */
.bid-steps {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 28px 32px 20px;
  background: #fff;
  border-radius: 8px;
  margin-bottom: 20px;
  box-shadow: 0 1px 3px rgba(0,0,0,.06);
}
.bid-step {
  display: flex;
  align-items: center;
  gap: 8px;
  cursor: pointer;
  padding: 8px 16px;
  border-radius: 20px;
  transition: all .2s;
  white-space: nowrap;
}
.bid-step:hover { background: #fef2f2; }
.bid-step-num {
  width: 28px; height: 28px;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 13px; font-weight: 600;
  background: #f0f0f0; color: #999;
  transition: all .3s;
}
.bid-step.active .bid-step-num {
  background: var(--primary, #e2383e); color: #fff;
  box-shadow: 0 2px 8px rgba(226,56,62,.35);
}
.bid-step.done .bid-step-num {
  background: #52c41a; color: #fff;
}
.bid-step-label { font-size: 14px; color: #666; transition: color .2s; }
.bid-step.active .bid-step-label { color: var(--primary, #e2383e); font-weight: 600; }
.bid-step.done .bid-step-label { color: #52c41a; }
.bid-step-line {
  width: 40px; height: 2px;
  background: #e8e8e8;
  margin: 0 4px;
  transition: background .3s;
}
.bid-step-line.done { background: #52c41a; }
.bid-step-line.active { background: linear-gradient(90deg, #52c41a 50%, var(--primary, #e2383e) 50%); }

/* --- 表单卡片 --- */
.bid-form-card {
  background: #fff;
  border-radius: 8px;
  box-shadow: 0 1px 3px rgba(0,0,0,.06);
  margin-bottom: 20px;
  overflow: hidden;
}
.bid-form-card-header {
  display: flex; align-items: center; gap: 10px;
  padding: 16px 24px;
  border-bottom: 1px solid #f0f0f0;
  font-size: 15px; font-weight: 600; color: #333;
}
.bid-form-card-header svg { color: var(--primary, #e2383e); }
.bid-form-card-body { padding: 24px; }

/* --- 表单行 --- */
.bid-form-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 20px 32px;
}
.bid-form-grid .full { grid-column: 1 / -1; }
.bid-form-group { display: flex; flex-direction: column; gap: 6px; }
.bid-form-label {
  font-size: 13px; color: #555; font-weight: 500;
  display: flex; align-items: center; gap: 4px;
}
.bid-form-label .required { color: var(--primary, #e2383e); font-size: 14px; }
.bid-form-label .tip { color: #999; font-size: 12px; font-weight: 400; }
.bid-form-input,
.bid-form-select,
.bid-form-textarea {
  padding: 9px 12px;
  border: 1px solid #d9d9d9;
  border-radius: 6px;
  font-size: 14px;
  color: #333;
  transition: border-color .2s, box-shadow .2s;
  outline: none;
  background: #fff;
  width: 100%;
  box-sizing: border-box;
}
.bid-form-input:focus,
.bid-form-select:focus,
.bid-form-textarea:focus {
  border-color: var(--primary, #e2383e);
  box-shadow: 0 0 0 3px rgba(226,56,62,.08);
}
.bid-form-input.readonly {
  background: #f5f5f5; color: #888; cursor: not-allowed;
}
.bid-form-input.error,
.bid-form-select.error,
.bid-form-textarea.error {
  border-color: var(--primary, #e2383e);
  box-shadow: 0 0 0 3px rgba(226,56,62,.1);
}
.bid-form-textarea { min-height: 80px; resize: vertical; line-height: 1.6; }
.bid-form-select { appearance: none; background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24'%3E%3Cpath d='M7 10l5 5 5-5z' fill='%23999'/%3E%3C/svg%3E") no-repeat right 12px center; padding-right: 32px; cursor: pointer; }
.bid-form-hint { font-size: 12px; color: #999; margin-top: 2px; }
.bid-form-hint.warn { color: var(--primary, #e2383e); }
.bid-form-hint.info { color: #1890ff; }
.bid-form-error { font-size: 12px; color: var(--primary, #e2383e); margin-top: 2px; display: none; }
.bid-form-group.has-error .bid-form-error { display: block; }

/* 金额输入 */
.bid-input-suffix {
  display: flex; align-items: center;
  border: 1px solid #d9d9d9; border-radius: 6px;
  overflow: hidden; transition: border-color .2s, box-shadow .2s;
}
.bid-input-suffix:focus-within {
  border-color: var(--primary, #e2383e);
  box-shadow: 0 0 0 3px rgba(226,56,62,.08);
}
.bid-input-suffix input {
  flex: 1; border: none; outline: none; padding: 9px 12px;
  font-size: 14px; color: #333; background: transparent;
}
.bid-input-suffix .suffix {
  padding: 9px 12px; background: #fafafa;
  color: #999; font-size: 13px; border-left: 1px solid #d9d9d9;
}

/* --- 标段卡片 --- */
.bid-section-card {
  border: 1px solid #e8e8e8; border-radius: 8px; margin-bottom: 12px;
  overflow: hidden; transition: all .2s;
  background: #fff;
}
.bid-section-card:hover { border-color: #d0d0d0; box-shadow: 0 2px 8px rgba(0,0,0,.04); }
.bid-section-card-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 12px 16px; background: #fafafa; cursor: pointer;
  border-bottom: 1px solid #f0f0f0; transition: background .2s;
  gap: 12px; flex-wrap: wrap;
}
.bid-section-card-header:hover { background: #f5f5f5; }
.bid-section-card-left {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
}
.bid-section-badge {
  display: inline-flex; align-items: center; justify-content: center;
  width: 24px; height: 24px; border-radius: 50%; background: var(--primary, #e2383e);
  color: #fff; font-size: 12px; font-weight: 600; flex-shrink: 0;
}
.bid-section-id {
  font-size: 12px; color: #888; font-family: 'Courier New', monospace;
  background: #f0f0f0; padding: 2px 8px; border-radius: 4px;
}
.bid-section-name-input {
  padding: 5px 10px; border: 1px solid #d9d9d9; border-radius: 4px;
  font-size: 13px; outline: none; width: 180px; transition: border-color .2s;
}
.bid-section-name-input:focus { border-color: var(--primary, #e2383e); }
.bid-section-type-select {
  padding: 5px 8px; border: 1px solid #d9d9d9; border-radius: 4px;
  font-size: 12px; outline: none; background: #fff;
}
.bid-section-card-right {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
}
.bid-section-budget {
  font-size: 13px; color: var(--primary, #e2383e); font-weight: 600;
}
.bid-section-detail-count {
  font-size: 12px; color: #888; background: #f0f0f0; padding: 2px 8px; border-radius: 10px;
}
.bid-section-toggle-icon {
  display: inline-flex; align-items: center; justify-content: center;
  width: 24px; height: 24px; border-radius: 4px; transition: all .25s;
}
.bid-section-toggle-icon.rotated { transform: rotate(180deg); }
.bid-section-card-base {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px 16px;
  padding: 14px 16px; border-bottom: 1px solid #f0f0f0; background: #fcfcfc;
}
.bid-section-field { display: flex; flex-direction: column; gap: 4px; }
.bid-section-field label {
  font-size: 12px; color: #888; font-weight: 500;
}
.bid-section-field input {
  padding: 6px 8px; border: 1px solid #d9d9d9; border-radius: 4px;
  font-size: 13px; outline: none; width: 100%; box-sizing: border-box;
}
.bid-section-field input:focus { border-color: var(--primary, #e2383e); }

/* --- 明细项 --- */
.bid-section-detail {
  max-height: 0; overflow: hidden; transition: max-height .35s ease;
}
.bid-section-detail.open { max-height: 2000px; }
.bid-section-detail-header {
  display: flex; align-items: center; gap: 8px;
  padding: 10px 16px; background: #fff8f8; border-bottom: 1px solid #fde2e2;
  font-size: 13px; font-weight: 500; color: #333;
}
.bid-detail-count-tag {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 18px; height: 18px; border-radius: 9px;
  background: var(--primary, #e2383e); color: #fff; font-size: 11px;
  padding: 0 5px; font-weight: 600;
}
.bid-detail-table {
  width: 100%; border-collapse: collapse; font-size: 12px;
}
.bid-detail-table th {
  background: #fafafa; color: #666; font-weight: 500;
  padding: 8px 8px; text-align: left; border-bottom: 1px solid #f0f0f0;
  white-space: nowrap; font-size: 12px;
}
.bid-detail-table td {
  padding: 6px 6px; border-bottom: 1px solid #f5f5f5; color: #333;
  vertical-align: middle;
}
.bid-detail-table tr:hover td { background: #fffbfb; }
.bid-detail-table input {
  padding: 4px 6px; border: 1px solid #e0e0e0; border-radius: 3px;
  font-size: 12px; outline: none; width: 100%; box-sizing: border-box;
  transition: border-color .2s;
}
.bid-detail-table input:focus { border-color: var(--primary, #e2383e); }
.bid-detail-summary td {
  padding: 10px 8px; background: #fafafa; border-top: 2px solid #e8e8e8;
  font-size: 13px;
}

.bid-btn-sm { padding: 4px 10px; font-size: 12px; }
.bid-btn-outline {
  background: #fff; color: var(--primary, #e2383e);
  border: 1px solid var(--primary, #e2383e); display: inline-flex;
  align-items: center; gap: 4px; border-radius: 4px; cursor: pointer;
  transition: all .2s;
}
.bid-btn-outline:hover { background: var(--primary, #e2383e); color: #fff; }

.bid-add-row {
  display: flex; align-items: center; justify-content: center; gap: 6px;
  padding: 12px; cursor: pointer; color: var(--primary, #e2383e);
  font-size: 13px; border: 1px dashed #d9d9d9; border-radius: 6px;
  margin-top: 12px; transition: all .2s;
}
.bid-add-row:hover { border-color: var(--primary, #e2383e); background: #fff8f8; }
.bid-del-row {
  color: #999; cursor: pointer; font-size: 12px;
  padding: 4px 8px; border-radius: 4px; border: 1px solid #e8e8e8;
  transition: all .2s; background: #fff;
}
.bid-del-row:hover { color: var(--primary, #e2383e); border-color: var(--primary, #e2383e); }

/* --- 供应商选择 --- */
.bid-supplier-search {
  display: flex; gap: 12px; margin-bottom: 16px;
}
.bid-supplier-search input {
  flex: 1; padding: 9px 12px; border: 1px solid #d9d9d9; border-radius: 6px;
  font-size: 14px; outline: none;
}
.bid-supplier-search input:focus { border-color: var(--primary, #e2383e); box-shadow: 0 0 0 3px rgba(226,56,62,.08); }

.bid-supplier-list {
  display: grid; grid-template-columns: 1fr 1fr; gap: 12px;
  max-height: 400px; overflow-y: auto;
}
.bid-supplier-item {
  display: flex; align-items: center; gap: 12px;
  padding: 14px 16px; border: 1px solid #e8e8e8; border-radius: 8px;
  cursor: pointer; transition: all .2s;
}
.bid-supplier-item:hover { border-color: #e8a8ab; background: #fff8f8; }
.bid-supplier-item.selected { border-color: var(--primary, #e2383e); background: #fff5f5; box-shadow: 0 0 0 1px var(--primary, #e2383e); }
.bid-supplier-check {
  width: 20px; height: 20px; border-radius: 50%;
  border: 2px solid #d9d9d9; display: flex; align-items: center; justify-content: center;
  transition: all .2s; flex-shrink: 0;
}
.bid-supplier-item.selected .bid-supplier-check {
  background: var(--primary, #e2383e); border-color: var(--primary, #e2383e);
}
.bid-supplier-info { flex: 1; min-width: 0; }
.bid-supplier-name { font-size: 14px; font-weight: 500; color: #333; margin-bottom: 4px; }
.bid-supplier-meta { font-size: 12px; color: #999; display: flex; gap: 12px; flex-wrap: wrap; }
.bid-supplier-tag {
  display: inline-block; padding: 1px 6px; border-radius: 3px;
  font-size: 11px; margin-left: 4px;
}
.bid-supplier-tag.cert { background: #f6ffed; color: #52c41a; border: 1px solid #b7eb8f; }
.bid-supplier-tag.gold { background: #fff7e6; color: #fa8c16; border: 1px solid #ffd591; }

.bid-invited-list {
  margin-top: 16px; padding-top: 16px; border-top: 1px solid #f0f0f0;
}
.bid-invited-title { font-size: 13px; color: #666; margin-bottom: 8px; display: flex; align-items: center; gap: 6px; }
.bid-invited-title span { color: var(--primary, #e2383e); font-weight: 600; }
.bid-invited-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.bid-invited-chip {
  display: flex; align-items: center; gap: 6px;
  padding: 6px 12px; background: #fff5f5; border: 1px solid #fecaca;
  border-radius: 20px; font-size: 13px; color: #333;
}
.bid-invited-chip .remove {
  cursor: pointer; color: #999; font-size: 16px; line-height: 1;
  transition: color .2s;
}
.bid-invited-chip .remove:hover { color: var(--primary, #e2383e); }

/* --- 阶段计划 --- */
.bid-stage-grid {
  display: grid; grid-template-columns: 1fr 1fr; gap: 20px 32px;
}
.bid-stage-grid .full { grid-column: 1 / -1; }

/* --- 寻源规则设置 --- */
.bid-rule-grid {
  display: grid; grid-template-columns: 1fr 1fr; gap: 20px 32px;
}
.bid-radio-group {
  display: flex; gap: 24px; align-items: center; height: 40px;
}
.bid-radio {
  display: flex; align-items: center; gap: 6px; cursor: pointer;
  font-size: 14px; color: #333; user-select: none;
}
.bid-radio input[type="radio"] {
  appearance: none; width: 16px; height: 16px; border: 2px solid #d9d9d9;
  border-radius: 50%; cursor: pointer; position: relative; transition: all .2s;
  flex-shrink: 0;
}
.bid-radio input[type="radio"]:checked {
  border-color: var(--primary, #e2383e);
}
.bid-radio input[type="radio"]:checked::after {
  content: ''; position: absolute; top: 3px; left: 3px;
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--primary, #e2383e);
}
.bid-radio input[type="radio"]:hover {
  border-color: var(--primary, #e2383e);
}
.bid-form-select {
  width: 100%; height: 40px; border: 1px solid #d9d9d9; border-radius: 6px;
  padding: 0 12px; font-size: 14px; color: #333; background: #fff;
  cursor: pointer; transition: border-color .2s; appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 12px center;
}
.bid-form-select:focus {
  border-color: var(--primary, #e2383e);
  box-shadow: 0 0 0 3px rgba(226,56,62,.1);
  outline: none;
}

.bid-time-tip {
  padding: 10px 16px; background: #fff7e6; border: 1px solid #ffe58f;
  border-radius: 6px; font-size: 13px; color: #d48806; margin-bottom: 20px;
  display: flex; align-items: center; gap: 8px;
}

/* --- 附件区 --- */
.bid-attachment-area {
  border: 2px dashed #d9d9d9; border-radius: 8px;
  padding: 40px 20px; text-align: center; cursor: pointer;
  transition: all .2s;
}
.bid-attachment-area:hover { border-color: var(--primary, #e2383e); background: #fff8f8; }
.bid-attachment-area.dragover { border-color: var(--primary, #e2383e); background: #fff5f5; }
.bid-attachment-icon { color: #bbb; margin-bottom: 12px; }
.bid-attachment-text { font-size: 14px; color: #666; margin-bottom: 4px; }
.bid-attachment-hint { font-size: 12px; color: #999; }
.bid-attachment-list { margin-top: 16px; }
.bid-attachment-item {
  display: flex; align-items: center; gap: 12px;
  padding: 12px 16px; border: 1px solid #f0f0f0; border-radius: 6px;
  margin-bottom: 8px; transition: background .2s;
}
.bid-attachment-item:hover { background: #fafafa; }
.bid-attachment-file-icon {
  width: 36px; height: 36px; border-radius: 6px;
  display: flex; align-items: center; justify-content: center;
  font-size: 11px; font-weight: 600; color: #fff; flex-shrink: 0;
}
.bid-attachment-file-icon.pdf { background: #e2383e; }
.bid-attachment-file-icon.doc { background: #1890ff; }
.bid-attachment-file-icon.xls { background: #52c41a; }
.bid-attachment-file-icon.img { background: #722ed1; }
.bid-attachment-file-icon.zip { background: #fa8c16; }
.bid-attachment-file-info { flex: 1; min-width: 0; }
.bid-attachment-file-name { font-size: 13px; color: #333; font-weight: 500; }
.bid-attachment-file-meta { font-size: 12px; color: #999; margin-top: 2px; }
.bid-attachment-file-del {
  cursor: pointer; color: #999; padding: 4px 8px; border-radius: 4px;
  transition: all .2s; font-size: 12px;
}
.bid-attachment-file-del:hover { color: var(--primary, #e2383e); background: #fff5f5; }

/* --- 底部操作栏 --- */
.bid-bottom-bar {
  position: sticky; bottom: 0; z-index: 10;
  background: #fff; border-top: 1px solid #f0f0f0;
  padding: 16px 24px; display: flex; align-items: center; justify-content: space-between;
  box-shadow: 0 -2px 8px rgba(0,0,0,.06);
  border-radius: 8px; margin-top: 8px;
}
.bid-bottom-left { display: flex; align-items: center; gap: 12px; }
.bid-bottom-right { display: flex; align-items: center; gap: 12px; }
.bid-btn {
  padding: 9px 24px; border-radius: 6px; font-size: 14px; font-weight: 500;
  cursor: pointer; transition: all .2s; border: none; outline: none;
  display: inline-flex; align-items: center; gap: 6px;
}
.bid-btn-primary {
  background: var(--primary, #e2383e); color: #fff;
  box-shadow: 0 2px 4px rgba(226,56,62,.25);
}
.bid-btn-primary:hover { background: #c62d32; box-shadow: 0 4px 8px rgba(226,56,62,.35); }
.bid-btn-primary:disabled { background: #ccc; box-shadow: none; cursor: not-allowed; }
.bid-btn-default {
  background: #fff; color: #666; border: 1px solid #d9d9d9;
}
.bid-btn-default:hover { border-color: var(--primary, #e2383e); color: var(--primary, #e2383e); }
.bid-btn-text {
  background: transparent; color: var(--primary, #e2383e); padding: 9px 12px;
}
.bid-btn-text:hover { background: #fff5f5; }

/* --- 面包屑 --- */
.bid-breadcrumb {
  font-size: 13px; color: #999; margin-bottom: 16px;
  display: flex; align-items: center; gap: 6px;
}
.bid-breadcrumb a { color: var(--primary, #e2383e); text-decoration: none; }
.bid-breadcrumb a:hover { text-decoration: underline; }
.bid-breadcrumb .sep { color: #ccc; }

/* --- 步骤内容切换 --- */
.bid-step-content { display: none; animation: bidFadeIn .3s; }
.bid-step-content.active { display: block; }
@keyframes bidFadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }

/* --- Toast --- */
.bid-toast {
  position: fixed; top: 80px; right: 24px; z-index: 9999;
  padding: 12px 20px; border-radius: 8px; font-size: 14px;
  box-shadow: 0 4px 16px rgba(0,0,0,.12);
  transform: translateX(120%); transition: transform .3s;
}
.bid-toast.show { transform: translateX(0); }
.bid-toast.success { background: #f6ffed; color: #52c41a; border: 1px solid #b7eb8f; }
.bid-toast.error { background: #fff2f0; color: #e2383e; border: 1px solid #ffccc7; }
.bid-toast.info { background: #e6f7ff; color: #1890ff; border: 1px solid #91d5ff; }

.bid-product-dropdown {
  position: absolute; top: 100%; left: 0; right: 0; z-index: 100;
  max-height: 200px; overflow-y: auto; background: #fff;
  border: 1px solid #e0e0e0; border-radius: 6px; box-shadow: 0 4px 12px rgba(0,0,0,.1);
}
.bid-product-dropdown-item {
  padding: 8px 12px; cursor: pointer; display: flex; justify-content: space-between;
  align-items: center; font-size: 13px; gap: 8px;
}
.bid-product-dropdown-item:hover { background: #f5f5f5; }
.bid-product-name { color: #333; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bid-product-sku { color: #999; font-size: 12px; flex-shrink: 0; }

/* --- Responsive --- */
@media (max-width: 900px) {
  .bid-form-grid { grid-template-columns: 1fr; }
  .bid-stage-grid { grid-template-columns: 1fr; }
  .bid-rule-grid { grid-template-columns: 1fr; }
  .bid-supplier-list { grid-template-columns: 1fr; }
  .bid-steps { padding: 16px; flex-wrap: wrap; gap: 4px; }
  .bid-step-line { width: 20px; }
  .bid-section-card-base { grid-template-columns: 1fr; }
  .bid-section-card-header { flex-direction: column; align-items: flex-start; }
  .bid-section-card-right { width: 100%; justify-content: flex-end; }
  .bid-detail-table { font-size: 11px; }
  .bid-detail-table th, .bid-detail-table td { padding: 5px 4px; }
}
@media (max-width: 640px) {
  .bid-form-card-body { padding: 16px; }
  .bid-bottom-bar { flex-direction: column; gap: 12px; }
  .bid-bottom-left, .bid-bottom-right { width: 100%; justify-content: center; }
  .bid-step-label { font-size: 12px; }
  .bid-section-name-input { width: 140px; }
}

/* ===== 寻源招标列表页 ===== */
.bl-page { min-height: 100vh; }

/* 统计卡片 */
.bl-stats {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 16px;
  margin-bottom: 20px;
}
.bl-stat-card {
  background: #fff;
  border-radius: 8px;
  padding: 18px 20px;
  display: flex;
  align-items: center;
  gap: 14px;
  border: 1px solid #f0f0f0;
  transition: box-shadow .2s, transform .2s;
}
.bl-stat-card:hover {
  box-shadow: 0 4px 12px rgba(0,0,0,.08);
  transform: translateY(-2px);
}
.bl-stat-icon {
  width: 44px; height: 44px;
  border-radius: 10px;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
}
.bl-stat-icon svg { width: 22px; height: 22px; fill: #fff; }
.bl-stat-icon.all { background: linear-gradient(135deg, #e2383e, #ff6b6b); }
.bl-stat-icon.publish { background: linear-gradient(135deg, #1890ff, #69c0ff); }
.bl-stat-icon.review { background: linear-gradient(135deg, #fa8c16, #ffc53d); }
.bl-stat-icon.done { background: linear-gradient(135deg, #52c41a, #95de64); }
.bl-stat-icon.end { background: linear-gradient(135deg, #8c8c8c, #bfbfbf); }
.bl-stat-info { flex: 1; }
.bl-stat-num { font-size: 24px; font-weight: 700; color: var(--text-primary); line-height: 1.2; }
.bl-stat-label { font-size: 13px; color: var(--text-secondary); margin-top: 2px; }

/* Tab栏 */
.bl-tabs {
  display: flex;
  align-items: center;
  gap: 0;
  background: #fff;
  border-radius: 8px;
  padding: 0 4px;
  margin-bottom: 16px;
  border: 1px solid #f0f0f0;
  overflow-x: auto;
}
.bl-tab {
  padding: 12px 20px;
  font-size: 14px;
  color: var(--text-secondary);
  cursor: pointer;
  white-space: nowrap;
  border-bottom: 2px solid transparent;
  transition: color .2s, border-color .2s;
  position: relative;
}
.bl-tab:hover { color: var(--primary); }
.bl-tab.active {
  color: var(--primary);
  border-bottom-color: var(--primary);
  font-weight: 600;
}
.bl-tab-badge {
  position: absolute;
  top: 6px; right: 6px;
  background: var(--primary);
  color: #fff;
  font-size: 10px;
  font-weight: 600;
  min-width: 16px; height: 16px;
  border-radius: 8px;
  display: flex; align-items: center; justify-content: center;
  padding: 0 4px;
}

/* 工具栏 */
.bl-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 16px;
  flex-wrap: wrap;
  gap: 12px;
}
.bl-toolbar-left { display: flex; align-items: center; gap: 10px; }
.bl-toolbar-right { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.bl-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 16px;
  border-radius: 6px;
  font-size: 13px;
  cursor: pointer;
  border: 1px solid #d9d9d9;
  background: #fff;
  color: var(--text-primary);
  transition: all .2s;
  white-space: nowrap;
}
.bl-btn:hover { border-color: var(--primary); color: var(--primary); }
.bl-btn svg { width: 14px; height: 14px; fill: currentColor; }
.bl-btn-primary {
  background: var(--primary);
  color: #fff;
  border-color: var(--primary);
}
.bl-btn-primary:hover {
  background: #c62a2f;
  border-color: #c62a2f;
  color: #fff;
}
.bl-btn-outline-primary {
  color: var(--primary);
  border-color: var(--primary);
}
.bl-btn-outline-primary:hover {
  background: #fff1f0;
}

/* 筛选栏 */
.bl-filter {
  background: #fff;
  border-radius: 8px;
  padding: 16px 20px;
  margin-bottom: 16px;
  border: 1px solid #f0f0f0;
}
.bl-filter-row {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 10px;
}
.bl-filter-row:last-child { margin-bottom: 0; }
.bl-filter-item {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
}
.bl-filter-label {
  color: var(--text-secondary);
  white-space: nowrap;
}
.bl-filter-input,
.bl-filter-select {
  padding: 6px 10px;
  border: 1px solid #d9d9d9;
  border-radius: 4px;
  font-size: 13px;
  outline: none;
  transition: border-color .2s;
}
.bl-filter-input:focus,
.bl-filter-select:focus {
  border-color: var(--primary);
  box-shadow: 0 0 0 2px rgba(226,56,62,.1);
}
.bl-filter-input { width: 200px; }
.bl-filter-select { width: 140px; }
.bl-filter-date { width: 150px; }
.bl-search-input {
  width: 260px;
  padding: 7px 12px 7px 34px;
  border: 1px solid #d9d9d9;
  border-radius: 6px;
  font-size: 13px;
  outline: none;
  transition: border-color .2s;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='%23999'%3E%3Cpath d='M15.5 14h-.79l-.28-.27A6.47 6.47 0 0016 9.5 6.5 6.5 0 109.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z'/%3E%3C/svg%3E") 10px center no-repeat;
}
.bl-search-input:focus {
  border-color: var(--primary);
  box-shadow: 0 0 0 2px rgba(226,56,62,.1);
}

/* 表格 */
.bl-table-wrap {
  background: #fff;
  border-radius: 8px;
  border: 1px solid #f0f0f0;
  overflow: hidden;
}
.bl-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}
.bl-table th {
  background: #fafafa;
  padding: 12px 14px;
  text-align: left;
  font-weight: 600;
  color: var(--text-secondary);
  border-bottom: 1px solid #f0f0f0;
  white-space: nowrap;
}
.bl-table td {
  padding: 14px 14px;
  border-bottom: 1px solid #f5f5f5;
  color: var(--text-primary);
  vertical-align: top;
}
.bl-table tbody tr:hover { background: #fafafa; }
.bl-table tbody tr:last-child td { border-bottom: none; }

/* 项目信息 */
.bl-project-info {
  display: flex;
  align-items: flex-start;
  gap: 12px;
}
.bl-project-icon {
  width: 40px; height: 40px;
  border-radius: 8px;
  display: flex; align-items: center; justify-content: center;
  flex-shrink: 0;
  font-size: 16px; font-weight: 700; color: #fff;
}
.bl-project-icon.goods { background: linear-gradient(135deg, #e2383e, #ff6b6b); }
.bl-project-icon.service { background: linear-gradient(135deg, #1890ff, #69c0ff); }
.bl-project-icon.engineering { background: linear-gradient(135deg, #fa8c16, #ffc53d); }
.bl-project-icon.mixed { background: linear-gradient(135deg, #722ed1, #b37feb); }
.bl-project-detail { flex: 1; min-width: 0; }
.bl-project-name {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-primary);
  margin-bottom: 4px;
  cursor: pointer;
  transition: color .2s;
}
.bl-project-name:hover { color: var(--primary); }
.bl-project-id {
  font-size: 12px;
  color: var(--text-secondary);
  font-family: 'Courier New', monospace;
}
.bl-project-tags { display: flex; gap: 6px; margin-top: 6px; flex-wrap: wrap; }

/* 标签 */
.bl-tag {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  border-radius: 3px;
  font-size: 11px;
  font-weight: 500;
  white-space: nowrap;
}
.bl-tag-red { background: #fff1f0; color: #cf1322; border: 1px solid #ffa39e; }
.bl-tag-blue { background: #e6f7ff; color: #096dd9; border: 1px solid #91d5ff; }
.bl-tag-orange { background: #fff7e6; color: #d46b08; border: 1px solid #ffd591; }
.bl-tag-green { background: #f6ffed; color: #389e0d; border: 1px solid #b7eb8f; }
.bl-tag-purple { background: #f9f0ff; color: #531dab; border: 1px solid #d3adf7; }
.bl-tag-gray { background: #fafafa; color: #8c8c8c; border: 1px solid #d9d9d9; }

/* 状态标签 */
.bl-status {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 13px;
  font-weight: 500;
}
.bl-status-dot {
  width: 7px; height: 7px;
  border-radius: 50%;
  flex-shrink: 0;
}
.bl-status-dot.publish { background: #1890ff; }
.bl-status-dot.review { background: #fa8c16; animation: pulse 1.5s infinite; }
.bl-status-dot.bidding { background: #e2383e; animation: pulse 1.5s infinite; }
.bl-status-dot.evaluating { background: #722ed1; animation: pulse 1.5s infinite; }
.bl-status-dot.done { background: #52c41a; }
.bl-status-dot.cancelled { background: #8c8c8c; }
.bl-status-dot.draft { background: #bfbfbf; }
@keyframes pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: .4; }
}

/* 标段进度 */
.bl-sections {
  display: flex;
  gap: 4px;
  align-items: center;
  flex-wrap: wrap;
}
.bl-section-dot {
  width: 22px; height: 22px;
  border-radius: 4px;
  display: flex; align-items: center; justify-content: center;
  font-size: 10px; font-weight: 600; color: #fff;
  background: #d9d9d9;
}
.bl-section-dot.active { background: var(--primary); }
.bl-section-dot.done { background: #52c41a; }
.bl-section-dot.pending { background: #fa8c16; }
.bl-section-count {
  font-size: 12px;
  color: var(--text-secondary);
  margin-left: 4px;
}

/* 金额 */
.bl-amount {
  font-weight: 600;
  color: var(--primary);
}
.bl-amount-small {
  font-size: 12px;
  color: var(--text-secondary);
  font-weight: 400;
}

/* 操作 */
.bl-actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}
.bl-action-link {
  font-size: 12px;
  color: var(--primary);
  cursor: pointer;
  white-space: nowrap;
  transition: color .2s;
}
.bl-action-link:hover { color: #c62a2f; text-decoration: underline; }
.bl-action-link.disabled {
  color: #bfbfbf;
  cursor: not-allowed;
}
.bl-action-link.disabled:hover { text-decoration: none; }

/* 时间信息 */
.bl-time {
  font-size: 13px;
  color: var(--text-primary);
}
.bl-time-hint {
  font-size: 12px;
  color: var(--text-secondary);
  margin-top: 2px;
}
.bl-time-urgent {
  color: var(--primary);
  font-weight: 500;
}

/* 全选操作栏 */
.bl-batch-bar {
  display: none;
  align-items: center;
  gap: 16px;
  padding: 10px 20px;
  background: linear-gradient(135deg, #fff1f0, #fff5f5);
  border: 1px solid #ffa39e;
  border-radius: 8px;
  margin-bottom: 16px;
  font-size: 13px;
}
.bl-batch-bar.show { display: flex; }
.bl-batch-count { color: var(--primary); font-weight: 600; }

/* 分页 */
.bl-pagination {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
  padding: 16px 0;
}
.bl-page-btn {
  width: 32px; height: 32px;
  border-radius: 6px;
  border: 1px solid #d9d9d9;
  background: #fff;
  display: flex; align-items: center; justify-content: center;
  font-size: 13px;
  cursor: pointer;
  transition: all .2s;
  color: var(--text-primary);
}
.bl-page-btn:hover { border-color: var(--primary); color: var(--primary); }
.bl-page-btn.active {
  background: var(--primary);
  color: #fff;
  border-color: var(--primary);
}
.bl-page-btn.disabled {
  color: #bfbfbf;
  cursor: not-allowed;
  border-color: #f0f0f0;
}
.bl-page-info {
  font-size: 13px;
  color: var(--text-secondary);
  margin-right: 12px;
}

/* 详情Modal */
.bl-modal-overlay {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,.45);
  z-index: 1000;
  justify-content: center;
  align-items: flex-start;
  padding-top: 60px;
  overflow-y: auto;
}
.bl-modal-overlay.show { display: flex; }
.bl-modal {
  background: #fff;
  border-radius: 12px;
  width: 720px;
  max-width: 95vw;
  max-height: calc(100vh - 120px);
  overflow-y: auto;
  animation: slideDown .25s ease;
}
@keyframes slideDown {
  from { opacity: 0; transform: translateY(-20px); }
  to { opacity: 1; transform: translateY(0); }
}
.bl-modal-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 20px 24px;
  border-bottom: 1px solid #f0f0f0;
}
.bl-modal-title { font-size: 16px; font-weight: 600; color: var(--text-primary); }
.bl-modal-close {
  width: 28px; height: 28px;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  cursor: pointer;
  color: var(--text-secondary);
  transition: all .2s;
}
.bl-modal-close:hover { background: #f5f5f5; color: var(--text-primary); }
.bl-modal-body { padding: 24px; }
.bl-modal-footer {
  display: flex;
  justify-content: flex-end;
  gap: 10px;
  padding: 16px 24px;
  border-top: 1px solid #f0f0f0;
}

/* 详情信息 */
.bl-detail-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px 24px;
}
.bl-detail-item {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.bl-detail-label {
  font-size: 12px;
  color: var(--text-secondary);
}
.bl-detail-value {
  font-size: 14px;
  color: var(--text-primary);
}
.bl-detail-section {
  margin-top: 20px;
}
.bl-detail-section-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-primary);
  padding-bottom: 10px;
  border-bottom: 1px solid #f0f0f0;
  margin-bottom: 12px;
}
.bl-detail-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
}
.bl-detail-table th {
  background: #fafafa;
  padding: 8px 10px;
  text-align: left;
  font-weight: 600;
  color: var(--text-secondary);
  border: 1px solid #f0f0f0;
}
.bl-detail-table td {
  padding: 8px 10px;
  border: 1px solid #f0f0f0;
  color: var(--text-primary);
}

/* 空状态 */
.bl-empty {
  text-align: center;
  padding: 60px 20px;
  color: var(--text-secondary);
}
.bl-empty svg { width: 64px; height: 64px; fill: #d9d9d9; margin-bottom: 12px; }
.bl-empty p { font-size: 14px; margin-bottom: 16px; }

/* 响应式 */
@media (max-width: 1200px) {
  .bl-stats { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 900px) {
  .bl-stats { grid-template-columns: repeat(2, 1fr); }
  .bl-toolbar { flex-direction: column; align-items: stretch; }
  .bl-toolbar-left, .bl-toolbar-right { flex-wrap: wrap; }
  .bl-search-input { width: 100%; }
  .bl-detail-grid { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
  .bl-stats { grid-template-columns: 1fr; }
  .bl-tabs { flex-wrap: nowrap; overflow-x: auto; }
  .bl-filter-row { flex-direction: column; align-items: stretch; }
  .bl-filter-input, .bl-filter-select, .bl-filter-date { width: 100%; }
}

/* ========== Bid Detail Page ========== */
.bd-page { background: #f5f5f5; min-height: 100vh; }

/* --- Header --- */
.bd-header {
  background: linear-gradient(135deg, #e2383e 0%, #c62828 100%);
  color: #fff; padding: 24px 32px; position: relative; overflow: hidden;
}
.bd-header::before {
  content: ''; position: absolute; top: -60px; right: -60px;
  width: 200px; height: 200px; border-radius: 50%;
  background: rgba(255,255,255,0.06);
}
.bd-header::after {
  content: ''; position: absolute; bottom: -40px; right: 80px;
  width: 120px; height: 120px; border-radius: 50%;
  background: rgba(255,255,255,0.04);
}
.bd-header-top { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; flex-wrap: wrap; }
.bd-back-btn {
  display: inline-flex; align-items: center; gap: 4px;
  color: rgba(255,255,255,0.9); text-decoration: none; font-size: 14px;
  padding: 6px 12px; border-radius: 6px; transition: background .2s;
}
.bd-back-btn:hover { background: rgba(255,255,255,0.15); }
.bd-header-title { font-size: 22px; font-weight: 700; flex: 1; }
.bd-status-tag {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 16px; border-radius: 20px; font-size: 13px; font-weight: 600;
  background: rgba(255,255,255,0.2); backdrop-filter: blur(4px);
}
.bd-status-dot { width: 8px; height: 8px; border-radius: 50%; background: #4caf50; animation: bdPulse 2s infinite; }
@keyframes bdPulse { 0%,100%{ opacity:1; } 50%{ opacity:.4; } }
.bd-header-meta { display: flex; gap: 24px; font-size: 13px; opacity: .9; flex-wrap: wrap; }
.bd-header-meta span { display: flex; align-items: center; gap: 4px; }

/* --- Progress Steps --- */
.bd-progress {
  background: #fff; border-bottom: 1px solid #eee; padding: 20px 32px;
}
.bd-progress-steps {
  display: flex; align-items: center; justify-content: center; gap: 0; max-width: 800px; margin: 0 auto;
}
.bd-step {
  display: flex; align-items: center; gap: 8px; font-size: 13px; color: #999; white-space: nowrap;
}
.bd-step.done { color: #e2383e; }
.bd-step.active { color: #e2383e; font-weight: 600; }
.bd-step-icon {
  width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
  border: 2px solid #ddd; font-size: 12px; font-weight: 700; color: #999; flex-shrink: 0;
}
.bd-step.done .bd-step-icon { background: #e2383e; border-color: #e2383e; color: #fff; }
.bd-step.active .bd-step-icon { background: #fff; border-color: #e2383e; color: #e2383e; box-shadow: 0 0 0 3px rgba(226,56,62,.15); }
.bd-step-line { width: 40px; height: 2px; background: #eee; flex-shrink: 0; }
.bd-step.done + .bd-step-line { background: #e2383e; }
.bd-step-cancel-icon {
  width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
  background: #999; border: 2px solid #999; color: #fff; font-size: 14px; font-weight: 700; flex-shrink: 0;
}

/* --- Content Layout --- */
.bd-content {
  display: flex; gap: 20px; padding: 20px 0px; max-width: 1400px; margin: 0 auto;
}
.bd-main { flex: 1; min-width: 0; }
.bd-side { width: 320px; flex-shrink: 0; }

/* --- Card --- */
.bd-card {
  background: #fff; border-radius: 10px; margin-bottom: 16px;
  border: 1px solid #f0f0f0; overflow: hidden;
}
.bd-card-header {
  display: flex; align-items: center; gap: 8px; padding: 16px 20px;
  border-bottom: 1px solid #f5f5f5; font-size: 15px; font-weight: 600; color: #333;
}
.bd-card-header svg { color: #e2383e; flex-shrink: 0; }
.bd-card-body { padding: 20px; }

/* --- Info Grid --- */
.bd-info-grid {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px 32px;
}
.bd-info-item { display: flex; flex-direction: column; gap: 4px; }
.bd-info-item.full { grid-column: 1 / -1; }
.bd-info-label { font-size: 12px; color: #999; }
.bd-info-value { font-size: 14px; color: #333; word-break: break-all; }
.bd-info-value.highlight { color: #e2383e; font-weight: 600; }
.bd-info-value .tag {
  display: inline-block; padding: 2px 8px; border-radius: 4px; font-size: 11px; font-weight: 600;
}
.bd-info-value .tag-red { background: #fff5f5; color: #e2383e; }
.bd-info-value .tag-blue { background: #f0f5ff; color: #2b6cb0; }
.bd-info-value .tag-green { background: #f0fff4; color: #38a169; }
.bd-info-value .tag-orange { background: #fffaf0; color: #dd6b20; }
.bd-info-value .tag-gray { background: #f7f7f7; color: #999; }
.bd-info-value .warn-tag {
  display: inline-flex; align-items: center; gap: 4px;
  background: #fff5f5; color: #e2383e; padding: 2px 8px; border-radius: 4px; font-size: 11px;
}

/* --- Rule Grid --- */
.bd-rule-grid {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px 32px;
}
.bd-rule-item {
  display: flex; align-items: center; gap: 8px; font-size: 13px;
}
.bd-rule-label { color: #666; min-width: 0; }
.bd-rule-value { font-weight: 600; color: #333; }
.bd-rule-value.yes { color: #e2383e; }
.bd-rule-value.no { color: #999; }

/* --- Section Table (标段) --- */
.bd-section-card {
  border: 1px solid #f0f0f0; border-radius: 8px; margin-bottom: 12px; overflow: hidden;
}
.bd-section-head {
  display: flex; align-items: center; gap: 10px; padding: 12px 16px;
  background: #fafafa; cursor: pointer; transition: background .2s;
}
.bd-section-head:hover { background: #f5f5f5; }
.bd-section-badge {
  width: 24px; height: 24px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
  background: #e2383e; color: #fff; font-size: 12px; font-weight: 700; flex-shrink: 0;
}
.bd-section-name { font-weight: 600; font-size: 14px; flex: 1; }
.bd-section-meta { font-size: 12px; color: #999; display: flex; gap: 12px; }
.bd-section-arrow {
  transition: transform .3s; color: #999;
}
.bd-section-card.open .bd-section-arrow { transform: rotate(180deg); }
.bd-section-body { padding: 16px; display: none; border-top: 1px solid #f0f0f0; }
.bd-section-card.open .bd-section-body { display: block; }
.bd-section-info {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px 24px;
  margin-bottom: 16px;
}
.bd-section-info-item { font-size: 13px; }
.bd-section-info-item span { color: #999; margin-right: 4px; }

/* Detail Table */
.bd-detail-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.bd-detail-table th {
  background: #fafafa; padding: 8px 10px; text-align: left; font-weight: 600; color: #666;
  border-bottom: 2px solid #f0f0f0; white-space: nowrap;
}
.bd-detail-table td {
  padding: 8px 10px; border-bottom: 1px solid #f5f5f5; color: #333;
}
.bd-detail-table tr:last-child td { border-bottom: none; }
.bd-detail-table .amount { color: #e2383e; font-weight: 600; }
.bd-detail-table .total-row td {
  background: #fafafa; font-weight: 700; border-top: 2px solid #f0f0f0;
}

/* --- Supplier Chips --- */
.bd-supplier-list { display: flex; flex-wrap: wrap; gap: 10px; }
.bd-supplier-chip {
  display: flex; align-items: center; gap: 8px; padding: 10px 14px;
  border: 1px solid #f0f0f0; border-radius: 8px; background: #fafafa; min-width: 200px;
}
.bd-supplier-chip:hover { border-color: #e2383e; background: #fff5f5; }
.bd-supplier-avatar {
  width: 36px; height: 36px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
  font-size: 13px; font-weight: 700; color: #fff; flex-shrink: 0;
}
.bd-supplier-info { flex: 1; min-width: 0; }
.bd-supplier-name { font-size: 13px; font-weight: 600; color: #333; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bd-supplier-tag { font-size: 11px; color: #999; }

/* --- Requirement List --- */
.bd-req-list { display: flex; flex-direction: column; gap: 12px; }
.bd-req-item {
  display: flex; gap: 10px; padding: 12px 14px; border-radius: 8px;
  background: #fafafa; border: 1px solid #f0f0f0;
}
.bd-req-icon {
  width: 32px; height: 32px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
  flex-shrink: 0; font-size: 14px;
}
.bd-req-icon.doc { background: #fff5f5; color: #e2383e; }
.bd-req-icon.shield { background: #f0f5ff; color: #2b6cb0; }
.bd-req-icon.money { background: #fffaf0; color: #dd6b20; }
.bd-req-content { flex: 1; }
.bd-req-title { font-size: 13px; font-weight: 600; color: #333; }
.bd-req-desc { font-size: 12px; color: #999; margin-top: 2px; }

/* --- Attachment List --- */
.bd-attach-list { display: flex; flex-direction: column; gap: 8px; }
.bd-attach-item {
  display: flex; align-items: center; gap: 10px; padding: 10px 14px;
  border: 1px solid #f0f0f0; border-radius: 8px; transition: background .2s; cursor: pointer;
}
.bd-attach-item:hover { background: #fafafa; }
.bd-attach-icon {
  width: 36px; height: 36px; border-radius: 6px; display: flex; align-items: center; justify-content: center;
  font-size: 11px; font-weight: 700; color: #fff; flex-shrink: 0;
}
.bd-attach-icon.pdf { background: #e2383e; }
.bd-attach-icon.xls { background: #38a169; }
.bd-attach-icon.doc { background: #2b6cb0; }
.bd-attach-icon.ppt { background: #dd6b20; }
.bd-attach-icon.zip { background: #718096; }
.bd-attach-info { flex: 1; min-width: 0; }
.bd-attach-name { font-size: 13px; font-weight: 600; color: #333; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bd-attach-meta { font-size: 11px; color: #999; margin-top: 2px; }
.bd-attach-dl { color: #e2383e; font-size: 13px; text-decoration: none; font-weight: 600; }
.bd-attach-dl:hover { text-decoration: underline; }

/* --- Side Cards --- */
.bd-side-card {
  background: #fff; border-radius: 10px; margin-bottom: 16px;
  border: 1px solid #f0f0f0; overflow: hidden;
}
.bd-side-card-header {
  display: flex; align-items: center; gap: 8px; padding: 14px 16px;
  border-bottom: 1px solid #f5f5f5; font-size: 14px; font-weight: 600;
}
.bd-side-card-header svg { color: #e2383e; flex-shrink: 0; }
.bd-side-card-body { padding: 16px; }

/* Timeline */
.bd-timeline { position: relative; padding-left: 24px; }
.bd-timeline::before {
  content: ''; position: absolute; left: 8px; top: 4px; bottom: 4px;
  width: 2px; background: #f0f0f0;
}
.bd-tl-item { position: relative; padding-bottom: 16px; }
.bd-tl-item:last-child { padding-bottom: 0; }
.bd-tl-dot {
  position: absolute; left: -20px; top: 4px; width: 12px; height: 12px;
  border-radius: 50%; background: #ddd; border: 2px solid #fff;
  box-shadow: 0 0 0 2px #ddd;
}
.bd-tl-item.done .bd-tl-dot { background: #e2383e; box-shadow: 0 0 0 2px #e2383e; }
.bd-tl-item.current .bd-tl-dot { background: #fff; border: 3px solid #e2383e; box-shadow: 0 0 0 2px rgba(226,56,62,.2); animation: bdPulse 2s infinite; }
.bd-tl-time { font-size: 11px; color: #999; }
.bd-tl-text { font-size: 13px; color: #333; font-weight: 500; margin-top: 2px; }
.bd-tl-desc { font-size: 12px; color: #999; margin-top: 2px; }

/* Side Info */
.bd-side-info { display: flex; flex-direction: column; gap: 12px; }
.bd-side-info-item { display: flex; justify-content: space-between; font-size: 13px; }
.bd-side-info-label { color: #999; }
.bd-side-info-value { color: #333; font-weight: 500; }
.bd-side-info-value.red { color: #e2383e; font-weight: 700; }

/* Action Buttons */
.bd-side-actions { display: flex; flex-direction: column; gap: 8px; }
.bd-side-btn {
  display: flex; align-items: center; justify-content: center; gap: 6px;
  padding: 10px; border-radius: 8px; font-size: 13px; font-weight: 600;
  border: none; cursor: pointer; transition: all .2s; text-decoration: none;
}
.bd-side-btn.primary { background: #e2383e; color: #fff; }
.bd-side-btn.primary:hover { background: #c62828; }
.bd-side-btn.outline { background: #fff; color: #e2383e; border: 1px solid #e2383e; }
.bd-side-btn.outline:hover { background: #fff5f5; }
.bd-side-btn.ghost { background: #f5f5f5; color: #666; }
.bd-side-btn.ghost:hover { background: #eee; }

/* Phase card */
.bd-phase-grid {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;
}
.bd-phase-item {
  padding: 10px 12px; border-radius: 6px; border: 1px solid #f0f0f0; text-align: center;
}
.bd-phase-label { font-size: 12px; color: #999; margin-bottom: 4px; }
.bd-phase-value { font-size: 13px; color: #333; font-weight: 600; }
.bd-phase-item.active { border-color: #e2383e; background: #fff5f5; }
.bd-phase-item.active .bd-phase-value { color: #e2383e; }
.bd-phase-item.done { border-color: #38a169; background: #f0fff4; }
.bd-phase-item.done .bd-phase-value { color: #38a169; }

/* --- Bottom Action Bar --- */
.bd-bottom-bar {
  position: sticky; bottom: 0; background: #fff; border-top: 1px solid #eee;
  padding: 12px 32px; display: flex; align-items: center; justify-content: space-between;
  z-index: 10;
}
.bd-bottom-bar .bd-back-btn { color: #666; }
.bd-bottom-bar .bd-back-btn:hover { background: #f5f5f5; }
.bd-bottom-actions { display: flex; gap: 10px; }

/* --- Responsive --- */
@media (max-width: 900px) {
  .bd-header { padding: 16px; }
  .bd-header-title { font-size: 18px; }
  .bd-content { flex-direction: column; padding: 16px; }
  .bd-side { width: 100%; }
  .bd-info-grid { grid-template-columns: 1fr; }
  .bd-rule-grid { grid-template-columns: 1fr; }
  .bd-section-info { grid-template-columns: 1fr; }
  .bd-phase-grid { grid-template-columns: repeat(2, 1fr); }
  .bd-progress { padding: 16px; }
  .bd-step { font-size: 11px; }
  .bd-step-line { width: 20px; }
  .bd-bottom-bar { padding: 10px 16px; }
}

/* Supplier Category Tree */
.hidden { display: none !important; }
.cert-category-node-header:hover { background: #f0f0f0; }
.cert-category-arrow.open { transform: rotate(90deg); }
.cert-category-node-header label { width: 100%; }

.settle-form-wrapper .field-error { display: none; }
.settle-form-wrapper .field-error.visible { display: block; color: #ef4444; font-size: 0.8125rem; margin-top: 6px; }

/* ========== 邀请函列表页 ========== */

/* 统计卡片 */
.inv-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}
.inv-stat{background:#fff;border-radius:8px;padding:20px;display:flex;align-items:center;gap:16px;box-shadow:0 1px 3px rgba(0,0,0,.06);transition:transform .2s,box-shadow .2s}
.inv-stat:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.1)}
.inv-stat-icon{width:48px;height:48px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.inv-stat-icon svg{width:24px;height:24px;fill:#fff}
.inv-stat-icon.all{background:linear-gradient(135deg,#e2383e,#ff6b6b)}
.inv-stat-icon.pending{background:linear-gradient(135deg,#f59e0b,#fbbf24)}
.inv-stat-icon.joined{background:linear-gradient(135deg,#10b981,#34d399)}
.inv-stat-icon.rejected{background:linear-gradient(135deg,#6b7280,#9ca3af)}
.inv-stat-info{flex:1}
.inv-stat-num{font-size:28px;font-weight:700;color:#1f2937;line-height:1.2}
.inv-stat-label{font-size:13px;color:#9ca3af;margin-top:2px}

/* 工具栏 */
.inv-toolbar{background:#fff;border-radius:8px;padding:16px 20px;margin-bottom:16px;box-shadow:0 1px 3px rgba(0,0,0,.06);display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px}
.inv-toolbar-left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.inv-toolbar-right{display:flex;align-items:center;gap:10px;flex-wrap:wrap}

/* 筛选区 */
.inv-filter{background:#fff;border-radius:8px;padding:16px 20px;margin-bottom:16px;box-shadow:0 1px 3px rgba(0,0,0,.06);display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.inv-filter label{font-size:13px;color:#6b7280;white-space:nowrap}
.inv-filter select,.inv-filter input[type="date"]{height:34px;border:1px solid #e5e7eb;border-radius:6px;padding:0 10px;font-size:13px;color:#374151;background:#fff;outline:none;transition:border .2s}
.inv-filter select:focus,.inv-filter input[type="date"]:focus{border-color:#e2383e;box-shadow:0 0 0 2px rgba(226,56,62,.15)}
.inv-search{position:relative}
.inv-search input{height:34px;width:260px;border:1px solid #e5e7eb;border-radius:6px 0 0 6px;padding:0 10px 0 32px;font-size:13px;outline:none;transition:border .2s}
.inv-search input:focus{border-color:#e2383e;box-shadow:0 0 0 2px rgba(226,56,62,.15)}
.inv-search svg{position:absolute;left:8px;top:50%;transform:translateY(-50%);width:16px;height:16px;fill:#9ca3af}
.inv-search-btn{height:34px;padding:0 16px;background:#e2383e;color:#fff;border:1px solid #e2383e;border-radius:0 6px 6px 0;font-size:13px;cursor:pointer;transition:background .2s}
.inv-search-btn:hover{background:#c72e34}
.inv-btn-reset{height:34px;padding:0 16px;background:#fff;color:#6b7280;border:1px solid #e5e7eb;border-radius:6px;font-size:13px;cursor:pointer;transition:all .2s}
.inv-btn-reset:hover{border-color:#e2383e;color:#e2383e}

/* Tab */
.inv-tabs{background:#fff;border-radius:8px;padding:0 20px;box-shadow:0 1px 3px rgba(0,0,0,.06);margin-bottom:16px;display:flex;align-items:center;border-bottom:1px solid #f0f0f0}
.inv-tab{padding:14px 20px;font-size:14px;color:#6b7280;cursor:pointer;position:relative;transition:color .2s;white-space:nowrap}
.inv-tab:hover{color:#e2383e}
.inv-tab.active{color:#e2383e;font-weight:600}
.inv-tab.active::after{content:'';position:absolute;bottom:0;left:20px;right:20px;height:2px;background:#e2383e;border-radius:1px}
.inv-tab-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;background:#fee2e2;color:#e2383e;font-size:11px;font-weight:600;border-radius:9px;margin-left:4px}

/* 表格 */
.inv-table-wrap{background:#fff;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.06);overflow:hidden}
.inv-table{width:100%;border-collapse:collapse}
.inv-table thead{background:#fafafa}
.inv-table th{padding:12px 16px;font-size:13px;font-weight:600;color:#6b7280;text-align:left;white-space:nowrap;border-bottom:1px solid #f0f0f0}
.inv-table td{padding:14px 16px;font-size:13px;color:#374151;border-bottom:1px solid #f5f5f5;vertical-align:middle}
.inv-table tbody tr{transition:background .15s}
.inv-table tbody tr:hover{background:#fafafa}
.inv-table tbody tr:last-child td{border-bottom:none}

/* 复选框 */
.inv-checkbox{width:16px;height:16px;accent-color:#e2383e;cursor:pointer}

/* 邀请函标题 */
.inv-title-cell{display:flex;flex-direction:column;gap:4px}
.inv-title{font-size:14px;font-weight:600;color:#1f2937;line-height:1.4;max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.inv-title:hover{color:#e2383e;cursor:pointer}
.inv-sub{font-size:12px;color:#9ca3af}

/* 招标项目编号 */
.inv-project-id{font-family:'Courier New',monospace;font-size:12px;color:#6b7280;background:#f9fafb;padding:2px 8px;border-radius:4px;display:inline-block}

/* 招标单位 */
.inv-unit{font-size:13px;color:#374151}

/* 时间 */
.inv-time{font-size:13px;color:#6b7280}
.inv-time-warn{color:#e2383e;font-weight:600}
.inv-time-warn svg{width:14px;height:14px;fill:#e2383e;vertical-align:middle;margin-right:2px}
.inv-time-tag{display:inline-block;font-size:11px;padding:1px 6px;border-radius:3px;margin-left:4px}
.inv-time-tag.urgent{background:#fee2e2;color:#e2383e}
.inv-time-tag.normal{background:#f0fdf4;color:#16a34a}

/* 状态标签 */
.inv-status{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:12px;font-size:12px;font-weight:500;white-space:nowrap}
.inv-status.pending{background:#fff7ed;color:#ea580c}
.inv-status.joined{background:#f0fdf4;color:#16a34a}
.inv-status.rejected{background:#f3f4f6;color:#6b7280}
.inv-status-dot{width:6px;height:6px;border-radius:50%}
.inv-status.pending .inv-status-dot{background:#ea580c}
.inv-status.joined .inv-status-dot{background:#16a34a}
.inv-status.rejected .inv-status-dot{background:#9ca3af}
.inv-status.pending .inv-status-dot{animation:pulse-dot 1.5s infinite}
@keyframes pulse-dot{0%,100%{opacity:1}50%{opacity:.4}}

/* 操作按钮 */
.inv-action-btn{display:inline-flex;align-items:center;gap:3px;padding:4px 12px;border-radius:4px;font-size:12px;cursor:pointer;border:1px solid;transition:all .2s;white-space:nowrap}
.inv-action-btn.view{color:#e2383e;border-color:#fecaca;background:#fff}
.inv-action-btn.view:hover{background:#fef2f2}
.inv-action-btn.join{color:#fff;border-color:#e2383e;background:#e2383e}
.inv-action-btn.join:hover{background:#c72e34}
.inv-action-btn.reject{color:#6b7280;border-color:#e5e7eb;background:#fff}
.inv-action-btn.reject:hover{border-color:#e2383e;color:#e2383e}
.inv-action-btn.detail{color:#2563eb;border-color:#bfdbfe;background:#fff}
.inv-action-btn.detail:hover{background:#eff6ff}

/* 批量操作栏 */
.inv-batch{background:linear-gradient(135deg,#fef2f2,#fff5f5);border:1px solid #fecaca;border-radius:8px;padding:12px 20px;margin-bottom:16px;display:none;align-items:center;gap:16px}
.inv-batch.show{display:flex}
.inv-batch-info{font-size:13px;color:#e2383e;font-weight:600}
.inv-batch-btn{height:30px;padding:0 14px;border-radius:4px;font-size:12px;cursor:pointer;border:1px solid;transition:all .2s}
.inv-batch-btn.join{color:#fff;background:#e2383e;border-color:#e2383e}
.inv-batch-btn.join:hover{background:#c72e34}
.inv-batch-btn.reject{color:#6b7280;background:#fff;border-color:#e5e7eb}
.inv-batch-btn.reject:hover{border-color:#e2383e;color:#e2383e}
.inv-batch-cancel{font-size:12px;color:#9ca3af;cursor:pointer;margin-left:auto}
.inv-batch-cancel:hover{color:#e2383e}

/* 分页 */
.inv-pagination{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;background:#fff;border-radius:0 0 8px 8px;border-top:1px solid #f5f5f5}
.inv-pagination-info{font-size:13px;color:#9ca3af}
.inv-pagination-btns{display:flex;align-items:center;gap:4px}
.inv-page-btn{min-width:32px;height:32px;border:1px solid #e5e7eb;border-radius:6px;background:#fff;color:#6b7280;font-size:13px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}
.inv-page-btn:hover{border-color:#e2383e;color:#e2383e}
.inv-page-btn.active{background:#e2383e;color:#fff;border-color:#e2383e}
.inv-page-btn.disabled{opacity:.4;cursor:not-allowed}

/* 空状态 */
.inv-empty{text-align:center;padding:60px 20px}
.inv-empty svg{width:64px;height:64px;fill:#d1d5db;margin-bottom:12px}
.inv-empty p{font-size:14px;color:#9ca3af;margin-bottom:16px}

/* Modal */
.inv-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:1000;display:none;align-items:center;justify-content:center}
.inv-modal-overlay.show{display:flex}
.inv-modal{background:#fff;border-radius:12px;width:600px;max-width:90vw;max-height:80vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.15)}
.inv-modal-header{padding:20px 24px;border-bottom:1px solid #f0f0f0;display:flex;align-items:center;justify-content:space-between}
.inv-modal-title{font-size:16px;font-weight:600;color:#1f2937}
.inv-modal-close{width:32px;height:32px;border-radius:6px;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .2s}
.inv-modal-close:hover{background:#f3f4f6}
.inv-modal-close svg{width:18px;height:18px;fill:#9ca3af}
.inv-modal-body{padding:24px}
.inv-modal-footer{padding:16px 24px;border-top:1px solid #f0f0f0;display:flex;justify-content:flex-end;gap:10px}

/* 详情Modal内部 */
.inv-detail-section{margin-bottom:24px}
.inv-detail-section:last-child{margin-bottom:0}
.inv-detail-section-title{font-size:14px;font-weight:600;color:#1f2937;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid #f5f5f5;display:flex;align-items:center;gap:6px}
.inv-detail-section-title svg{width:16px;height:16px;fill:#e2383e}
.inv-detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 24px}
.inv-detail-item{display:flex;flex-direction:column;gap:2px}
.inv-detail-label{font-size:12px;color:#9ca3af}
.inv-detail-value{font-size:13px;color:#374151;line-height:1.5}
.inv-detail-value.id{font-family:'Courier New',monospace;font-size:12px;background:#f9fafb;padding:2px 8px;border-radius:4px;display:inline-block}
.inv-detail-value.status-pending{color:#ea580c;font-weight:600}
.inv-detail-value.status-joined{color:#16a34a;font-weight:600}
.inv-detail-value.status-rejected{color:#6b7280}
.inv-detail-timeline{position:relative;padding-left:24px}
.inv-detail-timeline::before{content:'';position:absolute;left:7px;top:6px;bottom:6px;width:2px;background:#f0f0f0}
.inv-detail-tl-item{position:relative;padding-bottom:16px}
.inv-detail-tl-item:last-child{padding-bottom:0}
.inv-detail-tl-dot{position:absolute;left:-20px;top:4px;width:10px;height:10px;border-radius:50%;border:2px solid #e5e7eb;background:#fff}
.inv-detail-tl-dot.done{background:#e2383e;border-color:#e2383e}
.inv-detail-tl-dot.current{background:#fff;border-color:#e2383e;box-shadow:0 0 0 3px rgba(226,56,62,.2)}
.inv-detail-tl-text{font-size:13px;color:#374151}
.inv-detail-tl-time{font-size:11px;color:#9ca3af;margin-top:2px}

/* 确认弹窗 */
.inv-confirm-body{text-align:center;padding:20px 0}
.inv-confirm-icon{width:56px;height:56px;border-radius:50%;margin:0 auto 16px;display:flex;align-items:center;justify-content:center}
.inv-confirm-icon.reject{background:#fef2f2}
.inv-confirm-icon.reject svg{width:28px;height:28px;fill:#e2383e}
.inv-confirm-icon.join{background:#f0fdf4}
.inv-confirm-icon.join svg{width:28px;height:28px;fill:#16a34a}
.inv-confirm-text{font-size:15px;color:#1f2937;font-weight:500;margin-bottom:6px}
.inv-confirm-sub{font-size:13px;color:#9ca3af}

/* 按钮通用 */
.inv-btn{height:34px;padding:0 20px;border-radius:6px;font-size:13px;cursor:pointer;transition:all .2s;display:inline-flex;align-items:center;gap:4px}
.inv-btn-primary{background:#e2383e;color:#fff;border:1px solid #e2383e}
.inv-btn-primary:hover{background:#c72e34}
.inv-btn-outline{background:#fff;color:#6b7280;border:1px solid #e5e7eb}
.inv-btn-outline:hover{border-color:#e2383e;color:#e2383e}
.inv-btn-text{background:none;border:none;color:#e2383e;font-size:13px;cursor:pointer;padding:0}
.inv-btn-text:hover{text-decoration:underline}

/* 响应式 */
@media(max-width:1200px){
  .inv-stats{grid-template-columns:repeat(2,1fr)}
  .inv-detail-grid{grid-template-columns:1fr}
}
@media(max-width:900px){
  .inv-stats{grid-template-columns:1fr}
  .inv-toolbar,.inv-filter{flex-direction:column;align-items:stretch}
  .inv-search input{width:100%}
  .inv-table-wrap{overflow-x:auto}
  .inv-table{min-width:900px}
}

/* 投标项目列表 */
.bp-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}
.bp-stat{background:#fff;border-radius:10px;padding:20px;display:flex;align-items:center;gap:14px;box-shadow:0 1px 4px rgba(0,0,0,.06);transition:.2s}
.bp-stat:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.1)}
.bp-stat-icon{width:48px;height:48px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.bp-stat-icon svg{width:24px;height:24px;fill:#fff}
.bp-stat-icon.all{background:linear-gradient(135deg,#e2383e,#ff6b6b)}
.bp-stat-icon.bidding{background:linear-gradient(135deg,#3b82f6,#60a5fa)}
.bp-stat-icon.ended{background:linear-gradient(135deg,#6b7280,#9ca3af)}
.bp-stat-icon.contract{background:linear-gradient(135deg,#10b981,#34d399)}
.bp-stat-info{flex:1}
.bp-stat-num{font-size:28px;font-weight:700;color:#1f2937;line-height:1.2}
.bp-stat-label{font-size:13px;color:#6b7280;margin-top:2px}

/* Tab切换 */
.bp-tabs{display:flex;gap:0;background:#fff;border-radius:10px 10px 0 0;padding:0 20px;border-bottom:2px solid #f3f4f6;box-shadow:0 1px 4px rgba(0,0,0,.06)}
.bp-tab{padding:14px 24px;font-size:14px;color:#6b7280;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:.2s;position:relative;white-space:nowrap}
.bp-tab:hover{color:#e2383e}
.bp-tab.active{color:#e2383e;font-weight:600;border-bottom-color:#e2383e}
.bp-tab-badge{background:#e2383e;color:#fff;font-size:11px;padding:1px 6px;border-radius:10px;margin-left:6px;font-weight:500}
.bp-tab.active .bp-tab-badge{background:#e2383e}

/* 工具栏 */
.bp-toolbar{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;background:#fff;border-bottom:1px solid #f3f4f6}
.bp-toolbar-left{display:flex;align-items:center;gap:12px}
.bp-toolbar-right{display:flex;align-items:center;gap:10px}
.bp-search{position:relative}
.bp-search input{padding:8px 12px 8px 36px;border:1px solid #e5e7eb;border-radius:8px;font-size:13px;width:280px;outline:none;transition:.2s}
.bp-search input:focus{border-color:#e2383e;box-shadow:0 0 0 3px rgba(226,56,62,.1)}
.bp-search svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);width:16px;height:16px;fill:#9ca3af}

/* 筛选栏 */
.bp-filter{display:flex;align-items:center;gap:12px;padding:12px 20px;background:#fafafa;border-bottom:1px solid #f3f4f6;flex-wrap:wrap}
.bp-filter select{padding:7px 28px 7px 10px;border:1px solid #e5e7eb;border-radius:6px;font-size:13px;color:#374151;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24'%3E%3Cpath d='M7 10l5 5 5-5z' fill='%236b7280'/%3E%3C/svg%3E") no-repeat right 8px center;appearance:none;outline:none;cursor:pointer}
.bp-filter select:focus{border-color:#e2383e}
.bp-filter-date{display:flex;align-items:center;gap:6px;font-size:13px;color:#6b7280}
.bp-filter-date input[type="date"]{padding:6px 8px;border:1px solid #e5e7eb;border-radius:6px;font-size:13px;outline:none}
.bp-filter-date input[type="date"]:focus{border-color:#e2383e}

/* 数据表格 */
.bp-table-wrap{background:#fff;overflow-x:auto}
.bp-table{width:100%;border-collapse:collapse}
.bp-table th{background:#f9fafb;padding:12px 16px;text-align:left;font-size:13px;font-weight:600;color:#374151;border-bottom:1px solid #e5e7eb;white-space:nowrap}
.bp-table td{padding:14px 16px;border-bottom:1px solid #f3f4f6;font-size:13px;color:#374151;vertical-align:middle}
.bp-table tbody tr{transition:.15s}
.bp-table tbody tr:hover{background:#fef2f2}

/* 项目编号 */
.bp-id{font-family:'Courier New',monospace;font-size:12px;color:#6b7280;background:#f3f4f6;padding:2px 8px;border-radius:4px;display:inline-block}

/* 项目名称 */
.bp-name{font-weight:500;color:#1f2937;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}
.bp-name-sub{font-size:12px;color:#9ca3af;margin-top:2px}

/* 招标单位 */
.bp-company{display:flex;align-items:center;gap:8px}
.bp-company-av{width:28px;height:28px;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;color:#fff;flex-shrink:0}
.bp-company-name{font-size:13px;color:#374151}

/* 日期 */
.bp-date{font-size:13px;color:#374151}
.bp-date-warn{color:#ea580c;font-weight:500}
.bp-date-expired{color:#dc2626;font-weight:500}
.bp-date-icon{width:14px;height:14px;vertical-align:-2px;margin-right:2px}

/* 状态标签 */
.bp-status{display:inline-flex;align-items:center;gap:5px;padding:4px 12px;border-radius:20px;font-size:12px;font-weight:500}
.bp-status.bidding{background:#fef2f2;color:#e2383e}
.bp-status.ended{background:#f3f4f6;color:#6b7280}
.bp-status.contract{background:#ecfdf5;color:#059669}
.bp-status-dot{width:6px;height:6px;border-radius:50%;display:inline-block}
.bp-status.bidding .bp-status-dot{background:#e2383e}
.bp-status.ended .bp-status-dot{background:#9ca3af}
.bp-status.contract .bp-status-dot{background:#059669}

/* 操作 */
.bp-action{color:#3b82f6;cursor:pointer;font-size:13px;padding:4px 10px;border-radius:6px;transition:.15s;display:inline-flex;align-items:center;gap:4px}
.bp-action:hover{background:#eff6ff;color:#2563eb}
.bp-action svg{width:14px;height:14px}

/* 分页 */
.bp-pagination{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;background:#fff;border-top:1px solid #f3f4f6}
.bp-pagination-info{font-size:13px;color:#6b7280}
.bp-pagination-btns{display:flex;gap:4px}
.bp-pagination-btn{min-width:32px;height:32px;border:1px solid #e5e7eb;border-radius:6px;background:#fff;font-size:13px;color:#374151;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0 8px;transition:.15s}
.bp-pagination-btn:hover{border-color:#e2383e;color:#e2383e}
.bp-pagination-btn.active{background:#e2383e;color:#fff;border-color:#e2383e}
.bp-pagination-btn.disabled{opacity:.4;cursor:not-allowed}

/* 详情Modal */
.bp-modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:1000;display:none;align-items:center;justify-content:center}
.bp-modal-overlay.show{display:flex}
.bp-modal{background:#fff;border-radius:14px;width:680px;max-height:85vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.2)}
.bp-modal-header{padding:20px 24px;border-bottom:1px solid #f3f4f6;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;background:#fff;z-index:1;border-radius:14px 14px 0 0}
.bp-modal-title{font-size:17px;font-weight:600;color:#1f2937}
.bp-modal-close{width:32px;height:32px;border-radius:8px;border:none;background:transparent;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.15s}
.bp-modal-close:hover{background:#f3f4f6}
.bp-modal-body{padding:24px}
.bp-modal-info{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.bp-modal-field{display:flex;flex-direction:column;gap:4px}
.bp-modal-label{font-size:12px;color:#9ca3af}
.bp-modal-value{font-size:14px;color:#1f2937;font-weight:500}
.bp-modal-section{margin-top:20px;padding-top:20px;border-top:1px solid #f3f4f6}
.bp-modal-section-title{font-size:15px;font-weight:600;color:#1f2937;margin-bottom:12px;display:flex;align-items:center;gap:8px}
.bp-modal-section-title svg{width:18px;height:18px;fill:#e2383e}
.bp-modal-table{width:100%;border-collapse:collapse}
.bp-modal-table th{background:#f9fafb;padding:10px 12px;text-align:left;font-size:12px;font-weight:600;color:#6b7280;border-bottom:1px solid #e5e7eb}
.bp-modal-table td{padding:10px 12px;border-bottom:1px solid #f3f4f6;font-size:13px;color:#374151}

/* 响应式 */
@media(max-width:900px){
  .bp-stats{grid-template-columns:repeat(2,1fr)}
  .bp-tabs{overflow-x:auto}
  .bp-toolbar{flex-direction:column;gap:10px;align-items:flex-start}
  .bp-search input{width:100%}
  .bp-filter{flex-direction:column;align-items:flex-start}
  .bp-modal{width:95%;margin:10px}
  .bp-modal-info{grid-template-columns:1fr}
}
@media(max-width:640px){
  .bp-stats{grid-template-columns:1fr}
  .bp-stat{padding:14px}
  .bp-stat-num{font-size:22px}
}

/* ===== 导航路由管理页面 ===== */
.nr-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}
.nr-stat-card{background:#fff;border-radius:8px;padding:20px;display:flex;align-items:center;gap:14px;box-shadow:0 1px 3px rgba(0,0,0,.06);transition:transform .2s}
.nr-stat-card:hover{transform:translateY(-2px)}
.nr-stat-icon{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.nr-stat-icon svg{width:22px;height:22px;fill:#fff}
.nr-stat-icon.c1{background:linear-gradient(135deg,#e2383e,#ff6b6b)}
.nr-stat-icon.c2{background:linear-gradient(135deg,#3b82f6,#60a5fa)}
.nr-stat-icon.c3{background:linear-gradient(135deg,#f59e0b,#fbbf24)}
.nr-stat-icon.c4{background:linear-gradient(135deg,#10b981,#34d399)}
.nr-stat-num{font-size:24px;font-weight:700;color:#1a1a2e}
.nr-stat-label{font-size:13px;color:#888;margin-top:2px}

.nr-toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;flex-wrap:wrap;gap:10px}
.nr-toolbar-left{display:flex;gap:8px}
.nr-toolbar-right{display:flex;gap:8px;align-items:center}
.nr-btn{padding:8px 16px;border-radius:6px;border:1px solid #ddd;background:#fff;font-size:13px;cursor:pointer;transition:all .2s;display:inline-flex;align-items:center;gap:5px}
.nr-btn:hover{border-color:#e2383e;color:#e2383e}
.nr-btn svg{width:14px;height:14px}
.nr-btn-primary{background:#e2383e;color:#fff;border-color:#e2383e}
.nr-btn-primary:hover{background:#c62a30;color:#fff;border-color:#c62a30}
.nr-btn-sm{padding:4px 10px;font-size:12px;border-radius:4px}
.nr-search{padding:8px 12px 8px 34px;border:1px solid #ddd;border-radius:6px;font-size:13px;width:240px;transition:border-color .2s;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23999'%3E%3Cpath d='M15.5 14h-.79l-.28-.27A6.47 6.47 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z'/%3E%3C/svg%3E") no-repeat 10px center/16px}
.nr-search:focus{border-color:#e2383e;outline:none;box-shadow:0 0 0 2px rgba(226,56,62,.1)}

/* 主内容区 - 左右分栏 */
.nr-layout{display:flex;gap:16px;min-height:600px}

/* 左侧树 */
.nr-tree-panel{width:320px;flex-shrink:0;background:#fff;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.06);display:flex;flex-direction:column}
.nr-tree-head{padding:14px 16px;border-bottom:1px solid #f0f0f0;display:flex;align-items:center;justify-content:space-between}
.nr-tree-head h3{font-size:14px;font-weight:600;margin:0}
.nr-tree-actions{display:flex;gap:6px}
.nr-tree-body{flex:1;overflow-y:auto;padding:8px 0}
.nr-tree-search{padding:10px 12px;border-bottom:1px solid #f0f0f0}
.nr-tree-search input{width:100%;padding:7px 10px 7px 30px;border:1px solid #e0e0e0;border-radius:6px;font-size:12px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23999'%3E%3Cpath d='M15.5 14h-.79l-.28-.27A6.47 6.47 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z'/%3E%3C/svg%3E") no-repeat 8px center/14px;box-sizing:border-box}
.nr-tree-search input:focus{border-color:#e2383e;outline:none}

/* 树节点 */
.nr-node{user-select:none}
.nr-node-row{display:flex;align-items:center;padding:7px 12px 7px 0;cursor:pointer;transition:background .15s;border-radius:4px;margin:1px 6px}
.nr-node-row:hover{background:#fef2f2}
.nr-node-row.active{background:#fef2f2;color:#e2383e;font-weight:600}
.nr-node-toggle{width:22px;height:22px;display:flex;align-items:center;justify-content:center;flex-shrink:0;cursor:pointer;transition:transform .2s}
.nr-node-toggle.expanded{transform:rotate(90deg)}
.nr-node-toggle.empty{visibility:hidden}
.nr-node-toggle svg{width:14px;height:14px;fill:#999}
.nr-node-icon{width:20px;height:20px;margin-right:6px;flex-shrink:0;display:flex;align-items:center;justify-content:center}
.nr-node-icon svg{width:16px;height:16px;fill:currentColor}
.nr-node-icon.folder svg{fill:#f59e0b}
.nr-node-icon.file svg{fill:#888}
.nr-node-name{flex:1;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nr-node-badge{background:#e2383e;color:#fff;font-size:10px;padding:1px 6px;border-radius:8px;margin-left:4px;flex-shrink:0}
.nr-node-actions{display:none;gap:2px;margin-left:4px}
.nr-node-row:hover .nr-node-actions{display:flex}
.nr-node-act{width:22px;height:22px;border:none;background:none;cursor:pointer;border-radius:4px;display:flex;align-items:center;justify-content:center;color:#999;transition:all .15s}
.nr-node-act:hover{background:#e2383e;color:#fff}
.nr-node-act svg{width:13px;height:13px;fill:currentColor}
.nr-children{padding-left:18px}

/* 右侧详情 */
.nr-detail-panel{flex:1;background:#fff;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.06);display:flex;flex-direction:column}
.nr-detail-head{padding:16px 20px;border-bottom:1px solid #f0f0f0;display:flex;align-items:center;justify-content:space-between}
.nr-detail-head h3{font-size:15px;font-weight:600;margin:0;display:flex;align-items:center;gap:8px}
.nr-detail-body{flex:1;overflow-y:auto;padding:20px}

/* 路由详情表单 */
.nr-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.nr-form-group{display:flex;flex-direction:column;gap:5px}
.nr-form-group.full{grid-column:1/-1}
.nr-form-label{font-size:12px;color:#888;font-weight:500}
.nr-form-label .required{color:#e2383e;margin-left:2px}
.nr-form-value{font-size:13px;color:#333;padding:8px 12px;background:#f9f9f9;border-radius:6px;min-height:36px;display:flex;align-items:center}
.nr-form-value.highlight{background:#fff5f5;color:#e2383e;font-weight:600}
.nr-form-input{padding:8px 12px;border:1px solid #e0e0e0;border-radius:6px;font-size:13px;transition:border-color .2s}
.nr-form-input:focus{border-color:#e2383e;outline:none;box-shadow:0 0 0 2px rgba(226,56,62,.1)}
.nr-form-input:read-only{background:#f9f9f9;color:#888;cursor:default}
.nr-form-select{padding:8px 12px;border:1px solid #e0e0e0;border-radius:6px;font-size:13px;background:#fff;cursor:pointer}
.nr-form-select:focus{border-color:#e2383e;outline:none}
.nr-form-switch{display:flex;align-items:center;gap:8px}
.nr-switch{position:relative;width:40px;height:22px;background:#ddd;border-radius:11px;cursor:pointer;transition:background .2s}
.nr-switch.on{background:#e2383e}
.nr-switch::after{content:'';position:absolute;top:2px;left:2px;width:18px;height:18px;background:#fff;border-radius:50%;transition:transform .2s}
.nr-switch.on::after{transform:translateX(18px)}
.nr-switch-text{font-size:12px;color:#888}

/* 子路由表格 */
.nr-child-section{margin-top:24px}
.nr-child-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.nr-child-head h4{font-size:14px;font-weight:600;margin:0;display:flex;align-items:center;gap:6px}
.nr-child-count{background:#e2383e;color:#fff;font-size:10px;padding:1px 7px;border-radius:8px}
.nr-table{width:100%;border-collapse:collapse;font-size:13px}
.nr-table thead{background:#fafafa}
.nr-table th{padding:10px 12px;text-align:left;font-weight:600;color:#666;border-bottom:1px solid #f0f0f0;font-size:12px}
.nr-table td{padding:10px 12px;border-bottom:1px solid #f5f5f5;color:#333}
.nr-table tbody tr:hover{background:#fef2f2}
.nr-table .nr-id{font-family:monospace;color:#888;font-size:12px}
.nr-table .nr-path{font-family:monospace;color:#3b82f6;font-size:12px}
.nr-table .nr-tag{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px}
.nr-table .nr-tag.menu{background:#fff5f5;color:#e2383e}
.nr-table .nr-tag.page{background:#eff6ff;color:#3b82f6}
.nr-table .nr-tag.link{background:#f0fdf4;color:#16a34a}
.nr-table .nr-tag-show{background:#f0fdf4;color:#16a34a;padding:2px 8px;border-radius:4px;font-size:11px}
.nr-table .nr-tag-hide{background:#fef2f2;color:#e2383e;padding:2px 8px;border-radius:4px;font-size:11px}
.nr-table .sort-handle{cursor:grab;color:#ccc;user-select:none}
.nr-table .sort-handle:hover{color:#e2383e}

/* 新增/编辑Modal */
.nr-modal-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:1000;justify-content:center;align-items:center}
.nr-modal-overlay.show{display:flex}
.nr-modal{background:#fff;border-radius:12px;width:560px;max-height:85vh;display:flex;flex-direction:column;animation:nrSlideIn .25s ease}
@keyframes nrSlideIn{from{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}
.nr-modal-head{padding:16px 20px;border-bottom:1px solid #f0f0f0;display:flex;align-items:center;justify-content:space-between}
.nr-modal-head h3{font-size:15px;font-weight:600;margin:0}
.nr-modal-close{width:28px;height:28px;border:none;background:none;cursor:pointer;border-radius:6px;display:flex;align-items:center;justify-content:center;color:#999;transition:all .15s}
.nr-modal-close:hover{background:#f5f5f5;color:#333}
.nr-modal-close svg{width:18px;height:18px;fill:currentColor}
.nr-modal-body{flex:1;overflow-y:auto;padding:20px}
.nr-modal-footer{padding:14px 20px;border-top:1px solid #f0f0f0;display:flex;justify-content:flex-end;gap:10px}
.nr-form-row{margin-bottom:16px}
.nr-form-row label{display:block;font-size:13px;color:#555;margin-bottom:5px;font-weight:500}
.nr-form-row label .req{color:#e2383e;margin-left:2px}
.nr-form-row input,.nr-form-row select,.nr-form-row textarea{width:100%;padding:8px 12px;border:1px solid #e0e0e0;border-radius:6px;font-size:13px;box-sizing:border-box;transition:border-color .2s}
.nr-form-row input:focus,.nr-form-row select:focus,.nr-form-row textarea:focus{border-color:#e2383e;outline:none;box-shadow:0 0 0 2px rgba(226,56,62,.1)}
.nr-form-row textarea{min-height:60px;resize:vertical}
.nr-form-row .nr-error{border-color:#e2383e!important}
.nr-form-row .nr-error-msg{color:#e2383e;font-size:11px;margin-top:3px}
.nr-form-row-inline{display:flex;gap:12px}
.nr-form-row-inline>div{flex:1}
.nr-icon-picker{display:grid;grid-template-columns:repeat(8,1fr);gap:6px;margin-top:4px}
.nr-icon-opt{width:36px;height:36px;border:1px solid #e0e0e0;border-radius:6px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .15s}
.nr-icon-opt:hover{border-color:#e2383e}
.nr-icon-opt.selected{border-color:#e2383e;background:#fef2f2}
.nr-icon-opt svg{width:18px;height:18px;fill:#666}
.nr-icon-opt.selected svg{fill:#e2383e}

/* 空状态 */
.nr-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:#ccc}
.nr-empty svg{width:64px;height:64px;fill:#e0e0e0;margin-bottom:12px}
.nr-empty p{font-size:13px;color:#bbb;margin:0}

/* 响应式 */
@media(max-width:900px){
  .nr-stats{grid-template-columns:repeat(2,1fr)}
  .nr-layout{flex-direction:column}
  .nr-tree-panel{width:100%;max-height:300px}
  .nr-form-grid{grid-template-columns:1fr}
  .nr-form-row-inline{flex-direction:column;gap:0}
}
@media(max-width:640px){
  .nr-stats{grid-template-columns:1fr}
  .nr-toolbar{flex-direction:column;align-items:stretch}
  .nr-toolbar-right{justify-content:flex-start;flex-wrap:wrap}
}
