    * { margin: 0; padding: 0; box-sizing: border-box; }
    body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background: #f0f2f5; color: rgba(0,0,0,0.88); font-size: 14px; }
    .app { display: flex; flex-direction: column; min-height: 100vh; }
    .body { display: flex; flex: 1; min-height: 0; }
    .sider { width: 220px; min-width: 220px; background: #fff; flex-shrink: 0; display: flex; flex-direction: column; border-right: 1px solid #e8e8e8; overflow-y: auto; overflow-x: hidden; }
    .sider::-webkit-scrollbar { width: 4px; }
    .sider::-webkit-scrollbar-thumb { background: #ddd; border-radius: 2px; }
    .logo { display: none; }
    .menu { flex: 1; overflow-y: auto; overflow-x: hidden; }
    .menu::-webkit-scrollbar { width: 4px; }
    .menu::-webkit-scrollbar-thumb { background: #ddd; border-radius: 2px; }
    .menu-group { border-bottom: 1px solid #f5f5f5; }
    .menu-group-title {
      display: flex; align-items: center; justify-content: space-between;
      padding: 14px 20px;
      font-size: 14px; color: #333;
      cursor: pointer; user-select: none;
      transition: background .15s;
    }
    .menu-group-title:hover { background: #fafafa; }
    .menu-group-title .label { display: flex; align-items: center; gap: 10px; }
    .menu-group-title .label svg { width: 16px; height: 16px; }
    .menu-group-title .arrow { font-size: 12px; color: #999; transition: transform .2s; }
    .menu-group.open .menu-group-title .arrow { transform: rotate(90deg); }
    .submenu { max-height: 0; overflow: hidden; transition: max-height .3s; display: grid; grid-template-columns: 1fr 1fr; }
    .menu-group.open .submenu { max-height: 500px; }
    /* V5.4 一级菜单（强制单列 + 始终展开，不折叠二级菜单） */
    .top-level-menu { display: block !important; max-height: none !important; grid-template-columns: none !important; padding: 8px 0 !important; }
    .top-level-menu .submenu-item {
      padding: 12px 20px !important;
      font-size: 14px !important;
      margin: 0 !important;
      border-radius: 0 !important;
      text-align: left !important;
      display: flex !important;
      align-items: center;
      gap: 10px;
      white-space: nowrap;
    }
    .top-level-menu .submenu-item svg { width: 16px; height: 16px; flex-shrink: 0; }
    .submenu-item {
      padding: 10px 8px;
      font-size: 13px; color: #666;
      cursor: pointer; transition: all .15s;
      white-space: nowrap;
      text-align: center;
      border-radius: 2px;
      margin: 2px 4px;
    }
    .submenu-item[data-page="asset"],
    .submenu-item[data-page="asset-life"],
    .submenu-item[data-page="insight-portrait"],
    .submenu-item[data-page="crowd"],
    .submenu-item[data-page="rights"] { color: #e8a070; }
    .menu-group.patient-group > .menu-group-title { color: #d32d3d; }
    .menu-group.patient-group > .menu-group-title .label svg { stroke: #d32d3d; }
    .menu-group.patient-group .submenu-item { color: #d32d3d; }
    .submenu-item:hover { color: #d32d3d; background: #fdf2f2; }
    .menu-group.patient-group .submenu-item.active,
    .submenu-item.active { color: #fff; background: #d32d3d; }
    .main { flex: 1; display: flex; flex-direction: column; min-width: 0; }
    .header { height: 64px; background: #fff; border-bottom: 1px solid #f0f0f0; padding: 0 24px; display: flex; align-items: center; justify-content: space-between; box-shadow: 0 1px 4px rgba(0,0,0,0.04); }
    .header-left { font-size: 16px; font-weight: 500; }
    .header-right { display: flex; align-items: center; gap: 16px; }
    .header-avatar { width: 36px; height: 36px; border-radius: 50%; background: #1677ff; color: #fff; display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 600; }
    .content { padding: 24px; overflow: auto; flex: 1; }
    .card { background: #fff; border-radius: 8px; padding: 24px; box-shadow: 0 1px 2px rgba(0,0,0,0.03); }
    .card + .card { margin-top: 24px; }
    .page-title { font-size: 20px; font-weight: 600; margin-bottom: 8px; }
    .page-desc { color: rgba(0,0,0,0.45); margin-bottom: 24px; }
    .btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; height: 32px; padding: 0 16px; border-radius: 6px; border: 1px solid #d9d9d9; background: #fff; cursor: pointer; font-size: 13px; color: rgba(0,0,0,0.88); transition: all .2s; outline: none; }
    .btn:hover { border-color: #4096ff; color: #4096ff; }
    .btn-primary { background: #1677ff; color: #fff; border-color: #1677ff; }
    .btn-primary:hover { background: #4096ff; color: #fff; border-color: #4096ff; }
    .btn-danger { color: #ff4d4f; border-color: #ff4d4f; }
    .btn-danger:hover { background: #fff2f0; }
    .btn-sm { height: 28px; padding: 0 10px; font-size: 13px; }
    .btn-icon { width: 32px; padding: 0; }
    .toolbar { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; }
    .toolbar-left { display: flex; gap: 12px; align-items: center; }
    .toolbar-right { display: flex; gap: 8px; }
    table { width: 100%; border-collapse: collapse; }
    th, td { text-align: left; padding: 12px 16px; border-bottom: 1px solid #f0f0f0; white-space: nowrap; }
    th { background: #fafafa; font-weight: 600; color: rgba(0,0,0,0.88); }
    tr:hover td { background: #fafafa; }
    .tag { display: inline-flex; align-items: center; gap: 4px; height: 22px; padding: 0 8px; border-radius: 4px; font-size: 12px; line-height: 1; border: 1px solid transparent; }
    .tag-blue { color: #1677ff; background: #e6f4ff; border-color: #91caff; }
    .tag-green { color: #52c41a; background: #f6ffed; border-color: #b7eb8f; }
    .tag-orange { color: #fa8c16; background: #fff7e6; border-color: #ffd591; }
    .tag-red { color: #ff4d4f; background: #fff2f0; border-color: #ffccc7; }
    .tag-gray { color: rgba(0,0,0,0.45); background: #f5f5f5; border-color: #d9d9d9; }
    .tag-purple { color: #722ed1; background: #f9f0ff; border-color: #d3adf7; }
    .actions { display: flex; gap: 8px; }
    .empty { text-align: center; padding: 48px; color: rgba(0,0,0,0.25); }

    /* Dashboard */
    .stat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; margin-bottom: 24px; }
    .stat-card { background: #fff; border-radius: 8px; padding: 20px 24px; box-shadow: 0 1px 2px rgba(0,0,0,0.03); display: flex; align-items: center; gap: 16px; }
    .stat-icon { width: 48px; height: 48px; border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 22px; flex-shrink: 0; }
    .stat-info { flex: 1; }
    .stat-val { font-size: 28px; font-weight: 700; line-height: 1; }
    .stat-label { color: rgba(0,0,0,0.45); font-size: 14px; margin-top: 4px; }
    .stat-sub { font-size: 13px; color: #52c41a; display: flex; align-items: center; gap: 4px; margin-top: 4px; }
    .chart-row { display: grid; grid-template-columns: 2fr 1fr; gap: 20px; }
    .chart-title { font-size: 16px; font-weight: 600; margin-bottom: 16px; }
    .chart-placeholder { height: 280px; display: flex; flex-direction: column; align-items: center; justify-content: center; color: rgba(0,0,0,0.25); }
    .bar-h { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; }
    .bar-h-label { width: 90px; text-align: right; font-size: 13px; color: rgba(0,0,0,0.65); flex-shrink: 0; }
    .bar-h-track { flex: 1; height: 22px; background: #f5f5f5; border-radius: 11px; overflow: hidden; }
    .bar-h-fill { height: 100%; border-radius: 11px; display: flex; align-items: center; padding-left: 10px; font-size: 12px; color: #fff; font-weight: 600; min-width: 40px; }
    .activity-item { display: flex; gap: 12px; padding: 12px 0; border-bottom: 1px solid #f5f5f5; }
    .activity-item:last-child { border-bottom: none; }
    .activity-dot { width: 8px; height: 8px; border-radius: 50%; margin-top: 6px; flex-shrink: 0; }
    .activity-body { flex: 1; }
    .activity-text { color: rgba(0,0,0,0.88); }
    .activity-time { color: rgba(0,0,0,0.35); font-size: 12px; margin-top: 2px; }

    /* Modal */
    .modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.45); display: none; align-items: center; justify-content: center; z-index: 1000; padding: 24px; }
    .modal-overlay.open { display: flex; }
    .modal { background: #fff; border-radius: 8px; width: 100%; max-width: 700px; max-height: 85vh; display: flex; flex-direction: column; box-shadow: 0 6px 16px rgba(0,0,0,0.15); }
    .modal-header { padding: 16px 24px; border-bottom: 1px solid #f0f0f0; display: flex; justify-content: space-between; align-items: center; }
    .modal-title { font-size: 16px; font-weight: 600; }
    .modal-close { background: none; border: none; font-size: 20px; cursor: pointer; color: rgba(0,0,0,0.45); padding: 0; line-height: 1; }
    .modal-close:hover { color: rgba(0,0,0,0.88); }
    .modal-body { padding: 24px; overflow: auto; }
    .modal-footer { padding: 12px 24px; border-top: 1px solid #f0f0f0; display: flex; justify-content: flex-end; gap: 12px; }
    .form-row { display: flex; gap: 16px; margin-bottom: 16px; }
    .form-row > .form-group { flex: 1; min-width: 0; }
    .form-group { margin-bottom: 16px; }
    .form-group label { display: block; margin-bottom: 6px; color: rgba(0,0,0,0.88); }
    .form-group label .required { color: #ff4d4f; margin-left: 4px; }
    input, select, textarea { width: 100%; height: 32px; padding: 4px 11px; border: 1px solid #d9d9d9; border-radius: 6px; font-size: 14px; outline: none; transition: all .2s; background: #fff; font-family: inherit; }
    input:focus, select:focus, textarea:focus { border-color: #1677ff; box-shadow: 0 0 0 2px rgba(22,119,255,0.1); }
    input::placeholder { color: rgba(0,0,0,0.25); }
    textarea { height: auto; min-height: 60px; resize: vertical; }
    .search-input { width: 220px; }
    .input-error { border-color: #ff4d4f !important; }
    .input-error:focus { box-shadow: 0 0 0 2px rgba(255,77,79,0.1) !important; }
    .error-text { color: #ff4d4f; font-size: 12px; margin-top: 4px; }
    .switch { position: relative; width: 40px; height: 22px; display: inline-block; }
    .switch input { opacity: 0; width: 0; height: 0; }
    .slider { position: absolute; cursor: pointer; inset: 0; background: #ccc; border-radius: 22px; transition: .2s; }
    .slider:before { position: absolute; content: ""; height: 18px; width: 18px; left: 2px; bottom: 2px; background: #fff; border-radius: 50%; transition: .2s; }
    .switch input:checked + .slider { background: #1677ff; }
    .switch input:checked + .slider:before { transform: translateX(18px); }
    .switch-label { display: flex; align-items: center; gap: 8px; }
    .cheers { transition: transform .2s; display: inline-block; }
    .cheers.open { transform: rotate(180deg); }

    .toast { position: fixed; top: 24px; left: 50%; transform: translateX(-50%); background: #fff; padding: 10px 20px; border-radius: 8px; box-shadow: 0 6px 16px rgba(0,0,0,0.15); display: none; align-items: center; gap: 8px; z-index: 2000; font-size: 14px; }
    .toast.show { display: flex; }
    .toast.success { color: #52c41a; }
    .toast.error { color: #ff4d4f; }
    .pagination { display: flex; justify-content: flex-end; align-items: center; gap: 8px; margin-top: 16px; }
    .pagination button { height: 32px; min-width: 32px; padding: 0 8px; }
    .pagination .active-page { background: #1677ff; color: #fff; border-color: #1677ff; }
    .checkbox-group { display: flex; flex-wrap: wrap; gap: 12px; }
    .checkbox-item { display: flex; align-items: center; gap: 6px; }

    .timeline { padding: 8px 0; }
    .timeline-item { display: flex; gap: 16px; padding-bottom: 24px; position: relative; }
    .timeline-dot-wrap { display: flex; flex-direction: column; align-items: center; flex-shrink: 0; }
    .timeline-dot { width: 10px; height: 10px; border-radius: 50%; border: 2px solid #1677ff; flex-shrink: 0; }
    .timeline-line { width: 1px; flex: 1; background: #f0f0f0; margin-top: 4px; }
    .timeline-content { flex: 1; padding-bottom: 0; }
    .timeline-title { font-weight: 600; }
    .timeline-desc { color: rgba(0,0,0,0.45); font-size: 13px; margin-top: 4px; }
    .timeline-time { font-size: 12px; color: rgba(0,0,0,0.35); }

    .text-danger { color: #ff4d4f; }
    .text-success { color: #52c41a; }
    .text-warning { color: #fa8c16; }
    .text-secondary { color: rgba(0,0,0,0.45); }

    .version-tag { font-size: 11px; font-weight: 400; color: rgba(0,0,0,0.25); margin-left: 6px; vertical-align: middle; }

    .nape-title { font-weight: 600; margin: 20px 0 12px; color: rgba(0,0,0,0.88); }
    .nape-title:first-child { margin-top: 0; }
    .indicator-list { display: flex; flex-wrap: wrap; gap: 8px; }
    .config-list { display: flex; flex-direction: column; gap: 16px; }
    .config-card { border: 1px solid #f0f0f0; border-radius: 8px; overflow: hidden; }
    .config-header { padding: 16px 24px; background: #fafafa; display: flex; justify-content: space-between; align-items: center; cursor: pointer; }
    .config-title2 { font-weight: 600; font-size: 15px; }
    .config-sub { color: rgba(0,0,0,0.45); font-size: 13px; margin-top: 4px; }
    .config-body { padding: 24px; border-top: 1px solid #f0f0f0; display: none; }
    .config-body.open { display: block; }
    .rule-item { border: 1px solid #f0f0f0; border-radius: 8px; padding: 16px; margin-bottom: 12px; }
    .rule-item:last-child { margin-bottom: 0; }
    .rule-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 12px; }
    .rule-title { font-weight: 600; }
    .rule-meta { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 8px; }
    .threshold-list { display: flex; flex-direction: column; gap: 8px; }
    .threshold-item { display: flex; align-items: center; gap: 12px; padding: 8px 12px; background: #fafafa; border-radius: 6px; }
    .dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; }
    .group-box { border: 1px solid #f0f0f0; border-radius: 8px; padding: 16px; margin-bottom: 16px; background: #fafafa; }
    .group-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }
    .group-title { font-weight: 600; }
    .condition-row { display: flex; gap: 12px; align-items: center; margin-bottom: 12px; }
    .condition-row select, .condition-row input { flex: 1; }
    .condition-row .btn { flex-shrink: 0; }

    @media (max-width: 1200px) { .stat-grid { grid-template-columns: repeat(2, 1fr); } .chart-row { grid-template-columns: 1fr; } }
    @media (max-width: 768px) { .sider { width: 60px; } .stat-grid { grid-template-columns: 1fr; } }
    /* 星济管理平台风格覆盖 */
    .header { height: 56px; background: linear-gradient(90deg, #e60036, #ff2d5f); color: #fff; border-bottom: 0; box-shadow: 0 2px 8px rgba(230,0,54,0.2); }
    .header-left { display: flex; align-items: center; gap: 16px; font-size: 15px; color: #fff; }
    .header-logo { font-size: 18px; font-weight: 600; display: flex; align-items: center; gap: 8px; }
    .header-greeting { color: rgba(255,255,255,0.85); font-size: 13px; }
    .header-right { color: #fff; }
    .header-avatar { width: 32px; height: 32px; background: rgba(255,255,255,0.2); color: #fff; font-size: 13px; }
    .page-card { background: #fff; border-radius: 8px; padding: 24px; box-shadow: 0 1px 2px rgba(0,0,0,0.03); }
    .page-header { padding-bottom: 16px; border-bottom: 1px solid #f0f0f0; }
    .page-header-title { font-size: 20px; font-weight: 600; color: rgba(0,0,0,0.88); }
    .page-tabs { display: flex; gap: 8px; margin-top: 16px; }
    .page-tab { padding: 8px 20px; border-radius: 4px 4px 0 0; cursor: pointer; color: rgba(0,0,0,0.65); font-size: 14px; border-bottom: 2px solid transparent; transition: all .2s; }
    .page-tab:hover { color: #e60036; }
    .page-tab.active { color: #e60036; border-bottom-color: #e60036; background: #fff0f2; }
    .page-body { padding-top: 24px; }
    .placeholder-empty { text-align: center; padding: 80px 0; }
    .btn-primary { background: #e60036; border-color: #e60036; }
    .btn-primary:hover { background: #ff2d5f; border-color: #ff2d5f; color: #fff; }
    .tag-blue { color: #e60036; background: #fff0f2; border-color: #ffccc7; }
  
/* ===== 移植自运营后台（慢病生命周期/购药合约） ===== */


/* ===== 筛选按钮组 ===== */
.filter-group  {
  display: flex; align-items: center; gap: 12px;
  padding: 16px 0 20px 0;
}

.filter-btn  {
  padding: 6px 18px;
  font-size: 13px;
  color: #666;
  background: #fff;
  border: 1px solid #d9d9d9;
  border-radius: 2px;
  cursor: pointer;
  transition: all .15s;
  user-select: none;
}

.filter-btn:hover  {
  color: #d32d3d;
  border-color: #d32d3d;
}

.filter-btn.active  {
  color: #fff;
  background: #d32d3d;
  border-color: #d32d3d;
}


/* ===== 空状态 ===== */
.empty-state  {
  text-align: center;
  padding: 60px 20px 40px;
}

.empty-state img  {
  width: 200px;
  height: auto;
  margin-bottom: 20px;
  opacity: 0.85;
}

.empty-state .empty-title  {
  font-size: 14px;
  color: #323339;
  margin-bottom: 8px;
}

.empty-state .empty-desc  {
  font-size: 12px;
  color: #999;
}


/* ===== 合约模板管理页 ===== */
.hetong-page  {
  font-size: 13px;
}


/* 通用筛选区样式（合约页与慢病页共享） */
.filter-form  {
  background: #fafafa;
  padding: 16px 20px;
  border: 1px solid #f0f0f0;
  border-radius: 2px;
  margin-bottom: 12px;
}

.filter-row  {
  display: flex; align-items: center; flex-wrap: wrap; gap: 20px;
  margin-bottom: 12px;
}

.filter-row:last-child  { margin-bottom: 0; }

.filter-item  {
  display: flex; align-items: center; gap: 8px;
  font-size: 13px;
}

.filter-item label  {
  color: #666; white-space: nowrap;
  min-width: 56px; text-align: right;
}

.filter-item input[type="text"],
.filter-item input[type="date"],
.filter-item select  {
  height: 28px; padding: 0 8px;
  border: 1px solid #d9d9d9; border-radius: 2px;
  font-size: 13px; color: #323339; background: #fff;
  outline: none;
}

.filter-item input[type="text"]  { width: 160px; }

.filter-item input[type="text"]:focus,
.filter-item select:focus  { border-color: #d32d3d; }

.filter-item select  { cursor: pointer; min-width: 140px; }

.filter-item-wide  { flex: 1; min-width: 360px; }

.tag-input  {
  display: flex; align-items: center; flex-wrap: wrap; gap: 6px;
  min-height: 28px; padding: 2px 6px;
  border: 1px solid #d9d9d9; border-radius: 2px; background: #fff;
  flex: 1;
}

.filter-tag  {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 1px 8px;
  background: #f5f5f5;
  border: 1px solid #d9d9d9;
  border-radius: 2px;
  font-size: 12px; color: #666;
  white-space: nowrap;
}

.filter-tag i  {
  font-style: normal; cursor: pointer;
  color: #999; font-size: 12px;
  width: 14px; height: 14px;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 50%;
}

.filter-tag i:hover  { background: #d32d3d; color: #fff; }

.date-range  {
  display: flex; align-items: center; gap: 6px;
}

.date-range input  { width: 130px; }

.date-range .cal  {
  display: inline-flex; align-items: center; justify-content: center;
  width: 28px; height: 28px;
  border: 1px solid #d9d9d9; border-radius: 2px;
  background: #fff; cursor: pointer; color: #999;
}

.btn-search  {
  height: 28px; padding: 0 14px;
  border: 1px solid #d32d3d; background: #d32d3d; color: #fff;
  border-radius: 2px; cursor: pointer; font-size: 13px;
}

.btn-search:hover  { background: #b12829; border-color: #b12829; }

.btn-export  {
  height: 28px; padding: 0 14px;
  border: 1px solid #d9d9d9; background: #fff; color: #666;
  border-radius: 2px; cursor: pointer; font-size: 13px;
}

.btn-export:hover  { border-color: #d32d3d; color: #d32d3d; }

/* 操作链接（策略方案表） */
.op-link  {
  color: #1890ff;
  cursor: pointer;
  font-size: 12px;
  line-height: 1.6;
  display: inline-block;
  margin-bottom: 2px;
}
.op-link:hover  { color: #d32d3d; text-decoration: underline; }


.hetong-page .action-bar  {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: 12px;
}

.hetong-page .result-count  {
  font-size: 13px; color: #666;
}

.hetong-page .result-count .count-num  {
  color: #d32d3d; font-weight: 500; margin: 0 2px;
}

.hetong-page .action-btns  { display: flex; gap: 8px; }


.hetong-page .data-table  {
  width: 100%;
  border-collapse: collapse;
  border: 1px solid #f0f0f0;
  font-size: 12px;
}

.hetong-page .data-table thead th  {
  background: #fafafa;
  color: #333; font-weight: 500;
  padding: 10px 8px;
  text-align: left;
  border-bottom: 1px solid #f0f0f0;
  border-right: 1px solid #f0f0f0;
  white-space: nowrap;
}

.hetong-page .data-table thead th:last-child  { border-right: none; }

.hetong-page .data-table tbody td  {
  padding: 12px 8px;
  border-bottom: 1px solid #f0f0f0;
  border-right: 1px solid #f0f0f0;
  color: #666;
  vertical-align: middle;
}

.hetong-page .data-table tbody td:last-child  { border-right: none; }

.hetong-page .data-table tbody tr:hover  { background: #fafafa; }

.hetong-page .data-table .col-id  { color: #323339; }

.hetong-page .data-table .col-success  { color: #1890ff; font-weight: 500; }

.hetong-page .data-table .row-actions  {
  display: flex; flex-wrap: wrap; gap: 4px;
}

.hetong-page .row-actions .act  {
  display: inline-block;
  padding: 2px 6px;
  background: #e6f7ff;
  color: #1890ff;
  border: 1px solid #91d5ff;
  border-radius: 2px;
  font-size: 11px;
  cursor: pointer;
  white-space: nowrap;
}

.hetong-page .row-actions .act:hover  {
  background: #1890ff; color: #fff;
}


.hetong-page .filter-actions  {
  display: flex; gap: 8px; align-items: center;
  margin-left: auto;
}


.hetong-page .data-table .col-range  {
  font-size: 11px; color: #666; line-height: 1.4;
  white-space: nowrap;
}

.hetong-page .data-table .col-yes  { color: #d32d3d; }

.hetong-page .data-table .col-no  { color: #999; }

.hetong-page .data-table .col-amount  { color: #d32d3d; font-weight: 500; }


/* 截图全宽高清展示 */
.screenshot-panel  {
  padding: 0;
  margin: -20px;
  margin-top: 0;
}

.screenshot-panel img  {
  display: block;
  width: 100%;
  height: auto;
  image-rendering: -webkit-optimize-contrast;
  image-rendering: crisp-edges;
  -ms-interpolation-mode: nearest-neighbor;
}


/* 分层卡片 */
/* ===== 会员分层卡片（通用） ===== */
.layer-cards  {
  display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px;
}

.layer-card  {
  background: #fafafa;
  border: 1px solid #f0f0f0;
  border-radius: 4px;
  padding: 16px;
  text-align: center;
}

.layer-card .layer-name  {
  font-size: 13px; color: #666; margin-bottom: 8px;
}

.layer-card .layer-count  {
  font-size: 24px; font-weight: 600; color: #323339;
  margin-bottom: 10px;
}

.layer-card .layer-compare  {
  display: flex; justify-content: center; gap: 16px;
  font-size: 12px;
}

.layer-card .compare-item  {
  display: flex; flex-direction: column; align-items: center;
  gap: 2px;
}

.layer-card .compare-item .cmp-label  {
  color: #999;
}

.layer-card .compare-item .cmp-value  { font-weight: 500; }

.layer-card .cmp-up  { color: #52c41a; }

.layer-card .cmp-down  { color: #f5222d; }


/* ===== 会员分层页专属 ===== */
.member-layer .layer-cards  {
  display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px;
}

.member-layer .layer-card  {
  background: #fafafa;
  border: 1px solid #f0f0f0;
  border-radius: 4px;
  padding: 16px;
  text-align: center;
}

.member-layer .layer-card .layer-name  {
  font-size: 13px; color: #666; margin-bottom: 8px;
}

.member-layer .layer-card .layer-count  {
  font-size: 24px; font-weight: 600; color: #323339;
  margin-bottom: 10px;
}

.member-layer .layer-card .layer-compare  {
  display: flex; justify-content: center; gap: 16px;
  font-size: 12px;
}

.member-layer .layer-card .compare-item  {
  display: flex; flex-direction: column; align-items: center;
  gap: 2px;
}

.member-layer .layer-card .compare-item .cmp-label  {
  color: #999;
}

.member-layer .layer-card .compare-item .cmp-value  { font-weight: 500; }

.member-layer .layer-card .cmp-up, .layer-card .cmp-up  { color: #52c41a; }

.member-layer .layer-card .cmp-down, .layer-card .cmp-down  { color: #f5222d; }


/* 筛选区（通用版 + member-layer版） */
.filter-section  {
  background: #fafafa;
  border: 1px solid #f0f0f0;
  border-radius: 4px;
  padding: 16px 20px;
}

.filter-row  {
  display: flex; align-items: center; flex-wrap: wrap; gap: 20px;
  margin-bottom: 12px;
}

.filter-row:last-child  { margin-bottom: 0; }

.filter-row .flabel  {
  color: #666; min-width: 56px; text-align: right; font-size: 13px;
}

.radio-group  {
  display: flex; align-items: center; gap: 16px;
}

.radio-group label  {
  display: flex; align-items: center; gap: 4px;
  cursor: pointer; font-size: 13px; color: #666;
  white-space: nowrap;
}

.radio-group input[type="radio"]  {
  accent-color: #d32d3d;
  cursor: pointer;
}

.radio-group label.active  { color: #d32d3d; font-weight: 500; }

.date-range-sm  {
  display: flex; align-items: center; gap: 6px;
}

.date-range-sm input[type="date"]  {
  height: 28px; padding: 0 8px;
  border: 1px solid #d9d9d9; border-radius: 2px;
  font-size: 13px; outline: none;
}

.member-layer .filter-section  {
  background: #fafafa;
  border: 1px solid #f0f0f0;
  border-radius: 4px;
  padding: 16px 20px;
}

.member-layer .filter-row  {
  display: flex; align-items: center; flex-wrap: wrap; gap: 20px;
  margin-bottom: 12px;
}

.member-layer .filter-row:last-child  { margin-bottom: 0; }

.member-layer .filter-row .flabel  {
  color: #666; min-width: 56px; text-align: right; font-size: 13px;
}

.member-layer .radio-group  {
  display: flex; align-items: center; gap: 16px;
}

.member-layer .radio-group label  {
  display: flex; align-items: center; gap: 4px;
  cursor: pointer; font-size: 13px; color: #666;
  white-space: nowrap;
}

.member-layer .radio-group input[type="radio"]  {
  accent-color: #d32d3d;
  cursor: pointer;
}

.member-layer .radio-group label.active  { color: #d32d3d; font-weight: 500; }

.member-layer .date-range-sm  {
  display: flex; align-items: center; gap: 6px;
}

.member-layer .date-range-sm input[type="date"]  {
  height: 28px; padding: 0 8px;
  border: 1px solid #d9d9d9; border-radius: 2px;
  font-size: 13px; outline: none;
}


/* ===== 慢病会员全览页 ===== */
.chronic-overview  { font-size: 13px; }

.chronic-overview .co-module  { margin-bottom: 24px; }

.chronic-overview .co-module:first-child  { margin-top: 20px; }

.chronic-overview .co-module-title  {
  font-size: 14px; font-weight: 500; color: #333;
  margin-bottom: 14px; padding-left: 10px;
  border-left: 3px solid #d32d3d;
  line-height: 1;
}

.chronic-overview .co-grid  {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px;
}

.chronic-overview .co-card  {
  background: #fafafa; border: 1px solid #f0f0f0;
  border-radius: 4px; padding: 16px;
}

.chronic-overview .co-card-half  {
  grid-column: span 1;
}

.chronic-overview .co-card-title  {
  font-size: 13px; color: #666; margin-bottom: 12px;
  text-align: center; font-weight: 500;
}


/* 饼图容器 */
.chronic-overview .pie-wrap  {
  display: flex; align-items: center; gap: 16px;
}

.chronic-overview .pie-svg  { flex-shrink: 0; }

.chronic-overview .pie-legend  { flex: 1; }

.chronic-overview .pie-legend .legend-item  {
  display: flex; align-items: center; gap: 6px;
  margin-bottom: 4px; font-size: 12px; color: #666;
  line-height: 1.6;
}

.chronic-overview .legend-dot  {
  width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0;
}

.chronic-overview .legend-item .legend-pct  {
  color: #323339; font-weight: 500; margin-left: auto;
}


/* 统计数字 */
.chronic-overview .stat-row  {
  display: flex; justify-content: space-around; gap: 8px;
  margin-top: 8px;
}

.chronic-overview .stat-item  { text-align: center; }

.chronic-overview .stat-item .stat-num  {
  font-size: 18px; font-weight: 600; color: #323339;
}


/* 策略表格 */
.chronic-overview .strategy-table  {
  width: 100%; border-collapse: collapse;
  border: 1px solid #f0f0f0; font-size: 12px;
}

.chronic-overview .strategy-table thead th  {
  background: #fafafa; color: #333; font-weight: 500;
  padding: 10px 10px; text-align: left;
  border-bottom: 1px solid #f0f0f0;
  border-right: 1px solid #f0f0f0;
  white-space: nowrap;
}

.chronic-overview .strategy-table thead th:last-child  { border-right: none; }

.chronic-overview .strategy-table tbody td  {
  padding: 10px; border-bottom: 1px solid #f5f5f5;
  border-right: 1px solid #f0f0f0;
  color: #666; vertical-align: middle;
}

.chronic-overview .strategy-table tbody td:last-child  { border-right: none; }

.chronic-overview .strategy-table tbody tr:hover  { background: #fafafa; }

.chronic-overview .strategy-table .up  { color: #52c41a; font-weight: 500; }

.chronic-overview .strategy-table .down  { color: #f5222d; font-weight: 500; }


/* 健康报告进度条 */
.chronic-overview .report-bar  {
  display: flex; flex-direction: column; gap: 10px;
}

.chronic-overview .report-item  {
  display: flex; align-items: center; gap: 10px;
}

.chronic-overview .report-item .r-label  {
  width: 56px; font-size: 12px; color: #666; text-align: right;
}

.chronic-overview .report-item .r-bar-wrap  {
  flex: 1; height: 18px; background: #f0f0f0; border-radius: 2px;
  overflow: hidden;
}

.chronic-overview .report-item .r-bar  {
  height: 100%; border-radius: 2px;
  display: flex; align-items: center; justify-content: flex-end;
  padding-right: 6px; font-size: 11px; color: #fff;
}

.chronic-overview .report-item .r-count  { font-size: 12px; color: #323339; min-width: 50px; }

.tag-red  { color: #d32d3d; background: #fdf2f2; border-color: #f5c6c6; }

.archive-page .tag  { display: inline-flex; align-items: center; gap: 4px; height: 22px; padding: 0 8px; border-radius: 4px; font-size: 12px; border: 1px solid transparent; }

.archive-page .tag-blue  { color: #1677ff; background: #e6f4ff; border-color: #91caff; }

.archive-page .tag-green  { color: #52c41a; background: #f6ffed; border-color: #b7eb8f; }

.archive-page .tag-orange  { color: #fa8c16; background: #fff7e6; border-color: #ffd591; }

.archive-page .tag-red  { color: #ff4d4f; background: #fff2f0; border-color: #ffccc7; }

.archive-page .tag-gray  { color: rgba(0,0,0,0.45); background: #f5f5f5; border-color: #d9d9d9; }

.archive-page .actions  { display: flex; gap: 8px; flex-wrap: wrap; }

.archive-page .activity-item  { display: flex; gap: 10px; padding: 10px 0; border-bottom: 1px solid #f5f5f5; }

.archive-page .activity-dot  { width: 8px; height: 8px; border-radius: 50%; margin-top: 5px; flex-shrink: 0; }

.archive-page .activity-body  { flex: 1; }

.archive-page .activity-text  { font-size: 13px; color: #333; }

.archive-page .activity-time  { color: #999; font-size: 12px; margin-top: 2px; }

/* 双普运营页内层Tab */
.sp-tab-bar  {
  display: flex;
  border-bottom: 2px solid #f0f0f0;
  margin-bottom: 16px;
  gap: 4px;
}
.sp-tab  {
  padding: 10px 24px;
  font-size: 14px;
  color: #666;
  cursor: pointer;
  border-bottom: 2px solid transparent;
  margin-bottom: -2px;
  transition: all .2s;
  font-weight: 500;
}
.sp-tab:hover  { color: #d32d3d; }
.sp-tab.sp-tab-active  {
  color: #d32d3d;
  border-bottom-color: #d32d3d;
  font-weight: 600;
}

/* V5.13 iframe 加载层旋转动画 */
@keyframes healthadmin-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
.iframe-loader { transition: opacity .2s ease; }
.iframe-loader-spin { box-sizing: border-box; }

/* V5.14 侧栏顶部操作（全部展开 / 折叠） */
.sider-top-actions { display: flex; align-items: center; gap: 6px; padding: 10px 14px; border-bottom: 1px solid #f0f0f0; background: #fafbfc; }
.sider-btn { font-size: 12px; color: #555; background: #fff; border: 1px solid #e0e0e0; padding: 4px 10px; border-radius: 4px; cursor: pointer; transition: all .15s; }
.sider-btn:hover { color: #d32d3d; border-color: #d32d3d; background: #fff5f6; }
.sider-btn-ghost { color: #888; }
.sider-state-hint { font-size: 11px; color: #94a3b8; padding-left: 4px; }


/* V5.17 iframe-tools 工具栏 */
.iframe-tools .data-tool-hover,.iframe-tools button:hover { background: #f3f4f6; border-color: #d1d5db; color: #d32d3d; }
.iframe-tools button:active { transform: scale(.97); }
.iframe-tools [data-tool="url-display"] { transition: all .2s; }
.iframe-tools [data-tool="url-display"]:hover { background: #fce7e7 !important; color: #d32d3d !important; }
[data-iframe-fallback] { animation: healthadmin-fade-in .3s ease-out; }
@keyframes healthadmin-fade-in { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: translateY(0); } }

/* V5.18 deploy-status 自检 banner */
.deploy-status {
  position: fixed; top: 56px; right: 16px; z-index: 1000;
  display: flex; align-items: center; gap: 8px; padding: 8px 14px;
  background: #fef3c7; color: #92400e; font-size: 13px;
  border: 1px solid #fcd34d; border-radius: 8px;
  box-shadow: 0 4px 12px rgba(0,0,0,0.08);
  font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
}
.deploy-status[data-check="ok"] { background: #dcfce7; color: #15803d; border-color: #86efac; }
.deploy-status[data-check="warn"] { background: #fee2e2; color: #b91c1c; border-color: #fca5a5; }
.deploy-status[data-check="err"] { background: #f3f4f6; color: #4b5563; border-color: #d1d5db; }
.deploy-status-icon { font-size: 16px; line-height: 1; }
.deploy-status-text { font-weight: 500; }
.deploy-status-toggle {
  border: 1px solid currentColor; background: transparent;
  color: inherit; padding: 2px 8px; border-radius: 4px; cursor: pointer;
  font-size: 12px; font-weight: 600;
}
.deploy-status-detail { display: none; }
.deploy-status.expanded .deploy-status-detail {
  display: block;
  position: absolute; top: calc(100% + 6px); right: 0;
  background: white; border: 1px solid #e5e7eb; border-radius: 6px;
  padding: 12px; min-width: 400px; max-width: 600px;
  box-shadow: 0 8px 24px rgba(0,0,0,0.12); color: #1f2937; font-size: 12px;
}
.deploy-status-detail ul { margin: 8px 0 0 0; padding-left: 20px; }
.deploy-status-detail li { padding: 2px 0; }
.deploy-status-detail code { background: #f3f4f6; padding: 1px 6px; border-radius: 3px; font-size: 11px; }
.deploy-status-detail .err { color: #b91c1c; font-weight: 600; font-size: 11px; }
.deploy-status-detail-inner b { color: #b91c1c; }

/* ============== V5.5 右侧顶部布局（面包屑+标题 + 三级tabs） ============== */
.main-header {
  display: flex; align-items: flex-end; justify-content: space-between;
  padding: 18px 24px 0 24px;
  background: #fff;
  border-bottom: 1px solid #f0f0f0;
  flex-wrap: wrap; gap: 12px;
}
.main-header-left { flex: 1; min-width: 0; }
.main-breadcrumb { display: block; font-size: 12px; color: rgba(0,0,0,0.45); margin-bottom: 4px; }
.main-title { font-size: 20px; font-weight: 600; color: rgba(0,0,0,0.88); margin: 0; line-height: 1.4; }
.main-header-right { display: flex; align-items: center; padding-bottom: 6px; }
.main-header-right .page-tabs { margin-top: 0; }
.content { padding: 0; }
.main { background: #f0f2f5; }

/* 二级菜单图标 + 名称 */
.submenu-item .lv2-icon { font-size: 16px; line-height: 1; }
.submenu-item .lv2-name { font-size: 14px; }

/* 顶部 logo + 标题 */
.header-logo { display: flex; align-items: center; gap: 8px; font-size: 16px; font-weight: 600; color: #d32d3d; }
.header-greeting { font-size: 12px; color: rgba(0,0,0,0.45); margin-left: 16px; }
.header-version { font-size: 12px; color: rgba(0,0,0,0.45); padding: 2px 8px; background: #f5f5f5; border-radius: 4px; }
/* V5.20 侧栏美化 拟物大色块（V4.0 风格回归）*/
/* 大色块 88x88 圆角 18 — 展开态 */
.menu-tile {
  display: inline-flex; align-items: center; justify-content: center;
  width: 88px; height: 88px; min-width: 88px; min-height: 88px;
  border-radius: 18px; margin-right: 14px;
  background: linear-gradient(135deg, #d32d3d 0%, #c2185b 100%);
  box-shadow: 0 6px 16px rgba(211, 45, 61, 0.32), inset 0 -2px 4px rgba(0,0,0,0.08), inset 0 2px 4px rgba(255,255,255,0.18);
  flex-shrink: 0;
  transition: transform .25s cubic-bezier(.34, 1.56, .64, 1), box-shadow .25s ease, width .25s ease, height .25s ease;
}
.menu-tile svg { width: 56px; height: 56px; filter: drop-shadow(0 1px 1px rgba(0,0,0,0.15)); }

/* 4 个色块主题（差异化） */
.chronic-tile { background: linear-gradient(135deg, #ef4444 0%, #dc2626 50%, #b91c1c 100%); }
.strategy-tile { background: linear-gradient(135deg, #f59e0b 0%, #ef4444 50%, #dc2626 100%); }
.base-config-tile { background: linear-gradient(135deg, #ec4899 0%, #db2777 50%, #be185d 100%); }
.health-mgmt-tile { background: linear-gradient(135deg, #a855f7 0%, #9333ea 50%, #7e22ce 100%); }

/* hover 动效 — 整组悬浮 + 阴影加强 */
.menu-group-title:hover .menu-tile {
  transform: translateY(-2px) scale(1.04);
  box-shadow: 0 10px 24px rgba(211, 45, 61, 0.4), inset 0 -2px 4px rgba(0,0,0,0.08), inset 0 2px 4px rgba(255,255,255,0.22);
}
.menu-group-title:active .menu-tile { transform: translateY(0) scale(0.98); }

/* menu-group-title 改 flex 强间距 + 业务名 2 行 + 大字号 */
.menu-group-title {
  display: flex; align-items: center; gap: 0;
  padding: 18px 16px; cursor: pointer; user-select: none;
  border-bottom: 1px solid #f3f4f6;
  transition: background .2s ease;
}
.menu-group-title:hover { background: #fef9f9; }
.menu-group-title .label {
  flex: 1; font-size: 18px; font-weight: 700; color: #111827;
  line-height: 1.25; letter-spacing: 0.5px;
}
.menu-group-title .arrow {
  color: #9ca3af; font-size: 16px; margin-left: 4px;
  transition: transform .25s ease, color .2s ease;
}
.menu-group-title:hover .arrow { color: #d32d3d; }
.menu-group.open .menu-group-title .arrow { transform: rotate(0deg); }
.menu-group:not(.open) .menu-group-title .arrow { transform: rotate(0deg); }

/* 折叠态：色块缩到 48x48，业务名换单行 */
.menu-group:not(.open) .menu-tile {
  width: 48px; height: 48px; min-width: 48px; min-height: 48px;
  margin-right: 12px;
  box-shadow: 0 3px 8px rgba(211, 45, 61, 0.25), inset 0 -1px 2px rgba(0,0,0,0.08), inset 0 1px 2px rgba(255,255,255,0.18);
}
.menu-group:not(.open) .menu-tile svg { width: 28px; height: 28px; }
.menu-group:not(.open) .menu-group-title { padding: 12px 14px; }
.menu-group:not(.open) .menu-group-title .label { font-size: 15px; line-height: 1.2; }
.menu-group:not(.open) .menu-group-title .label br { display: none; }
.menu-group:not(.open) .menu-group-title .label::after { content: ""; }
.menu-group:not(.open) .menu-group-title .arrow { font-size: 13px; }

/* 子项（fcgl/spyy/sgyy 等）— 大间距 + 15px 字号 + 红色左边条选中态 */
.submenu-item {
  cursor: pointer; padding: 14px 18px 14px 28px;
  font-size: 15px; color: #4b5563; line-height: 1.4;
  border-left: 4px solid transparent;
  transition: all .15s ease;
}
.submenu-item:hover { background: #fef9f9; color: #d32d3d; transform: translateX(2px); }
.submenu-item.active {
  background: linear-gradient(90deg, #fee2e2 0%, #ffffff 100%);
  color: #d32d3d; font-weight: 700;
  border-left: 4px solid #d32d3d; padding-left: 24px;
  box-shadow: inset 0 0 0 1px rgba(211, 45, 61, 0.06);
}

/* 单点 健康服务项目 — 同色块规格 */
.submenu-item.health-mgmt-item {
  display: flex; align-items: center; padding: 18px 16px; cursor: pointer;
  border-bottom: 1px solid #f3f4f6; user-select: none;
  transition: background .2s ease;
}
.submenu-item.health-mgmt-item:hover { background: #fdf4ff; }
.submenu-item.health-mgmt-item:hover .menu-tile {
  transform: translateY(-2px) scale(1.04);
  box-shadow: 0 10px 24px rgba(168, 85, 247, 0.4), inset 0 -2px 4px rgba(0,0,0,0.08), inset 0 2px 4px rgba(255,255,255,0.22);
}
.submenu-item.health-mgmt-item .label {
  flex: 1; font-size: 18px; font-weight: 700; color: #111827;
  line-height: 1.25; letter-spacing: 0.5px;
}
.submenu-item.health-mgmt-item.active {
  background: linear-gradient(90deg, #f3e8ff 0%, #ffffff 100%);
  border-left: 4px solid #9333ea; padding-left: 12px;
}
.submenu-item.health-mgmt-item.active .label { color: #7e22ce; }

/* 4 个 menu-group / 单点之间留 14px 间隔 + 圆角容器 */
.menu-group { margin: 0 0 14px 0; border-radius: 14px; overflow: hidden; background: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,0.04); }
.submenu-item.health-mgmt-item { margin: 0 0 14px 0; border-radius: 14px; overflow: hidden; background: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,0.04); }

/* 折叠态的 menu-group 不显示 box-shadow 容器（更扁平） */
.menu-group:not(.open) { box-shadow: none; background: transparent; margin-bottom: 10px; }
.submenu-item.health-mgmt-item:not(.active) { box-shadow: 0 1px 3px rgba(0,0,0,0.04); }
/* V5.21 主区美化 - 顶栏渐变 + 主区浅灰 + page-card 卡片化 + 骨架屏 + tabs 胶囊 */
/* 1. 顶栏 header */
.header {
  background: linear-gradient(135deg, #d32d3d 0%, #c2185b 100%) !important;
  color: #fff !important;
  box-shadow: 0 4px 16px rgba(211, 45, 61, 0.2), 0 1px 3px rgba(0,0,0,0.05);
  border-bottom: none !important;
  position: relative; z-index: 10;
}
.header *, .header .header-greeting, .header .header-logo span, .header [class*="badge"] {
  color: #fff !important;
}
.header .header-logo span:first-child {
  color: #fff !important; text-shadow: 0 1px 2px rgba(0,0,0,0.15);
}
.header [style*="background:rgba(255,255,255"] {
  background: rgba(255, 255, 255, 0.22) !important;
  color: #fff !important;
}
.header [style*="rgba(255,255,255"]::before { content: "🏷️ "; opacity: .8; }
/* 顶栏右部按钮白化 */
.header button { color: #fff; }
.header [data-tooltip="刷新"], .header .header-action { color: #fff; }

/* 2. 主区背景浅灰 + 与侧栏分隔 */
.main { background: #f5f7fa !important; }
.main .content { padding: 20px !important; }

/* 3. page-card 圆角卡片化 */
.page-card {
  background: #fff;
  border-radius: 14px !important;
  box-shadow: 0 2px 8px rgba(0,0,0,0.04), 0 1px 3px rgba(0,0,0,0.03);
  overflow: hidden;
  margin-bottom: 16px;
}
.page-card:last-child { margin-bottom: 0; }

/* page-header 美化 */
.page-header {
  background: #fff;
  padding: 18px 24px 14px 24px !important;
  border-bottom: 1px solid #f3f4f6;
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
}
.page-header-title {
  font-size: 22px !important; font-weight: 700 !important; color: #111827 !important;
  letter-spacing: 0.5px;
  display: flex; align-items: center; gap: 10px;
}
.page-header-title::before {
  content: ""; display: inline-block; width: 4px; height: 22px;
  background: linear-gradient(180deg, #d32d3d 0%, #c2185b 100%);
  border-radius: 2px;
}

/* page-tabs 改胶囊底色块 */
.page-tabs { display: flex; gap: 4px; background: #f5f7fa; padding: 4px; border-radius: 10px; }
.page-tab {
  padding: 8px 16px; font-size: 14px; color: #6b7280; cursor: pointer;
  border-radius: 8px; font-weight: 500; transition: all .2s ease; user-select: none;
}
.page-tab:hover { color: #d32d3d; background: #fff; }
.page-tab.active {
  background: linear-gradient(135deg, #d32d3d 0%, #c2185b 100%);
  color: #fff !important; font-weight: 700;
  box-shadow: 0 2px 6px rgba(211, 45, 61, 0.3);
}

/* 4. iframe-tools 美化 */
.iframe-tools button {
  border: 1px solid #e5e7eb !important; background: #fff;
  color: #374151;
  padding: 6px 12px; border-radius: 8px;
  font-size: 13px; font-weight: 500;
  transition: all .2s ease;
}
.iframe-tools button:hover {
  background: linear-gradient(135deg, #fef2f2 0%, #fff5f5 100%);
  border-color: #fca5a5 !important;
  color: #d32d3d;
  transform: translateY(-1px); box-shadow: 0 2px 6px rgba(211, 45, 61, 0.15);
}
.iframe-tools [data-tool="url-display"] {
  background: #f9fafb !important; border: 1px solid #f3f4f6 !important;
  color: #6b7280 !important;
  font-family: monospace; font-size: 12px;
  padding: 6px 10px; border-radius: 6px;
  max-width: 320px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  transition: all .2s ease;
}
.iframe-tools [data-tool="url-display"]:hover {
  background: #fef2f2 !important; color: #d32d3d !important;
}

/* 5. iframe 加载骨架屏 (6 张灰卡) */
@keyframes healthadmin-skeleton {
  0% { background-position: -200px 0; }
  100% { background-position: calc(200px + 100%) 0; }
}
.iframe-skeleton {
  position: absolute; inset: 0; z-index: 4; padding: 24px;
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px;
  background: #fafbfc;
}
.skeleton-card {
  height: 110px; background: #fff; border-radius: 12px; padding: 16px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.03);
  display: flex; flex-direction: column; gap: 10px;
}
.skeleton-line {
  height: 14px; border-radius: 4px;
  background: linear-gradient(90deg, #f1f5f9 0px, #e2e8f0 40px, #f1f5f9 80px);
  background-size: 200px 100%;
  animation: healthadmin-skeleton 1.4s ease-in-out infinite;
}
.skeleton-line.short { width: 40%; }
.skeleton-line.medium { width: 65%; }
.skeleton-line.long { width: 100%; }
.skeleton-line.thick { height: 24px; }

/* 6. 部署状态 banner 圆角卡片化 + 阴影加强 */
.deploy-status {
  border-radius: 10px !important;
  box-shadow: 0 4px 12px rgba(0,0,0,0.08) !important;
  font-size: 13px !important;
  top: 72px !important; right: 20px !important;
}

/* 7. 整体 sider 容器加圆角 */
.sider {
  padding: 16px 14px !important;
  background: #fafbfc !important;
  border-right: 1px solid #f0f1f4 !important;
}