  .recruit-rotate-hint { display: none !important; }

  .recruit-phone-list { display: none; }
  .recruit-phone-hint {
    margin: 0 0 .55rem;
    font-size: var(--fs-xs);
    color: var(--ink-soft, #5b6b80);
  }
  .recruit-phone-empty {
    text-align: center;
    color: var(--ink-soft, #5b6b80);
    padding: 1.4rem .5rem;
  }
  .recruit-phone-card {
    background: #fff;
    border: 1px solid #e2e8f0;
    border-radius: var(--radius-lg, 12px);
    padding: .7rem .8rem;
    margin-bottom: .55rem;
  }
  .recruit-phone-card.is-lead {
    border-color: color-mix(in srgb, var(--primary) 45%, #e2e8f0);
    background: color-mix(in srgb, var(--primary) 12%, #fff);
  }
  .recruit-phone-card.is-paused { color: #6b7280; }
  .recruit-phone-card.is-enrolling-no { color: var(--ink-faint, #5f6f85); }
  .rpc-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: .45rem;
  }
  .rpc-name {
    font-weight: 700;
    font-size: var(--fs-md);
    line-height: 1.3;
    color: #0f172a;
  }
  .rpc-badges {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: .25rem;
    flex: 0 0 auto;
  }
  .rpc-badge {
    font-size: var(--fs-xs);
    font-weight: 700;
    padding: .12rem .4rem;
    border-radius: var(--radius-pill, 999px);
    white-space: nowrap;
  }
  .rpc-badge-lead { background: color-mix(in srgb, var(--primary) 18%, #fff); color: color-mix(in srgb, var(--primary-dark, var(--primary)) 85%, #000); }
  .rpc-badge-paused { background: var(--neutral-bg, #f3f4f6); color: var(--neutral-text, #374151); }
  .rpc-meta {
    display: flex;
    flex-wrap: wrap;
    gap: .15rem .55rem;
    margin-top: .35rem;
    font-size: var(--fs-xs);
    color: #475569;
  }
  .rpc-regimen {
    margin-top: .35rem;
    font-size: var(--fs-sm);
    line-height: 1.4;
    color: var(--text, #1e3a5f);
  }
  .rpc-criteria {
    margin-top: .3rem;
    font-size: var(--fs-sm);
    line-height: 1.4;
    color: #334155;
    white-space: normal;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 4;
    line-clamp: 4;
    overflow: hidden;
  }

  @media screen and (max-width: 920px) and (orientation: portrait) {
    .recruit-table-wrap { display: none !important; }
    .recruit-phone-list { display: block; }
    .col-resize-reset { display: none !important; }
    .cancer-tabs {
      flex-wrap: nowrap;
      overflow-x: auto;
      -webkit-overflow-scrolling: touch;
    }
    body.is-guest .guest-main {
      max-width: none;
      padding: .55rem .55rem 1.1rem;
    }
    body.is-guest .guest-page-head {
      margin-bottom: .45rem;
    }
    body.is-guest .guest-page-head h1 { font-size: var(--fs-xl); }
    body.is-guest .guest-topbar-inner { padding: .45rem .6rem; }
  }
  @media screen and (max-width: 920px) and (orientation: landscape) {
    .recruit-phone-list { display: none !important; }
    .recruit-table-wrap { display: block; max-height: calc(100vh - 7.5rem) !important; }
    .sidebar { width: 12.5rem !important; }
    .content { padding: .45rem .5rem .6rem !important; }
    .topbar { padding: .35rem .55rem !important; }
    body.is-guest .guest-main { max-width: none; padding: .4rem .5rem .8rem; }
  }

  .recruit-legend {
    display: inline-flex;
    align-items: center;
    gap: .55rem .85rem;
    margin-left: .35rem;
    font-size: var(--fs-xs);
    color: #475569;
    flex-wrap: wrap;
  }
  .recruit-legend-item {
    display: inline-flex;
    align-items: center;
    gap: .28rem;
    white-space: nowrap;
  }
  .recruit-swatch {
    display: inline-block;
    width: .72rem;
    height: .72rem;
    border-radius: 2px;
    border: 1px solid rgba(15, 23, 42, .12);
    flex: 0 0 auto;
  }
  .recruit-swatch-lead { background: var(--primary); border-color: var(--primary-dark, var(--primary)); }
  .recruit-swatch-paused { background: #9ca3af; border-color: #6b7280; }
  .recruit-table-wrap { overflow: auto; max-height: calc(100vh - 14rem); border-radius: var(--radius-md, 8px); border: 1px solid rgba(0,0,0,.08); }
  table.recruit-grid { border-collapse: collapse; min-width: 1400px; width: 100%; font-size: var(--fs-base); background: #fff; }
  table.recruit-grid th, table.recruit-grid td {
    border: 1px solid rgba(15, 23, 42, .08); padding: .22rem .3rem; vertical-align: top; text-align: left;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  }
  table.recruit-grid th {
    position: sticky; top: 0; z-index: 2;
    background: var(--table-head-bg, #eef1f5); font-weight: 700; white-space: nowrap;
    color: var(--text);
    text-align: center;
    box-shadow: 0 2px 0 #d0d5dd;
  }
  table.recruit-grid td.col-num {
    white-space: nowrap;
  }
  .row-drag-handle {
    display: inline-block;
    cursor: grab;
    color: var(--ink-faint, #5f6f85);
    font-size: var(--fs-xs);
    letter-spacing: -.08em;
    user-select: none;
    line-height: 1;
    margin-right: .15rem;
    vertical-align: middle;
  }
  .row-drag-handle:active { cursor: grabbing; }
  table.recruit-grid tr.row-dragging { opacity: .55; }
  table.recruit-grid tr.row-drag-over td { box-shadow: inset 0 2px 0 var(--primary, #3b82f6); }
  table.recruit-grid th.col-num,
  table.recruit-grid td.num {
    width: 2.2rem; min-width: 2.1rem; max-width: 2.6rem;
    padding-left: .12rem !important; padding-right: .12rem !important;
    text-align: center; color: var(--ink-soft, #5b6b80);
    font-size: var(--fs-xs); line-height: 1.2;
  }
  table.recruit-grid th.col-num { background: var(--table-head-bg, #f8fafc); }
  table.recruit-grid th.col-row-edit,
  table.recruit-grid td.col-row-edit {
    width: 1.9rem; min-width: 1.8rem; max-width: 2rem;
    text-align: center; padding-left: .08rem !important; padding-right: .08rem !important;
  }
  table.recruit-grid th.col-project-edit,
  table.recruit-grid td.col-project-edit {
    width: 1.9rem; min-width: 1.8rem; max-width: 2rem;
    text-align: center; padding-left: .08rem !important; padding-right: .08rem !important;
  }
  .btn-row-edit {
    width: 1.45rem; height: 1.45rem; padding: 0; border-radius: var(--radius-md, 8px);
    display: inline-flex; align-items: center; justify-content: center;
    font-size: var(--fs-sm); line-height: 1; border: 1px solid #cbd5e1;
    background: #fff; color: #334155; cursor: pointer;
  }
  a.btn-row-edit { text-decoration: none; vertical-align: middle; margin-right: .2rem; }
  td.col-project-edit a.btn-row-edit { margin-right: 0; }
  .btn-row-edit:hover { border-color: var(--primary); color: var(--primary); background: color-mix(in srgb, var(--primary) 7%, #fff); }
  tr.row-editing .btn-row-edit { background: color-mix(in srgb, var(--primary) 13%, #fff); border-color: var(--primary); color: var(--primary-dark, var(--primary)); }
  table.recruit-grid .cell-input, table.recruit-grid .cell-select, table.recruit-grid .cell-area {
    width: 100%; min-width: 0; border: 1px solid transparent; border-radius: var(--radius-sm, 4px);
    padding: .15rem .25rem; font: inherit; background: transparent; color: inherit;
  }
  table.recruit-grid .cell-input:disabled,
  table.recruit-grid .cell-select:disabled,
  table.recruit-grid .cell-area:disabled {
    opacity: 1; color: inherit; background: transparent; border-color: transparent;
    cursor: default; resize: none;
  }
  table.recruit-grid .cell-select:disabled {
    appearance: none; -webkit-appearance: none; padding-right: .1rem;
  }
  table.recruit-grid tr:not(.row-editing) .cell-area {
    min-height: 1.55rem; height: 1.55rem; overflow: hidden;
  }
  table.recruit-grid tr.row-editing td { background: var(--table-hover-bg, #f8fafc); }
  table.recruit-grid tr.row-lead-site:not(.row-editing) td { background: color-mix(in srgb, var(--primary) 12%, #fff); }
  table.recruit-grid .cell-input:focus, table.recruit-grid .cell-select:focus, table.recruit-grid .cell-area:focus {
    outline: none; border-color: var(--primary); background: #fff; box-shadow: 0 0 0 2px color-mix(in srgb, var(--primary) 16%, transparent);
  }
  table.recruit-grid tr.saving td { background: color-mix(in srgb, var(--primary) 8%, #fff); }
  table.recruit-grid tr.err td { background: #fef2f2; }
  .recruit-actions { white-space: nowrap; }
  table.recruit-grid th.col-actions,
  table.recruit-grid td.recruit-actions,
  table.recruit-grid td.col-actions {
    width: 2.55rem;
    min-width: 2.55rem !important;
    max-width: 2.7rem !important;
    padding: .12rem .08rem !important;
    text-align: center;
  }
  table.recruit-grid .btn-del {
    padding: .1rem .28rem;
    min-height: 1.45rem;
    font-size: var(--fs-xs);
    line-height: 1.1;
  }

  /* 公司列：更紧凑 */
  table.recruit-grid th.col-company,
  table.recruit-grid td.col-company {
    width: 2.6rem; max-width: 2.6rem; min-width: 2.2rem;
  }
  table.recruit-grid td.col-company .company-text,
  table.recruit-grid td.col-company .cell-input,
  table.recruit-grid td.col-company .cell-from-project {
    display: block; max-width: 2.6rem; overflow: hidden;
    text-overflow: ellipsis; white-space: nowrap;
  }
  table.recruit-grid td.col-company .cell-input { padding: .1rem .15rem; }

  /* CRC 列：约 3 个汉字 */
  table.recruit-grid th.col-crc,
  table.recruit-grid td.col-crc {
    width: 2.75rem !important;
    max-width: 2.75rem !important;
    min-width: 2.7rem !important;
    padding-left: .08rem !important;
    padding-right: .08rem !important;
  }
  table.recruit-grid td.col-crc .cell-from-project,
  table.recruit-grid td.col-crc .cell-input {
    display: block; max-width: 100%; overflow: hidden;
    text-overflow: ellipsis; white-space: nowrap; font-size: var(--fs-xs);
  }

  /* 化疗 / 基因 / 靶病灶：窄列 */
  table.recruit-grid th.col-chemo,
  table.recruit-grid td.col-chemo {
    width: 2.6rem; max-width: 2.8rem; min-width: 2.2rem;
    padding-left: .12rem !important; padding-right: .12rem !important;
  }
  table.recruit-grid th.col-gene,
  table.recruit-grid td.col-gene {
    width: 2.6rem; max-width: 2.8rem; min-width: 2.2rem;
    padding-left: .12rem !important; padding-right: .12rem !important;
  }
  table.recruit-grid th.col-lesion,
  table.recruit-grid td.col-lesion {
    width: 2.8rem; max-width: 3rem; min-width: 2.4rem;
    padding-left: .12rem !important; padding-right: .12rem !important;
  }
  table.recruit-grid td.col-chemo .cell-select,
  table.recruit-grid td.col-gene .cell-select,
  table.recruit-grid td.col-lesion .cell-select,
  table.recruit-grid td.col-chemo .cell-input,
  table.recruit-grid td.col-gene .cell-input,
  table.recruit-grid td.col-lesion .cell-input {
    max-width: 100%; font-size: var(--fs-xs); padding: .1rem .1rem;
  }

  table.recruit-grid th.col-stage,
  table.recruit-grid td.col-stage {
    width: 4.95rem; min-width: 4.95rem; max-width: 5.55rem;
  }
  table.recruit-grid td.col-stage {
    background: transparent;
    color: color-mix(in srgb, var(--primary) 58%, #0f172a);
    font-weight: 700;
    font-size: var(--fs-sm);
    text-align: center;
    vertical-align: middle;
    white-space: normal;
    overflow: visible;
    text-overflow: unset;
    line-height: 1.25;
    padding: .35rem .28rem;
    border-right: 1px solid #d5deea;
  }
  .recruit-stage-label { word-break: break-word; }
  .recruit-stage-tools {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    justify-content: center;
    gap: 2px;
    margin-top: .28rem;
  }
  .recruit-move {
    width: 1.15rem;
    height: 1.15rem;
    padding: 0;
    border: 0;
    border-radius: var(--radius-pill, 999px);
    background: var(--table-head-bg, #e2e8f0);
    color: #334155;
    font-size: var(--fs-xs);
    line-height: 1;
    cursor: pointer;
  }
  .recruit-move:hover { background: color-mix(in srgb, var(--primary) 16%, #fff); color: var(--primary-dark, var(--primary)); }
  td.col-num .recruit-row-move { margin-left: 1px; vertical-align: middle; }
  .recruit-phone-stage { margin-bottom: .7rem; }
  .recruit-phone-stage-h {
    margin: 0 0 .35rem;
    padding: .22rem .55rem;
    border-radius: var(--radius-md, 8px);
    background: transparent;
    color: color-mix(in srgb, var(--primary) 58%, #0f172a);
    font-size: var(--fs-sm);
    font-weight: 700;
  }
  table.recruit-grid th.col-mechanism,
  table.recruit-grid td.col-mechanism {
    width: 5.28rem; min-width: 5.28rem; max-width: 6rem;
  }
  table.recruit-grid th.col-brochure,
  table.recruit-grid td.col-brochure {
    width: 2.75rem; min-width: 2.75rem; max-width: 2.75rem;
    text-align: center;
    padding-left: 0 !important;
    padding-right: 0 !important;
    vertical-align: middle;
  }
  .brochure-dot {
    display: inline-block;
    width: .55rem;
    height: .55rem;
    border-radius: var(--radius-pill, 999px);
    border: 0;
    padding: 0;
    vertical-align: middle;
    flex: 0 0 auto;
    box-sizing: border-box;
  }
  .recruit-legend .brochure-dot {
    width: .7rem;
    height: .7rem;
  }
  button.brochure-dot {
    position: relative;
    width: 2.75rem;
    height: 2.75rem;
    min-width: 2.75rem;
    min-height: 2.75rem;
    cursor: pointer;
    background: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
    padding: 0;
  }
  button.brochure-dot::before {
    content: "";
    position: absolute;
    left: 50%;
    top: 50%;
    width: .55rem;
    height: .55rem;
    transform: translate(-50%, -50%);
    border-radius: var(--radius-pill, 999px);
    box-sizing: border-box;
  }
  button.brochure-dot:disabled { cursor: default; }
  .brochure-dot.is-on {
    background: transparent;
    border: 1.5px solid #22c55e;
    box-shadow: none;
  }
  .brochure-dot.is-priority {
    background: #22c55e;
    border: 1.5px solid #15803d;
    box-shadow: none;
  }
  .brochure-dot.is-off {
    background: #2563eb;
    box-shadow: 0 0 0 1px #1d4ed8;
  }
  button.brochure-dot.is-on::before {
    background: transparent;
    border: 1.5px solid #22c55e;
  }
  button.brochure-dot.is-priority::before {
    background: #22c55e;
    border: 1.5px solid #15803d;
  }
  button.brochure-dot.is-off::before {
    background: #2563eb;
    box-shadow: 0 0 0 1px #1d4ed8;
  }
  button.brochure-dot:hover:not(:disabled) { transform: none; }
  button.brochure-dot:hover:not(:disabled)::before { transform: translate(-50%, -50%) scale(1.12); }
  table.recruit-grid th.col-regimen,
  table.recruit-grid td.col-regimen {
    width: 12rem; min-width: 10.3rem; max-width: none;
    overflow: hidden;
  }

  /* 项目列：列宽够时完整显示简称，允许自然转行 */
  table.recruit-grid th.col-project,
  table.recruit-grid td.col-project {
    width: 10.08rem; min-width: 10.08rem; max-width: none;
    white-space: normal;
    overflow: visible;
    text-overflow: unset;
  }
  table.recruit-grid td.col-project .cell-select,
  table.recruit-grid td.col-project .cell-project-select {
    width: 100%; max-width: 100%;
    min-height: 2rem;
    font-size: var(--fs-sm);
    line-height: 1.25;
  }
  table.recruit-grid td.col-project .project-text {
    display: block; max-width: 100%; overflow: visible;
    text-overflow: unset; white-space: normal;
    word-break: break-word;
    font-size: var(--fs-xs);
    line-height: 1.25;
  }
  table.recruit-grid td.col-project .project-text.is-empty { color: var(--ink-faint, #5f6f85); }
  table.recruit-grid .cell-clip {
    display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }

  /* 进度列：只读计算值，居中加粗 */
  table.recruit-grid th.col-progress,
  table.recruit-grid td.col-progress {
    width: 3.2rem; min-width: 3rem; text-align: center;
  }
  table.recruit-grid td.col-progress .progress-text {
    font-weight: 700; color: #0f172a;
  }
  table.recruit-grid td.col-progress .progress-text.is-empty { color: var(--ink-faint, #5f6f85); font-weight: 400; }

  /* 排行前三单位：仅显示一行，悬停 title 看全文 */
  table.recruit-grid th.col-top-sites,
  table.recruit-grid td.col-top-sites {
    min-width: 7rem; max-width: 12rem;
  }
  .top-sites-one-line,
  table.recruit-grid td.col-top-sites .cell-input,
  table.recruit-grid td.col-top-sites .cell-area {
    display: block;
    width: 100%;
    max-width: 12rem;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    line-height: 1.35;
    resize: none;
  }
  .top-sites-one-line {
    cursor: default;
  }

  /* 入组标准：固定两行，点击展开全文 */
  table.recruit-grid th.col-criteria,
  table.recruit-grid td.col-criteria {
    width: 12rem; min-width: 12rem; max-width: 12rem;
  }
  .criteria-preview {
    display: block; overflow: hidden; line-height: 1.35;
    cursor: pointer; white-space: nowrap; text-overflow: ellipsis;
    color: inherit; border-radius: var(--radius-sm, 4px); padding: .1rem .15rem;
  }
  .criteria-preview:hover { background: var(--table-hover-bg, #f1f5f9); }
  .criteria-preview.is-empty { color: var(--ink-faint, #5f6f85); }
  /* 全文弹层 */
  .criteria-modal-mask {
    display: none; position: fixed; inset: 0; z-index: 80;
    background: rgba(15, 23, 42, .45); align-items: center; justify-content: center;
    padding: 1rem;
  }
  .criteria-modal-mask.open { display: flex; }
  .criteria-modal {
    width: min(560px, 96vw); max-height: 80vh; display: flex; flex-direction: column;
    background: #fff; border-radius: var(--radius-lg, 12px); box-shadow: 0 16px 48px rgba(0,0,0,.18);
    overflow: hidden;
  }
  .criteria-modal-head {
    display: flex; align-items: center; justify-content: space-between; gap: .5rem;
    padding: .7rem 1rem; border-bottom: 1px solid #e2e8f0; font-weight: 700;
  }
  .criteria-modal-body { padding: .85rem 1rem; flex: 1; overflow: auto; }
  .criteria-modal-body textarea {
    width: 100%; min-height: 12rem; resize: vertical; font: inherit; line-height: 1.45;
    border: 1px solid #cbd5e1; border-radius: var(--radius-md, 8px); padding: .55rem .65rem;
  }
  .criteria-modal-body .criteria-full {
    white-space: pre-wrap; word-break: break-word; line-height: 1.5; margin: 0;
  }
  .criteria-modal-foot {
    display: flex; justify-content: flex-end; gap: .45rem;
    padding: .65rem 1rem; border-top: 1px solid #e2e8f0; background: var(--table-head-bg, #f8fafc);
  }

  #recruit-toast {
    position: fixed; right: 1rem; bottom: 1rem; z-index: 90;
    padding: .55rem .9rem; border-radius: var(--radius-md, 8px); background: #0f172a; color: #fff;
    font-size: var(--fs-base); display: none; max-width: 22rem;
  }
  #recruit-toast.ok { background: #047857; }
  #recruit-toast.err { background: #b91c1c; }

  /* 更新列：仅月-日（窄列，如 7-1） */
  table.recruit-grid th.col-updated,
  table.recruit-grid td.col-updated {
    width: 2.8rem; min-width: 2.6rem; max-width: 3.1rem;
    padding-left: .12rem !important;
    padding-right: .12rem !important;
  }
  table.recruit-grid td.col-updated .cell-updated-date {
    max-width: 2.9rem; min-width: 2.4rem; width: 100%;
    font-size: var(--fs-sm);
    padding: .1rem .05rem;
    text-align: center;
    font-variant-numeric: tabular-nums;
  }
  /* 入组：对号/叉图标 */
  table.recruit-grid th.col-enrolling,
  table.recruit-grid td.col-enrolling {
    width: 2.4rem; min-width: 2.2rem; max-width: 2.8rem;
    text-align: center; padding-left: .15rem !important; padding-right: .15rem !important;
  }
  /* 入组：绿色对号 / 红色打叉图标 */
  .enroll-icon {
    display: inline-flex; align-items: center; justify-content: center;
    width: 1.45rem; height: 1.45rem; border-radius: var(--radius-pill, 999px);
    font-size: 0; line-height: 1; vertical-align: middle;
  }
  .enroll-icon svg { width: .95rem; height: .95rem; display: block; }
  .enroll-icon.enroll-yes {
    background: #16a34a;
    box-shadow: 0 0 0 1px rgba(22,163,74,.25);
  }
  .enroll-icon.enroll-no {
    background: #dc2626;
    box-shadow: 0 0 0 1px rgba(220,38,38,.25);
  }
  select.cell-enrolling {
    width: 2.55rem; min-width: 2.4rem; max-width: 2.7rem;
    padding: .12rem .1rem; text-align: center;
    font-size: var(--fs-lg); font-weight: 700; border-radius: var(--radius-pill, 999px);
    border: 1px solid #cbd5e1; cursor: pointer;
    appearance: auto;
  }
  select.cell-enrolling.enr-yes {
    color: #fff; background: #16a34a; border-color: #15803d;
  }
  select.cell-enrolling.enr-no {
    color: #fff; background: #dc2626; border-color: #b91c1c;
  }
  select.cell-enrolling option { color: #0f172a; background: #fff; font-weight: 700; }
  /* 项目带入只读字段 */
  .cell-from-project {
    display: block; color: #475569; font-size: var(--fs-sm);
    line-height: 1.25; max-width: 100%;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .cell-from-project.is-empty { color: var(--ink-faint, #5f6f85); }
  /* 入组=否：整行更淡 */
  table.recruit-grid tr.row-enrolling-no td {
    color: var(--ink-faint, #5f6f85) !important;
  }
  table.recruit-grid tr[data-project-status-code="paused"]:not(.row-lead-site) td {
    color: var(--ink-faint, #5f6f85) !important;
  }
  table.recruit-grid tr.row-enrolling-no .cell-input,
  table.recruit-grid tr.row-enrolling-no .cell-select,
  table.recruit-grid tr.row-enrolling-no .cell-area,
  table.recruit-grid tr.row-enrolling-no .company-text,
  table.recruit-grid tr.row-enrolling-no .project-text,
  table.recruit-grid tr.row-enrolling-no .progress-text,
  table.recruit-grid tr.row-enrolling-no .criteria-preview,
  table.recruit-grid tr.row-enrolling-no .top-sites-one-line {
    color: var(--ink-faint, #5f6f85) !important;
    opacity: .92;
  }
  table.recruit-grid tr.row-enrolling-no .enroll-icon.enroll-no {
    opacity: 1; background: #f87171;
  }
  table.recruit-grid tr.row-enrolling-no .cell-from-project {
    color: var(--ink-faint, #5f6f85) !important;
  }

  /* 新增项目弹窗 */
  .add-project-mask {
    display: none; position: fixed; inset: 0; z-index: 85;
    background: rgba(15, 23, 42, .45); align-items: center; justify-content: center;
    padding: 1rem;
  }
  .add-project-mask.open { display: flex; }
  .add-project-modal {
    width: min(640px, 96vw); max-height: 90vh; display: flex; flex-direction: column;
    background: #fff; border-radius: var(--radius-lg, 12px); box-shadow: 0 16px 48px rgba(0,0,0,.18);
    overflow: hidden;
  }
  .add-project-head {
    display: flex; align-items: center; justify-content: space-between; gap: .5rem;
    padding: .75rem 1rem; border-bottom: 1px solid #e2e8f0; font-weight: 700;
  }
  .add-project-body { padding: .9rem 1rem; flex: 1; overflow: auto; }
  .add-project-foot {
    display: flex; justify-content: flex-end; gap: .45rem;
    padding: .65rem 1rem; border-top: 1px solid #e2e8f0; background: var(--table-head-bg, #f8fafc);
  }
  .add-field { margin-bottom: .75rem; }
  .add-field > label {
    display: block; font-size: var(--fs-sm); font-weight: 700; color: #334155; margin-bottom: .28rem;
  }
  .add-field .hint { font-size: var(--fs-xs); color: var(--ink-soft, #5b6b80); margin-top: .2rem; }
  .add-field input[type="text"], .add-field input[type="number"], .add-field input[type="search"],
  .add-field input[type="date"], .add-field select, .add-field textarea {
    width: 100%; border: 1px solid #d8dee4; border-radius: var(--radius-md, 8px); padding: .4rem .65rem;
    font-size: var(--fs-base); font-family: inherit; line-height: 1.25;
    min-height: 2.15rem; box-sizing: border-box; background: var(--card-bg); color: var(--text);
  }
  .add-field textarea { min-height: 4rem; resize: vertical; }
  .add-inline { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
  .add-inline label { font-weight: 400; font-size: var(--fs-base); display: inline-flex; align-items: center; gap: .25rem; }
  /* 语义色走全局 .chip / .chip-*（app.css） */
  .add-chip { /* 兼容旧 class 名，样式同 .chip-info */ }
  .add-section-title {
    font-size: var(--fs-base); font-weight: 700; color: #0f172a; margin: .4rem 0 .55rem;
    padding-bottom: .3rem; border-bottom: 1px dashed #e2e8f0;
  }
  .add-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: .65rem; }
  @media (max-width: 560px) { .add-grid-2 { grid-template-columns: 1fr; } }
  .add-arm-card {
    border: 1px solid #e2e8f0; border-radius: var(--radius-md, 8px); padding: .65rem .75rem;
    margin-bottom: .55rem; background: var(--table-stripe-bg, #f8fafc);
  }
  .add-arm-card h4 { margin: 0 0 .45rem; font-size: var(--fs-base); color: #0f172a; }
  .add-arm-checks {
    display: flex; flex-wrap: wrap; gap: .35rem .75rem; align-items: center;
  }
  .add-arm-checks label {
    display: inline-flex; align-items: center; gap: .28rem;
    font-size: var(--fs-base); font-weight: 400; cursor: pointer;
  }
  /* 筛选栏：与图例同一行，靠最右 */
  .recruit-filter-form {
    display: flex;
    flex-wrap: nowrap;
    gap: .35rem .4rem;
    align-items: center;
    margin: 0 0 0 auto;
    flex: 0 1 22rem;
    min-width: 0;
  }
  .recruit-filter-form input[type="search"] {
    flex: 0 0 7.5rem;
    min-width: 0;
    width: 7.5rem !important;
    max-width: 7.5rem;
    border: 1px solid #d8dee4;
    border-radius: var(--radius-md, 8px);
    padding: .4rem .65rem;
    font-size: var(--fs-base);
    font-family: inherit;
    line-height: 1.25;
    min-height: 2.15rem;
    box-sizing: border-box;
    background: var(--card-bg);
    color: var(--text);
    appearance: none;
    -webkit-appearance: none;
  }
  .recruit-filter-form .btn {
    flex: 0 0 auto;
    white-space: nowrap;
  }

  /* 癌种标签页 */
  .cancer-tabs { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem; margin-bottom: .75rem; border-bottom: 1px solid #dbe2ea; overflow: visible; }
  .cancer-tabs .col-resize-reset {
    margin: 0 0 -1px .15rem;
    flex: 0 0 auto;
    align-self: center;
  }
  .cancer-tab {
    padding: .5rem 1.1rem; border-radius: var(--radius-md, 8px) var(--radius-md, 8px) 0 0; font-size: var(--fs-md); font-weight: 700;
    color: var(--ink-soft, #5b6b80); text-decoration: none; background: var(--table-head-bg, #f1f5f9);
    border: 1px solid #dbe2ea; border-bottom: none; transition: all .12s;
    margin-bottom: -1px;
  }
  .cancer-tab:hover { background: color-mix(in srgb, var(--primary) 10%, #fff); color: var(--primary-dark, var(--primary)); }
  .cancer-tab.active { background: var(--primary); color: #fff; border-color: var(--primary); }

/* =====================================================================
 * 招募协作 UI 优化层（2026-10-01）：降噪为主。
 * 去竖向网格线、表头跟主题色、行悬停、阶段分组更柔和、图例 chip 化。
 * 不动列宽 / 列冻结 / 拖拽排序 / 手机卡片版 / 打印。回退：删除本段。
 * ===================================================================== */

/* ---- 表格降噪：只留横线，去掉竖向网格 ---- */
table.recruit-grid th,
table.recruit-grid td {
  border-left: 0;
  border-right: 0;
  border-bottom: 1px solid rgba(15, 23, 42, .055);
}
/* 阶段分组与数据区之间保留一条分隔线（信息层级需要） */
table.recruit-grid td.col-stage {
  border-right: 1px solid #dde4ee;
}

/* ---- 表头：跟主题色、更挺 ---- */
table.recruit-grid th {
  background: var(--table-head-bg, #f6f8fa);
  color: var(--text-secondary, var(--muted));
  font-size: var(--fs-xs);
  font-weight: 700;
  letter-spacing: .03em;
  box-shadow: 0 1px 0 color-mix(in srgb, var(--primary) 18%, #d0d5dd);
}

/* ---- 表体容器：圆角 + 轻投影 ---- */
.recruit-table-wrap {
  border-radius: var(--radius-lg, 12px);
  border: 1px solid rgba(70, 90, 115, .12);
  box-shadow: 0 1px 2px rgba(15, 23, 42, .04), 0 4px 14px rgba(15, 23, 42, .04);
  background: #fff;
}

/* ---- 行悬停（不盖住牵头底色 / 编辑中） ---- */
table.recruit-grid tbody tr:hover:not(.row-lead-site):not(.row-editing) td {
  background: var(--table-hover-bg, #f1f6fd);
}

/* ---- 阶段格默认透明。牵头行的阶段格跟整行同一浅底，写在后面以免被透明盖住 ---- */
table.recruit-grid td.col-stage {
  background: transparent;
  color: color-mix(in srgb, var(--primary) 58%, #0f172a);
  font-weight: 700;
}
table.recruit-grid tr.row-lead-site:not(.row-editing) td.col-stage {
  background: color-mix(in srgb, var(--primary) 12%, #fff);
}
.recruit-move {
  background: var(--table-head-bg, #e6eaf3);
  color: #475569;
  transition: background-color .12s ease, color .12s ease;
}
.recruit-move:hover {
  background: color-mix(in srgb, var(--primary) 16%, #fff);
  color: var(--primary-dark, var(--primary));
}

/* ---- 拖拽手柄：默认更淡，悬停再显现 ---- */
.row-drag-handle {
  color: #cbd5e1;
  transition: color .12s ease;
}
tr:hover .row-drag-handle { color: var(--ink-faint, #5f6f85); }

/* ---- 行内小编辑钮：默认更淡 ---- */
.btn-row-edit {
  border-color: color-mix(in srgb, var(--primary) 22%, #e2e8f0);
  color: var(--ink-soft, #5b6b80);
  background: color-mix(in srgb, var(--primary) 5%, #fff);
  transition: border-color .12s ease, color .12s ease, background-color .12s ease;
}

/* ---- 癌种页签：更清晰的切换感 ---- */
.cancer-tabs {
  gap: .35rem;
  border-bottom: 1px solid #e2e8f0;
}
.cancer-tab {
  padding: .55rem 1.15rem;
  border-radius: var(--radius-md, 8px) var(--radius-md, 8px) 0 0;
  border: 1px solid transparent;
  border-bottom: none;
  background: transparent;
  color: var(--ink-soft, #5b6b80);
  transition: background-color .14s ease, color .14s ease;
}
.cancer-tab:hover {
  background: color-mix(in srgb, var(--primary) 8%, #fff);
  color: var(--primary-dark, var(--primary));
}
.cancer-tab.active {
  background: color-mix(in srgb, var(--primary) 12%, #fff);
  color: var(--primary-dark, var(--primary));
  border-color: color-mix(in srgb, var(--primary) 30%, transparent);
  box-shadow: inset 0 -3px 0 var(--primary);
  font-weight: 700;
}

/* ---- 图例：chip 化，一眼能读 ---- */
.recruit-legend {
  gap: .3rem;
}
.recruit-legend-item {
  background: #fff;
  border: 1px solid #e6ebf2;
  border-radius: var(--radius-pill, 999px);
  padding: .16rem .55rem .16rem .4rem;
  font-size: var(--fs-xs);
  color: #475569;
  box-shadow: 0 1px 2px rgba(15, 23, 42, .04);
}
.recruit-swatch {
  border-radius: 4px;
}

/* ---- 筛选框：聚焦环统一 ---- */
.recruit-filter-form input[type="search"]:focus {
  outline: none;
  border-color: var(--primary);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--primary) 16%, transparent);
}

/* ---- 入组图标：圆点更精致 ---- */
.enroll-icon.enroll-yes { box-shadow: 0 0 0 1.5px rgba(22, 163, 74, .35); }
.enroll-icon.enroll-no { box-shadow: 0 0 0 1.5px rgba(220, 38, 38, .3); }

/* ---- 弹窗：圆角与全局一致 ---- */
.criteria-modal, .add-project-modal { border-radius: var(--radius-lg, 12px); }

/* A11Y-FOCUS-20261011 */
table.recruit-grid .cell-input:focus-visible, table.recruit-grid .cell-select:focus-visible, table.recruit-grid .cell-area:focus-visible,
.recruit-filter-form input[type="search"]:focus-visible { outline: 2px solid var(--primary, #2563eb) !important; outline-offset: 2px; }
@media (forced-colors: active) { table.recruit-grid .cell-input:focus, table.recruit-grid .cell-select:focus, table.recruit-grid .cell-area:focus, .recruit-filter-form input[type="search"]:focus { outline: 2px solid CanvasText; } }

/* ---- 2026-10-18：# 列只放序号（按 3 位数字留余量）---- */
table.recruit-grid th.col-num,
table.recruit-grid td.num {
  width: 4ch;
  min-width: 3.5ch;
  max-width: 4.5ch !important;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}
/* 排序手柄、上下移按钮不再占 # 列宽：鼠标移到本行（或键盘聚焦）时浮在序号右侧 */
table.recruit-grid td.col-num { position: relative; overflow: visible; }
table.recruit-grid td.col-num .row-drag-handle,
table.recruit-grid td.col-num .recruit-row-move { display: none; }
table.recruit-grid tr:hover td.col-num .row-drag-handle,
table.recruit-grid tr:focus-within td.col-num .row-drag-handle,
table.recruit-grid tr.row-dragging td.col-num .row-drag-handle,
table.recruit-grid tr:hover td.col-num .recruit-row-move,
table.recruit-grid tr:focus-within td.col-num .recruit-row-move {
  display: inline-block;
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  z-index: 3;
  margin: 0;
}
table.recruit-grid td.col-num .row-drag-handle { left: 100%; padding: .1rem .15rem; background: var(--surface, #fff); border-radius: 4px; }
@media (hover: none) {
  table.recruit-grid th.col-num,
  table.recruit-grid td.num {
    width: auto;
    min-width: 7.5rem;
    max-width: none !important;
  }
  table.recruit-grid td.col-num .row-drag-handle,
  table.recruit-grid td.col-num .recruit-row-move {
    display: inline-flex;
    position: static;
    transform: none;
    min-width: 1.8rem;
    min-height: 1.8rem;
    align-items: center;
    justify-content: center;
  }
}
.rpc-moves {
  display: flex;
  gap: .35rem;
  margin-top: .45rem;
}
.rpc-moves button {
  min-width: 2.6rem;
  min-height: 2.2rem;
}
table.recruit-grid td.col-num .recruit-row-move[data-dir="-1"] { left: calc(100% + 1.15rem); }
table.recruit-grid td.col-num .recruit-row-move[data-dir="1"] { left: calc(100% + 2.4rem); }

/* ---- 2026-10-18：CRC 列放得下「主CRC/第二CRC」两个名字，不再截成省略号 ---- */
table.recruit-grid th.col-crc,
table.recruit-grid td.col-crc {
  width: 6.2rem !important;
  min-width: 4.6rem !important;
  max-width: 6.6rem !important;
}

/* ---- 2026-10-18c：表格收紧——列宽按内容（auto 布局），不铺满不留白；# 列锁宽（压过列宽记忆的内联宽度） ---- */
body.is-guest .guest-main:has(#recruit-table) { max-width: min(1600px, 100%); }
table.recruit-grid { table-layout: auto !important; width: auto !important; min-width: 0 !important; max-width: 100%; }
table.recruit-grid th, table.recruit-grid td { padding: .16rem .22rem; }
table.recruit-grid th.col-num,
table.recruit-grid td.col-num,
table.recruit-grid td.num {
  width: 1.75rem !important; min-width: 1.75rem !important; max-width: 1.75rem !important;
  padding-left: .08rem !important; padding-right: .08rem !important;
}
/* 内容列：不写死宽度，正好放下内容；空间不够时再换行 */
table.recruit-grid th.col-stage, table.recruit-grid td.col-stage,
table.recruit-grid th.col-regimen, table.recruit-grid td.col-regimen,
table.recruit-grid th.col-mechanism, table.recruit-grid td.col-mechanism,
table.recruit-grid th.col-project, table.recruit-grid td.col-project,
table.recruit-grid th.col-progress, table.recruit-grid td.col-progress {
  width: auto; min-width: 0 !important; max-width: none;
}
table.recruit-grid th.col-criteria, table.recruit-grid td.col-criteria { min-width: 0 !important; }
table.recruit-grid td.col-regimen,
table.recruit-grid td.col-mechanism,
table.recruit-grid td.col-regimen .cell-from-project,
table.recruit-grid td.col-mechanism .cell-from-project {
  white-space: normal; overflow-wrap: anywhere; text-overflow: clip;
}
table.recruit-grid td.col-criteria .criteria-preview {
  white-space: normal; overflow-wrap: anywhere;
  display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2;
}
/* CRC：两个名字不换行，宽度正好 */
table.recruit-grid th.col-crc, table.recruit-grid td.col-crc { width: auto !important; min-width: 0 !important; max-width: none !important; white-space: nowrap !important; }
table.recruit-grid td.col-crc .cell-from-project { white-space: nowrap !important; overflow: visible; text-overflow: clip; max-width: none !important; }
/* 期别：短文本，跟在 CRC 后 */
table.recruit-grid th.col-phase, table.recruit-grid td.col-phase { width: auto !important; min-width: 0 !important; max-width: none !important; white-space: nowrap !important; }
table.recruit-grid td.col-phase .cell-from-project { white-space: nowrap !important; overflow: visible; text-overflow: clip; max-width: none !important; }
