/* ── 乐医巡检 · 柔和 UI 设计系统 ── */
:root {
  --soft-brand: #1abc9c;
  --soft-brand-hover: #17a589;
  --soft-border: #eef0f2;
  --soft-border-input: #e8ecef;
  --soft-bg-muted: #fafbfc;
  --soft-radius-sm: 10px;
  --soft-radius-lg: 14px;

  /* 三态基础色（与 stats.js STATUS_COLORS 一致） */
  --soft-status-normal-base: #a8dffa;
  --soft-status-pending-base: #dd2559;
  --soft-status-fixed-base: #2d8bf2;

  /* 三态渐变浅色端（与 stats.js STATUS_GRADIENT_LIGHT 一致） */
  --soft-status-normal-light: #d4efff;
  --soft-status-pending-light: #ff6b8a;
  --soft-status-fixed-light: #6db3ff;

  /* Badge：由 base 色推导（与统计图一致，列表/标签通用） */
  --soft-status-normal-badge-bg: color-mix(in srgb, var(--soft-status-normal-base) 28%, white);
  --soft-status-pending-badge-bg: color-mix(in srgb, var(--soft-status-pending-base) 12%, white);
  --soft-status-fixed-badge-bg: color-mix(in srgb, var(--soft-status-fixed-base) 14%, white);

  --soft-status-normal-badge-text: #1565a8;
  --soft-status-pending-badge-text: var(--soft-status-pending-base);
  --soft-status-fixed-badge-text: var(--soft-status-fixed-base);

  --soft-status-normal-badge-border: color-mix(in srgb, var(--soft-status-normal-base) 38%, transparent);
  --soft-status-pending-badge-border: color-mix(in srgb, var(--soft-status-pending-base) 28%, transparent);
  --soft-status-fixed-badge-border: color-mix(in srgb, var(--soft-status-fixed-base) 32%, transparent);

  /* 兼容旧变量名 */
  --soft-status-normal: var(--soft-status-normal-badge-bg);
  --soft-status-normal-text: var(--soft-status-normal-badge-text);
  --soft-status-pending: var(--soft-status-pending-badge-bg);
  --soft-status-pending-text: var(--soft-status-pending-badge-text);
  --soft-status-fixed: var(--soft-status-fixed-badge-bg);
  --soft-status-fixed-text: var(--soft-status-fixed-badge-text);
}

/* ── 输入框 / 下拉框 ── */
.soft-input.form-control,
.soft-input.form-select,
.soft-file-input.form-control {
  border-radius: var(--soft-radius-sm);
  border-color: var(--soft-border-input);
  background-color: #fff;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
  transition: border-color 0.2s, box-shadow 0.2s;
}

/* 校验失败：仅红框 + 下方文字，不在控件内叠加 Bootstrap 感叹号（避免与 background 冲突平铺） */
.soft-input.form-control.is-invalid,
.soft-file-input.form-control.is-invalid {
  border-color: #dc3545;
  background-color: #fff;
  background-image: none;
  padding-right: 0.75rem;
  box-shadow: none;
}

.soft-input.form-select.is-invalid {
  border-color: #dc3545;
  background-color: #fff;
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
  background-repeat: no-repeat;
  background-position: right 0.75rem center;
  background-size: 16px 12px;
  padding-right: 2.25rem;
  box-shadow: none;
}

.soft-input.is-invalid:focus {
  border-color: #dc3545;
  box-shadow: 0 0 0 3px rgba(220, 53, 69, 0.15);
}

.soft-input + .invalid-feedback,
.soft-input ~ .invalid-feedback {
  display: block;
  color: #dc3545;
  font-size: 0.875em;
  margin-top: 0.25rem;
}

.soft-input.form-control:focus,
.soft-input.form-select:focus,
.soft-file-input.form-control:focus {
  border-color: var(--soft-brand);
  box-shadow: 0 0 0 3px rgba(26, 188, 156, 0.12);
}

.soft-file-input.form-control {
  padding: 0.4rem 0.65rem;
  min-height: unset;
  font-size: 0.8125rem;
  color: #666;
}

.soft-file-input.form-control::file-selector-button {
  border: 1px solid #cce8f4;
  background: #eef8fc;
  color: #2d8bf2;
  border-radius: 8px;
  padding: 0.35rem 0.75rem;
  margin-right: 0.65rem;
  font-size: 0.8125rem;
  cursor: pointer;
  transition: all 0.2s;
}

.soft-file-input.form-control::file-selector-button:hover {
  background: #e0f2fa;
  border-color: #2d8bf2;
}

/* 兼容旧类名 */
.stats-soft-input.form-control,
.stats-soft-input.form-select,
.record-list-soft-input.form-select {
  border-radius: var(--soft-radius-sm);
  border-color: var(--soft-border-input);
  background-color: #fff;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
  transition: border-color 0.2s, box-shadow 0.2s;
}

.stats-soft-input.form-select.is-invalid,
.record-list-soft-input.form-select.is-invalid {
  border-color: #dc3545;
  background-color: #fff;
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
  background-repeat: no-repeat;
  background-position: right 0.75rem center;
  background-size: 16px 12px;
  padding-right: 2.25rem;
  box-shadow: none;
}

.stats-soft-input.form-control.is-invalid {
  border-color: #dc3545;
  background-color: #fff;
  background-image: none;
  box-shadow: none;
}

.stats-soft-input.form-control:focus,
.stats-soft-input.form-select:focus,
.record-list-soft-input.form-select:focus {
  border-color: var(--soft-brand);
  box-shadow: 0 0 0 3px rgba(26, 188, 156, 0.12);
}

/* ── 按钮 ── */
.soft-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.35rem;
  height: 2.125rem;
  padding: 0 0.85rem;
  font-size: 0.8125rem;
  line-height: 1;
  border-radius: var(--soft-radius-sm);
  border: 1px solid transparent;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  box-sizing: border-box;
  transition: all 0.2s;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
  min-height: unset;
}

.soft-btn i {
  line-height: 1;
  pointer-events: none;
}

.soft-btn--sm {
  height: 1.875rem;
  padding: 0 0.65rem;
  font-size: 0.75rem;
  border-radius: 8px;
}

.soft-btn--block {
  width: 100%;
}

.soft-btn--icon {
  width: 2.125rem;
  height: 2.125rem;
  padding: 0;
}

.soft-btn--primary {
  background: var(--soft-brand);
  border-color: var(--soft-brand);
  color: #fff;
  box-shadow: 0 2px 8px rgba(26, 188, 156, 0.25);
}

.soft-btn--primary:hover {
  background: var(--soft-brand-hover);
  border-color: var(--soft-brand-hover);
  color: #fff;
}

.soft-btn--ghost {
  background: #fff;
  border-color: var(--soft-border-input);
  color: #555;
}

.soft-btn--ghost:hover {
  background: #f5f6f8;
  border-color: #d0d5dd;
  color: #333;
}

.soft-btn--info {
  background: #eef8fc;
  border-color: #cce8f4;
  color: #2d8bf2;
}

.soft-btn--info:hover {
  background: #e0f2fa;
  border-color: #2d8bf2;
  color: #2d8bf2;
}

.soft-btn--edit {
  background: #fff8f0;
  border-color: #ffe0b2;
  color: #e67e22;
}

.soft-btn--edit:hover {
  background: #fff3e0;
  border-color: #e67e22;
  color: #e67e22;
}

.soft-btn--success {
  background: #ecfdf5;
  border-color: #a7f3d0;
  color: #059669;
}

.soft-btn--success:hover {
  background: #d1fae5;
  border-color: #059669;
  color: #059669;
}

.soft-btn--delete {
  background: #fef2f2;
  border-color: #fecaca;
  color: #dc3545;
}

.soft-btn--delete:hover {
  background: #fee2e2;
  border-color: #dc3545;
  color: #dc3545;
}

.soft-btn--delete-photo {
  width: 100%;
  height: auto;
  padding: 0.35rem 0.65rem;
  font-size: 0.8125rem;
}

/* stats 页按钮别名 */
.stats-btn {
  font-size: 0.8125rem;
  padding: 0.32rem 0.85rem;
  border-radius: var(--soft-radius-sm);
  border: 1px solid transparent;
  line-height: 1.4;
  transition: all 0.2s;
  white-space: nowrap;
  min-height: unset;
}

.stats-btn-primary {
  background: var(--soft-brand);
  border-color: var(--soft-brand);
  color: #fff;
  box-shadow: 0 2px 8px rgba(26, 188, 156, 0.25);
}

.stats-btn-primary:hover {
  background: var(--soft-brand-hover);
  border-color: var(--soft-brand-hover);
  color: #fff;
}

.stats-btn-ghost {
  background: #fff;
  border-color: var(--soft-border-input);
  color: #555;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
}

.stats-btn-ghost:hover {
  background: #f5f6f8;
  border-color: #d0d5dd;
  color: #333;
}

.stats-btn-ghost-info {
  background: #eef8fc;
  border-color: #cce8f4;
  color: #2d8bf2;
}

.stats-btn-ghost-info:hover {
  background: #e0f2fa;
  border-color: #2d8bf2;
}

.stats-btn-ghost-warn {
  background: #fff8f0;
  border-color: #ffe0b2;
  color: #e67e22;
}

.stats-btn-ghost-warn:hover {
  background: #fff3e0;
  border-color: #e67e22;
}

.stats-btn-export {
  font-size: 0.75rem;
  padding: 0.28rem 0.7rem;
  border-radius: var(--soft-radius-sm);
  border: 1px solid var(--soft-border-input);
  background: #fff;
  color: #555;
  line-height: 1.4;
  transition: all 0.2s;
  white-space: nowrap;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
  min-height: unset;
}

.stats-btn-export:hover:not(:disabled) {
  background: #f0faf8;
  border-color: var(--soft-brand);
  color: var(--soft-brand);
}

.stats-btn-export:disabled {
  opacity: 0.55;
  cursor: not-allowed;
}

.stats-btn-export--accent {
  background: var(--soft-brand);
  border-color: var(--soft-brand);
  color: #fff;
  box-shadow: 0 2px 8px rgba(26, 188, 156, 0.22);
}

.stats-btn-export--accent:hover:not(:disabled) {
  background: var(--soft-brand-hover);
  border-color: var(--soft-brand-hover);
  color: #fff;
}

/* ── 卡片 ── */
.soft-card {
  border: 1px solid var(--soft-border) !important;
  border-radius: var(--soft-radius-lg) !important;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);
  overflow: hidden;
}

.soft-card > .card-body {
  background: var(--soft-bg-muted);
}

.soft-card-header {
  background: var(--soft-bg-muted) !important;
  border-bottom: 1px solid var(--soft-border);
  color: #444 !important;
  font-weight: 600;
}

.soft-card-header--brand {
  background: linear-gradient(135deg, #1abc9c 0%, #17a589 100%) !important;
  color: #fff !important;
  border-bottom: none;
}

.soft-filter-card {
  border: 1px solid var(--soft-border) !important;
  border-radius: var(--soft-radius-lg) !important;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);
  overflow: hidden;
  margin-bottom: 1rem;
}

.soft-filter-card > .card-body {
  background: var(--soft-bg-muted);
  padding: 1rem 1.125rem;
}

.stats-filter-card,
.record-list-filter-card {
  border: 1px solid var(--soft-border) !important;
  border-radius: var(--soft-radius-lg) !important;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);
  overflow: hidden;
}

.stats-filter-card > .card-body,
.record-list-filter-card > .card-body {
  background: var(--soft-bg-muted);
  padding: 1rem 1.125rem;
}

.record-list-filter-card {
  margin-bottom: 1rem;
}

.photo-card-soft {
  width: 150px;
  border: 1px solid var(--soft-border) !important;
  border-radius: var(--soft-radius-sm);
  overflow: hidden;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);
}

.photo-card-soft-media {
  position: relative;
}

.photo-drag-handle {
  position: absolute;
  left: 0;
  top: 0;
  z-index: 2;
  display: none;
  align-items: center;
  justify-content: center;
  width: 1.75rem;
  height: 1.75rem;
  padding: 0;
  border: none;
  border-radius: 0 0 var(--soft-radius-sm) 0;
  background: rgba(255, 255, 255, 0.92);
  color: #666;
  cursor: grab;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12);
}

.photo-drag-handle:active {
  cursor: grabbing;
}

.photo-preview-edit--sortable .photo-drag-handle {
  display: inline-flex;
}

.photo-card-soft--ghost {
  opacity: 0.45;
}

.photo-card-soft--chosen {
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--soft-brand) 35%, transparent);
}

.photo-card-soft--drag {
  cursor: grabbing;
}

.photo-card-soft .card-img-top {
  border-bottom: 1px solid var(--soft-border);
}

.photo-modal-content {
  border: 1px solid var(--soft-border);
  border-radius: var(--soft-radius-lg);
  overflow: hidden;
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
}

.photo-modal-content .photo-thumb {
  border-radius: 8px;
  border: 1px solid var(--soft-border);
}

.modal-footer-actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 0.5rem;
  width: 100%;
  flex-wrap: wrap;
}

.soft-modal-header {
  background: var(--soft-bg-muted);
  border-bottom: 1px solid var(--soft-border);
}

.soft-modal-header--warn {
  background: #fff8f0;
  border-bottom: 1px solid #ffe0b2;
}

/* ── 状态 Badge（与图表三态色一致） ── */
.soft-badge {
  display: inline-flex;
  align-items: center;
  gap: 0.35em;
  font-size: 0.75rem;
  font-weight: 500;
  padding: 0.3em 0.65em;
  border-radius: 20px;
  border: 1px solid transparent;
  line-height: 1.3;
}

.soft-badge--normal,
.soft-badge--pending,
.soft-badge--fixed {
  padding-left: 0.5em;
}

.soft-badge--normal::before,
.soft-badge--pending::before,
.soft-badge--fixed::before {
  content: '';
  width: 6px;
  height: 6px;
  border-radius: 50%;
  flex-shrink: 0;
}

.soft-badge--normal {
  background: var(--soft-status-normal-badge-bg);
  color: var(--soft-status-normal-badge-text);
  border-color: var(--soft-status-normal-badge-border);
}

.soft-badge--normal::before {
  background: var(--soft-status-normal-base);
}

.soft-badge--pending {
  background: var(--soft-status-pending-badge-bg);
  color: var(--soft-status-pending-badge-text);
  border-color: var(--soft-status-pending-badge-border);
}

.soft-badge--pending::before {
  background: var(--soft-status-pending-base);
}

.soft-badge--fixed {
  background: var(--soft-status-fixed-badge-bg);
  color: var(--soft-status-fixed-badge-text);
  border-color: var(--soft-status-fixed-badge-border);
}

.soft-badge--fixed::before {
  background: var(--soft-status-fixed-base);
}

.soft-badge--danger {
  background: #fef2f2;
  color: #dc3545;
  border-color: #fecaca;
}

.soft-badge--muted {
  background: #f0f2f5;
  color: #666;
  border-color: #e8ecef;
}

.soft-badge--ticket {
  background: #eef8fc;
  color: #2d8bf2;
  border-color: #cce8f4;
}

/* 用户 AI 设置：后台公用池开关状态 */
.admin-pool-badge {
  font-size: 0.75rem;
  font-weight: 500;
  vertical-align: middle;
}
.admin-pool-badge--on {
  background: #eafaf3;
  color: #0a7;
  border: 1px solid #bfe9d8;
}
.admin-pool-badge--off {
  background: #fdeaea;
  color: #a55;
  border: 1px solid #f1d4d4;
}

/* ── Tab 胶囊 ── */
.soft-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: 0.375rem;
}

.soft-tabs .tab-btn {
  padding: 0.35rem 0.85rem;
  border-radius: 2rem;
  font-size: 0.875rem;
  text-decoration: none;
  color: #666;
  background: #fff;
  border: 1px solid var(--soft-border-input);
  white-space: nowrap;
  transition: all 0.2s;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
  cursor: pointer;
}

.soft-tabs .tab-btn:hover {
  border-color: var(--soft-brand);
  color: var(--soft-brand);
}

.soft-tabs .tab-btn.active {
  background: var(--soft-brand);
  border-color: var(--soft-brand);
  color: #fff;
  box-shadow: 0 2px 8px rgba(26, 188, 156, 0.25);
}

.record-list-tabs,
.stats-status-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: 0.375rem;
}

.record-list-tabs .tab-btn,
.stats-status-tabs .tab-btn {
  padding: 0.35rem 0.85rem;
  border-radius: 2rem;
  font-size: 0.875rem;
  text-decoration: none;
  color: #666;
  background: #fff;
  border: 1px solid var(--soft-border-input);
  white-space: nowrap;
  transition: all 0.2s;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
}

.record-list-tabs .tab-btn:hover,
.stats-status-tabs .tab-btn:hover {
  border-color: var(--soft-brand);
  color: var(--soft-brand);
}

.record-list-tabs .tab-btn.active,
.stats-status-tabs .tab-btn.active {
  background: var(--soft-brand);
  border-color: var(--soft-brand);
  color: #fff;
  box-shadow: 0 2px 8px rgba(26, 188, 156, 0.25);
}

/* ── 首页统计卡 ── */
.soft-stat-card {
  border: none;
  border-radius: var(--soft-radius-lg);
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.08);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
  color: #fff;
  overflow: hidden;
}

a.soft-stat-link {
  text-decoration: none;
  color: inherit;
  display: block;
}

a.soft-stat-link:hover .soft-stat-card {
  transform: translateY(-2px);
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.12);
}

.soft-stat-card--primary {
  background: linear-gradient(135deg, #1abc9c 0%, #17a589 100%);
}

.soft-stat-card--total {
  background: linear-gradient(135deg, var(--soft-status-normal-base) 0%, var(--soft-status-normal-light) 100%);
  color: var(--soft-status-normal-text);
}

.soft-stat-card--total .icon {
  opacity: 0.7;
}

.soft-stat-card--pending {
  background: linear-gradient(135deg, var(--soft-status-pending-base) 0%, var(--soft-status-pending-light) 100%);
}

.soft-stat-card--fixed {
  background: linear-gradient(135deg, var(--soft-status-fixed-base) 0%, var(--soft-status-fixed-light) 100%);
}

/* ── 记录家族行 ── */
tr.record-family-row td:first-child,
.index-family-row td:first-child {
  border-left: 3px solid var(--soft-brand);
}

tr.record-family-child-row td:first-child {
  padding-left: 1.75rem;
}

.record-family-group {
  border: 2px solid rgba(26, 188, 156, 0.35) !important;
  border-radius: 0.75rem;
  background: rgba(26, 188, 156, 0.03);
}

.record-case-header,
tr.record-case-header-row td {
  background: rgba(45, 139, 242, 0.08);
  border-left: 3px solid #2d8bf2;
}

.record-case-header--roots-only,
tr.record-case-header-row--roots-only td {
  background: rgba(45, 139, 242, 0.04);
  border-left: none;
  border-bottom: 1px dashed rgba(45, 139, 242, 0.35);
}

tr.record-case-member-row td:first-child {
  border-left: 3px solid rgba(45, 139, 242, 0.45);
}

tr.record-case-member-row--roots-only td:first-child {
  border-left: none;
}

.soft-badge--case-member {
  font-size: 0.7rem;
  padding: 0.15em 0.45em;
  background: rgba(45, 139, 242, 0.12);
  color: #1565c0;
  border: 1px solid rgba(45, 139, 242, 0.25);
}

/* ── 列表操作按钮 ── */
.record-action-group {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  flex-wrap: nowrap;
}

.record-action-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  padding: 0;
  font-size: 0.8125rem;
  line-height: 1;
  border-radius: 8px;
  border: 1px solid transparent;
  flex-shrink: 0;
  text-decoration: none;
  transition: all 0.2s;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
  min-height: unset;
}

.record-action-btn i {
  line-height: 1;
  pointer-events: none;
}

.record-action-btn--view {
  background: #eef8fc;
  border-color: #cce8f4;
  color: #2d8bf2;
}

.record-action-btn--view:hover {
  background: #e0f2fa;
  border-color: #2d8bf2;
  color: #2d8bf2;
}

.record-action-btn--edit {
  background: #fff8f0;
  border-color: #ffe0b2;
  color: #e67e22;
}

.record-action-btn--edit:hover {
  background: #fff3e0;
  border-color: #e67e22;
  color: #e67e22;
}

.record-action-btn--delete {
  background: #fef2f2;
  border-color: #fecaca;
  color: #dc3545;
}

.record-action-btn--delete:hover {
  background: #fee2e2;
  border-color: #dc3545;
  color: #dc3545;
}

.record-action-group--mobile {
  margin-top: 0.5rem;
}

.record-action-group--mobile .record-action-btn {
  width: auto;
  height: auto;
  padding: 0.28rem 0.65rem;
  font-size: 0.8125rem;
  gap: 0.25rem;
}

/* ── 分页 ── */
.soft-pagination .page-link {
  border-radius: 8px;
  margin: 0 2px;
  border-color: var(--soft-border-input);
  color: #666;
  font-size: 0.875rem;
}

.soft-pagination .page-item.active .page-link {
  background: var(--soft-brand);
  border-color: var(--soft-brand);
}

.soft-pagination .page-link:hover {
  background: #f0faf8;
  border-color: var(--soft-brand);
  color: var(--soft-brand);
}

/* ── 筛选工具栏布局 ── */
.record-list-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.625rem 0.875rem;
  margin-bottom: 0;
}

.record-list-filters {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  align-items: center;
}

.record-list-filters .filter-field {
  display: flex;
  align-items: center;
  gap: 0.35rem;
}

.record-list-filters .form-label {
  margin-bottom: 0;
  white-space: nowrap;
  font-size: 0.8rem;
  color: #666;
}

.record-list-filters .form-select,
.record-list-soft-input.form-select {
  width: auto;
  min-width: 7rem;
  max-width: 11rem;
}

.record-list-clear {
  font-size: 0.8125rem;
  white-space: nowrap;
  color: var(--soft-brand);
  text-decoration: none;
  padding: 0.32rem 0.65rem;
  border-radius: var(--soft-radius-sm);
  border: 1px solid var(--soft-border-input);
  background: #fff;
  transition: all 0.2s;
}

.record-list-clear:hover {
  background: #f0faf8;
  border-color: var(--soft-brand);
  color: var(--soft-brand-hover);
}

/* stats 页布局 */
.stats-toolbar {
  display: flex;
  flex-direction: column;
  gap: 0.875rem;
}

.stats-toolbar-row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 0.875rem;
  align-items: center;
}

.stats-toolbar-row .field-group {
  display: flex;
  align-items: center;
  gap: 0.4rem;
}

.stats-toolbar-row .field-group label,
.stats-filter-fields .form-label {
  font-size: 0.8rem;
  color: #666;
  margin-bottom: 0;
  white-space: nowrap;
}

.stats-quick-dates-pills {
  display: flex;
  flex-wrap: wrap;
  gap: 0.375rem;
}

.stats-quick-date-btn {
  font-size: 0.8rem;
  padding: 0.3rem 0.75rem;
  border-radius: 20px;
  border: 1px solid var(--soft-border-input);
  background: #fff;
  color: #666;
  line-height: 1.4;
  transition: all 0.2s;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
  min-height: unset;
}

.stats-quick-date-btn:hover {
  background: #f0faf8;
  border-color: var(--soft-brand);
  color: var(--soft-brand);
}

.stats-filter-fields {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  align-items: center;
}

.stats-filter-fields .filter-field {
  display: flex;
  align-items: center;
  gap: 0.35rem;
}

.stats-filter-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  align-items: center;
}

.stats-toolbar-row .form-control,
.stats-toolbar-row .form-select {
  width: auto;
  min-width: 9rem;
}

.stats-toolbar-row .form-control[type="date"] {
  min-width: 10.5rem;
}

.stats-filter-fields .form-select {
  width: auto;
  min-width: 7rem;
  max-width: 11rem;
}

.stats-status-tabs .tab-btn {
  cursor: pointer;
}

.stats-filter-row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.625rem 0.875rem;
  align-items: center;
}

/* ── 信息块 ── */
.soft-info-block {
  border: 1px solid var(--soft-border);
  border-radius: var(--soft-radius-sm);
  background: var(--soft-bg-muted);
  padding: 0.875rem 1rem;
}

/* ── 二级地点可搜索下拉 ── */
.soft-place-combobox {
  position: relative;
}

.soft-place-combobox-field {
  position: relative;
}

.soft-place-combobox-input {
  padding-right: 2.25rem;
  cursor: text;
}

.soft-place-combobox-input:disabled {
  cursor: not-allowed;
  background-color: #f8f9fa;
}

.soft-place-combobox-chevron {
  position: absolute;
  right: 0.75rem;
  top: 50%;
  width: 16px;
  height: 12px;
  margin-top: -6px;
  pointer-events: none;
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
  background-repeat: no-repeat;
  background-position: center;
  background-size: 16px 12px;
  opacity: 0.65;
}

.soft-place-combobox-menu {
  position: absolute;
  left: 0;
  right: 0;
  top: calc(100% + 4px);
  z-index: 1050;
  margin: 0;
  padding: 0.35rem 0;
  list-style: none;
  max-height: 220px;
  overflow-y: auto;
  background: #fff;
  border: 1px solid var(--soft-border-input);
  border-radius: var(--soft-radius-sm);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
}

.soft-place-combobox-option {
  padding: 0.45rem 0.75rem;
  cursor: pointer;
  font-size: 0.9375rem;
  color: #212529;
}

.soft-place-combobox-option:hover,
.soft-place-combobox-option.is-active {
  background: color-mix(in srgb, var(--soft-brand) 12%, white);
}

.soft-place-combobox-empty {
  padding: 0.5rem 0.75rem;
  color: #6c757d;
  font-size: 0.875rem;
}

.soft-place-combobox.is-invalid .soft-place-combobox-input {
  border-color: #dc3545;
  box-shadow: none;
}

.soft-place-combobox.is-invalid .soft-place-combobox-input:focus {
  border-color: #dc3545;
  box-shadow: 0 0 0 3px rgba(220, 53, 69, 0.15);
}

.soft-place-combobox.is-open .soft-place-combobox-input {
  border-color: var(--soft-brand);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--soft-brand) 22%, transparent);
}

/* 筛选栏卡片默认 overflow:hidden 会裁切自定义下拉 */
.stats-filter-card:has(.soft-place-combobox.is-open),
.record-list-filter-card:has(.soft-place-combobox.is-open),
.knowledge-list-card:has(.soft-place-combobox.is-open) {
  overflow: visible;
  position: relative;
  z-index: 20;
}

/* 抽屉内下拉：须保持高于 Offcanvas 遮罩(1040)，不可沿用 z-index:20 否则会闪屏且菜单被挡 */
.knowledge-form-drawer:has(.soft-place-combobox.is-open) {
  overflow: visible;
  z-index: 1055;
}

.knowledge-form-drawer:has(.soft-place-combobox.is-open) .offcanvas-body {
  overflow: visible;
}

.soft-place-combobox.is-open {
  z-index: 1060;
}

.soft-place-combobox--sm .soft-place-combobox-input {
  min-height: calc(1.5em + 0.5rem + 2px);
  padding: 0.25rem 2rem 0.25rem 0.5rem;
  font-size: 0.875rem;
}

.soft-place-combobox--sm .soft-place-combobox-chevron {
  right: 0.5rem;
}

.soft-place-combobox-option--all {
  color: #6c757d;
  border-bottom: 1px solid var(--soft-border);
}

/* 多行文本展示（保留 textarea 录入的换行） */
.multiline-plaintext {
  white-space: pre-wrap;
  word-break: break-word;
}

/* ── 敏感 Key 输入（与 soft-input 配套） ── */
.secret-input-group {
  display: flex;
  align-items: stretch;
  gap: 0.375rem;
}

.secret-input-group > .form-control.soft-input {
  flex: 1 1 auto;
  min-width: 0;
  border-radius: var(--soft-radius-sm);
}

.secret-input-group__actions {
  display: flex;
  flex-shrink: 0;
  gap: 0.25rem;
  align-items: stretch;
}

.secret-input-group__actions .soft-btn--icon {
  width: 2.125rem;
  height: auto;
  align-self: stretch;
  min-height: calc(1.5em + 0.75rem + 2px);
  padding: 0;
  color: #666;
  font-size: 0.8125rem;
}

.secret-input-group__actions .soft-btn--icon:hover:not(:disabled) {
  background: #f0faf8;
  border-color: var(--soft-brand);
  color: var(--soft-brand);
}

.secret-input-group__actions .soft-btn--icon:disabled {
  opacity: 0.42;
  cursor: not-allowed;
  background: #fafbfc;
  color: #aaa;
}
