/* Offer 海报库 / CV 库的样式：照搬签约网站 style.css 的「通用筛选 Tab」和「助签」两段 */
/* ==========================================================================
   通用筛选 Tab（不等宽版 radio-pill，用于人员/员工筛选）
   ========================================================================== */
.chip-tabs { display: flex; gap: 6px; flex-wrap: wrap; }
.chip-tab {
  border: 1px solid var(--border); background: #fff; color: var(--muted);
  padding: 6px 14px; border-radius: 999px; font-size: 12.5px; font-weight: 700;
  cursor: pointer; white-space: nowrap;
}
.chip-tab:hover { border-color: var(--primary); color: var(--primary); }
.chip-tab.active { background: var(--primary); border-color: var(--primary); color: #fff; }

/* 看板追加一列：新增销售 */
.kanban-add-col {
  align-self: start;
  border: 1.5px dashed var(--border); border-radius: var(--radius-lg);
  min-height: 140px; display: flex; align-items: center; justify-content: center;
  color: var(--muted); font-weight: 800; font-size: 13px; cursor: pointer; gap: 6px;
}
.kanban-add-col:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-soft); }


.field-note { font-size: 11px; color: var(--muted); margin-top: -8px; }


/* ==========================================================================
   助签（2026-10-21）：Offer库 三栏（学校 / 学位·方向·结果 / 海报预览）、CV库、开发中占位
   ========================================================================== */
.nav-badge-dev { margin-left: auto; font-size: 10.5px; font-weight: 700; color: var(--warning); background: var(--warning-soft); padding: 0 6px; border-radius: 999px; line-height: 1.7; }
.nav-item.active .nav-badge-dev { background: rgba(255,255,255,0.25); color: #fff; }
.assist-dev { padding: 56px 24px; text-align: center; color: var(--muted); display: flex; flex-direction: column; align-items: center; gap: 8px; }
.assist-dev .ic { font-size: 36px; }
.assist-dev b { color: var(--text); font-size: 16px; }

.ol-grid { display: grid; grid-template-columns: minmax(280px, 1fr) minmax(340px, 1.25fr) minmax(300px, 1fr); gap: 14px; height: calc(100vh - 150px); height: calc(100dvh - 150px); min-height: 660px; }
.ol-col { display: flex; flex-direction: column; gap: 12px; min-width: 0; min-height: 0; }
.ol-card { padding: 12px 14px; display: flex; flex-direction: column; gap: 8px; min-height: 0; }
.ol-fill { flex: 1 1 0; }
.ol-sel { max-height: 210px; }
.ol-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ol-head b { font-size: 14px; }
.ol-hint { font-size: 12px; color: var(--faint); }
.ol-muted { font-size: 12px; color: var(--muted); }
.ol-link { font-size: 12.5px; font-weight: 700; color: var(--primary); text-decoration: none; cursor: pointer; white-space: nowrap; }
.ol-link.muted { color: var(--muted); }
.ol-link:hover { text-decoration: underline; }
.ol-chips .chip-tab { padding: 4px 11px; font-size: 12px; }
.ol-row { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.ol-search { display: flex; align-items: center; gap: 8px; }
.ol-search .input { flex: 1; min-width: 0; height: 34px; }
.ol-list { flex: 1 1 auto; min-height: 90px; overflow-y: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 4px; background: #fff; }
.ol-empty { text-align: center; color: var(--muted); padding: 24px 8px; font-size: 13px; }
.ol-school { display: flex; align-items: center; gap: 8px; padding: 6px 8px; border-radius: 6px; cursor: pointer; user-select: none; }
.ol-school:hover { background: var(--primary-soft); }
.ol-school.sel { background: var(--hover); }
.ol-school input { pointer-events: none; margin: 0; flex: none; }
.ol-school .ol-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ol-star { width: 30px; flex: none; text-align: center; color: #A87700; font-size: 14px; }
.ol-star.lv2 { color: var(--muted); font-size: 11px; }
.ol-selrow { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 8px; padding: 5px 8px; border-radius: 6px; background: var(--primary-soft); margin-bottom: 3px; }
.ol-selrow .ol-region { color: var(--primary); font-size: 12px; flex: none; }
.ol-selrow .ol-name { flex: 1 1 110px; min-width: 110px; overflow-wrap: anywhere; }
.ol-dirpick { display: inline-flex; align-items: center; gap: 4px; flex: none; margin-left: auto; white-space: nowrap; }
.ol-selrow .ol-name.muted { color: var(--muted); }
.ol-dir-select { height: 28px; max-width: 150px; font-size: 12px; padding: 0 6px; }
.ol-rm { color: var(--muted); text-decoration: none; padding: 0 4px; flex: none; }
.ol-rm:hover { color: var(--danger); }
.ol-degree { position: relative; }
.ol-subtypes { position: absolute; left: 0; right: 0; top: calc(100% - 6px); z-index: 30; border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 10px; background: #fff; box-shadow: var(--shadow-pop); display: flex; flex-direction: column; gap: 6px; max-height: 300px; overflow-y: auto; }
.ol-subtypes[hidden] { display: none; }
.ol-sub-top { display: flex; align-items: flex-start; gap: 8px; }
.ol-sub-top .ol-muted { flex: 1; }
.ol-dirs { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 6px; }
.ol-dirs .input { height: 34px; padding: 0 8px; min-width: 0; }
.ol-danger { color: var(--danger); border-color: var(--danger); }
.ol-group { display: flex; align-items: baseline; gap: 8px; padding: 8px 6px 2px; flex-wrap: wrap; }
.ol-group b { font-size: 13.5px; }
.ol-dirtag { font-size: 12px; color: var(--primary); }
.ol-note { font-size: 12px; color: var(--muted); padding: 2px 12px 2px; }
.ol-result { display: flex; align-items: flex-start; gap: 6px; padding: 5px 6px; border-radius: 6px; cursor: pointer; }
.ol-result:hover { background: #F3F8FE; }
.ol-result.active { background: var(--hover); }
.ol-result input { margin: 4px 0 0; flex: none; cursor: pointer; }
.ol-result .ol-star { padding-top: 1px; }
.ol-rtext { flex: 1; min-width: 0; }
.ol-rname { font-weight: 700; font-size: 13px; overflow-wrap: anywhere; }
.ol-rzh { color: var(--primary); font-size: 13px; }
.ol-foot { display: flex; align-items: center; gap: 10px; }
.ol-status { flex: 1; min-width: 0; font-size: 12.5px; color: var(--primary-dark); cursor: default; overflow-wrap: anywhere; }
.ol-preview { flex: 1 1 auto; min-height: 260px; display: flex; align-items: center; justify-content: center; background: #F4F7FB; border-radius: var(--radius-sm); overflow: hidden; cursor: zoom-in; }
.ol-preview img { max-width: 100%; max-height: 100%; object-fit: contain; display: block; }
.ol-preview-empty { color: var(--muted); text-align: center; font-size: 13px; cursor: default; }
.ol-nav { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; }
.ol-nav .btn-sm { padding: 5px 8px; }
.ol-nav #ol-page { min-width: 52px; text-align: center; font-size: 12.5px; font-variant-numeric: tabular-nums; }
.ol-bottom { display: flex; gap: 8px; }
.ol-bottom .btn { flex: 1; }

.assist-enlarge { max-width: 760px; }
.assist-enlarge-body { flex: 1 1 auto; min-height: 0; overflow: auto; display: flex; justify-content: center; background: #F4F7FB; padding: 12px; }
.assist-enlarge-body img { max-width: 100%; max-height: calc(100vh - 190px); max-height: calc(100dvh - 190px); object-fit: contain; }

.cv-block { padding: 14px 16px; display: flex; flex-direction: column; gap: 8px; margin-bottom: 12px; }
.cv-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.cv-search-row .cv-kw { width: 180px; }
.cv-search-row .cv-count { width: 64px; text-align: center; }
.cv-status { font-size: 12.5px; color: var(--muted); overflow-wrap: anywhere; }
.cv-results { display: flex; flex-direction: column; gap: 10px; }
.cv-placeholder { color: var(--muted); text-align: center; padding: 60px 0; }
/* 搜索结果一次全部铺开、居中；每排几张由 assist.js layoutCvGrid 按份数和屏幕宽度算（5 份 3+2、8 份 4+4） */
.cv-grid { display: grid; gap: 14px; justify-content: center; }
.cv-result { padding: 12px 14px; display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.cv-title { font-weight: 700; display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.cv-title .cv-name { min-width: 0; overflow-wrap: anywhere; }
.cv-title .cv-score { flex: none; font-size: 12px; color: var(--primary); }
.cv-img { aspect-ratio: 1 / 1.414; border: 1px solid var(--border); border-radius: 4px; background: #fff; overflow: hidden; display: flex; }
.cv-thumb { width: 100%; height: 100%; object-fit: contain; object-position: top; cursor: zoom-in; display: block; }
.cv-img-msg { margin: auto; padding: 12px; text-align: center; color: var(--muted); font-size: 12.5px; display: flex; flex-direction: column; gap: 8px; align-items: center; }
.cv-btns { display: flex; gap: 8px; flex-wrap: wrap; }
.cv-error { color: var(--danger); }

@media (max-width: 1280px) {
  .ol-grid { grid-template-columns: minmax(260px, 1fr) minmax(320px, 1.3fr); height: auto; min-height: 0; }
  .ol-grid > .ol-col:nth-child(1), .ol-grid > .ol-col:nth-child(2) { height: calc(100vh - 150px); height: calc(100dvh - 150px); min-height: 640px; }
  .ol-grid > .ol-col:nth-child(3) { grid-column: 1 / -1; }
  .ol-grid > .ol-col:nth-child(3) .ol-fill { flex: none; }
  .ol-grid > .ol-col:nth-child(3) .ol-preview { min-height: 480px; height: 62vh; }
}
@media (max-width: 860px) {
  .ol-grid { grid-template-columns: 1fr; }
  .ol-grid > .ol-col:nth-child(1), .ol-grid > .ol-col:nth-child(2) { height: auto; min-height: 0; }
  .ol-fill { flex: none; }
  .ol-fill .ol-list { flex: none; height: 340px; }
  .ol-dirs { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ol-grid > .ol-col:nth-child(3) .ol-preview { min-height: 360px; height: 70vh; }
  .cv-search-row .cv-kw { width: 100%; }
}

/* 上了新版、页面里正在填东西时顶上的刷新提示（见 app.js checkNewBuild） */
.update-bar {
  position: fixed; top: 10px; left: 50%; transform: translateX(-50%); z-index: 3000; max-width: calc(100vw - 32px);
  border: none; border-radius: 999px; padding: 9px 18px; background: var(--primary); color: #fff; font: inherit; font-size: 13px; font-weight: 700;
  box-shadow: var(--shadow-pop); cursor: pointer;
}
.update-bar:hover { background: var(--primary-dark); }

/* 微信号边上的复制按钮（合作方页面）：图标用 ::before 画，格子里的文字只有微信号 */
.copy-mini {
  display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; margin-left: 6px; vertical-align: middle;
  border: 1px solid var(--border); background: #fff; color: var(--primary); border-radius: 999px; cursor: pointer; font-size: 11px; line-height: 1;
}
.copy-mini::before { content: "⧉"; }
.copy-mini:hover { border-color: var(--primary); background: var(--primary-soft); }
.copy-mini.copied { background: var(--success); border-color: var(--success); color: #fff; }
.copy-mini.copied::before { content: "✓"; }

/* 表格底下的「显示全部 N 条 / 收起」 */
.table-more { display: flex; justify-content: center; }
.table-more > button { margin: 6px 0 10px; }

/* 考勤：不在办公室网络打的卡（只给 Simon / Sunny 看） */
.att-away { color: var(--danger); font-weight: 700; }
.att-office { font-size: 11.5px; color: var(--muted); display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px; }
.att-office-ip { display: inline-flex; align-items: center; gap: 2px; background: var(--hover); color: var(--primary-dark); border-radius: 999px; padding: 1px 4px 1px 8px; font-weight: 700; }
.att-office-ip button { border: none; background: transparent; color: var(--muted); cursor: pointer; font-size: 10px; padding: 1px 3px; border-radius: 50%; }
.att-office-ip button:hover { color: var(--danger); }
.att-office-add { padding: 2px 8px; font-size: 11px; }

/* 合作方「我推送的客资」：日历 + 当天 / 本周 / 本月，精推、膜拜各一张表（2026-10-23） */
.ml-range { margin-top: 14px; justify-content: center; }
.ml-main { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.ml-range-title { font-size: 13px; font-weight: 800; color: var(--text); }
.ml-tt { display: inline-flex; }
.ml-tc { font-size: 12px; color: var(--muted); font-weight: 700; }
.ml-empty { color: var(--faint); font-size: 12.5px; text-align: center; padding: 18px 0; }
.data-table tbody tr.ml-pending { background: #FDF2F1; }          /* 没加上 / 未确认：淡淡标红 */
.data-table tbody tr.ml-pending:hover { background: #FBE8E6; }
.cal-day.in-week { box-shadow: inset 0 0 0 2px rgba(30,95,168,0.45); }

/* 合作方「高意向（汇总）」（2026-10-24，九万里山海）：一个九万里销售一块，里面只有微信号 */
.th-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px; padding: 14px 16px 16px; align-items: start; }
.th-grid:empty { display: none; }
.th-card { border: 1px solid var(--border); border-radius: var(--radius-sm); background: #fff; overflow: hidden; }
.th-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 9px 12px; background: var(--primary-soft); }
.th-name { font-weight: 800; color: var(--primary-dark); font-size: 13.5px; overflow-wrap: anywhere; }
.th-n { font-size: 12px; font-weight: 700; color: var(--primary); flex: none; }
.th-list { padding: 4px 12px 8px; }
.th-wechat { font-size: 13px; font-weight: 700; color: var(--text); padding: 6px 0; border-bottom: 1px dashed #EEF3F9; overflow-wrap: anywhere; }
.th-wechat:last-child { border-bottom: none; }

/* 合作方「推送建议」 */
/* 一个人一行：左边名字 + 大类（固定宽），右边方向一个个排开（2026-10-23 改，原来三张卡片空白太多） */
.guide-list { padding: 0; }
.guide-row { display: grid; grid-template-columns: 132px 1fr; gap: 16px; padding: 14px 18px; align-items: start; }
.guide-row + .guide-row { border-top: 1px solid #EEF3F9; }
.guide-who { display: flex; flex-direction: column; align-items: flex-start; gap: 5px; }
.guide-name { font-size: 16px; font-weight: 800; color: var(--primary-dark); line-height: 1.2; }
.guide-tag { font-size: 12px; font-weight: 800; color: var(--primary); background: var(--primary-soft); border-radius: 999px; padding: 2px 9px; }
.guide-fields { display: flex; flex-wrap: wrap; gap: 6px; }
.guide-field { font-size: 12.5px; background: #F4F7FB; border: 1px solid var(--border); border-radius: 999px; padding: 2px 10px; color: var(--text); line-height: 20px; }
.guide-tip { display: inline-block; margin-bottom: 12px; padding: 6px 14px; font-size: 13px; font-weight: 800; color: var(--warning); background: var(--warning-soft); border: 1px solid #F0D9A8; border-radius: 999px; }
@media (max-width: 640px) { .guide-row { grid-template-columns: 1fr; gap: 8px; } .guide-who { flex-direction: row; align-items: center; } }

/* 新媒体日报的比率（回复率 / 添加率，都 ÷ 拓客；2026-10-23） */
.media-sheet .sheet-rate, .media-table .media-rate { color: var(--primary); font-weight: 700; }
.media-sheet tfoot tr.sheet-rate-row td { font-size: 11.5px; }
.media-my-rates { margin-top: 8px; font-size: 12.5px; font-weight: 700; color: var(--primary); }
.media-my-rates:empty { display: none; }

/* 班表（2026-10-23，照后端 GUI 的「后端每日班表」）：左边小日历 + 人员，右边 日 / 周 / 月 */
.shift-layout { display: grid; grid-template-columns: 250px minmax(0, 1fr); gap: 16px; align-items: start; }
.shift-side { padding: 14px 14px 12px; }
.mc-nav { display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; }
.mc-nav button { border: none; background: transparent; font-size: 18px; color: var(--muted); width: 30px; height: 28px; border-radius: 8px; cursor: pointer; }
.mc-nav button:hover { background: var(--hover); color: var(--primary); }
.mc-title { font-weight: 800; font-size: 14px; color: var(--text); }
.mini-cal { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; text-align: center; }
.mc-wd { font-size: 11px; color: var(--muted); padding: 2px 0 4px; }
.mc-wd.we, .mc-day.we { color: var(--danger); }
.mc-day { font-size: 12.5px; color: var(--text); line-height: 28px; border-radius: 7px; cursor: pointer; }
.mc-day:hover { background: var(--hover); }
.mc-day.out { color: var(--faint); }
.mc-day.has { text-decoration: underline; text-underline-offset: 3px; }
.mc-day.today { background: var(--hover); color: var(--primary); font-weight: 800; }
.mc-day.sel { background: var(--primary); color: #fff; font-weight: 800; }
.sh-leg-title { font-size: 12px; color: var(--muted); margin: 16px 2px 6px; }
.sh-leg-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 3px 2px; }
.sh-leg-n { font-size: 12px; color: var(--text); font-weight: 700; flex: none; }
.sh-leg-n.none { color: var(--muted); font-weight: 400; }
.shift-bar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 12px; }
.sh-nav { border: 1px solid var(--border); background: #EEF3F9; color: var(--text); height: 30px; min-width: 30px; padding: 0 9px; border-radius: 8px; font-size: 14px; cursor: pointer; }
.sh-nav:hover { background: var(--hover); }
.sh-nav.txt { font-size: 12.5px; }
.shift-range { font-size: 16px; font-weight: 800; color: var(--text); margin-left: 6px; }
.sh-chip { display: inline-flex; align-items: center; gap: 4px; padding: 3px 9px; border-radius: 6px; font-size: 13px; line-height: 1.35; max-width: 100%; overflow-wrap: anywhere; }
.sh-chip.sm { font-size: 11.5px; padding: 1px 6px; border-radius: 5px; }
.sh-chip.lg { font-size: 16px; padding: 6px 14px; border-radius: 8px; }
.sh-chip.me { font-weight: 800; }
.sh-chip[draggable="true"] { cursor: grab; }
.sh-chip.dragging { opacity: .4; }
.sh-x { border: none; background: #3A4656; color: #fff; font-size: 11px; font-weight: 800; width: 16px; height: 16px; border-radius: 4px; line-height: 16px; padding: 0; cursor: pointer; flex: none; }
.sh-chips { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.sh-none { font-size: 12px; color: var(--faint); }
.sh-plus { border: 1px dashed var(--border); background: #fff; color: var(--primary); width: 26px; height: 24px; border-radius: 6px; cursor: pointer; font-size: 13px; padding: 0; }
.sh-plus:hover { border-color: var(--primary); }
.sh-addlist { flex-basis: 100%; display: flex; flex-wrap: wrap; gap: 4px; padding: 6px; background: #F3F7FC; border: 1px solid #B9CCE6; border-radius: 8px; }
.sh-addone { border: 1px solid var(--border); background: #fff; border-radius: 6px; font-size: 12px; padding: 2px 8px; cursor: pointer; color: var(--text); }
.sh-addone:hover { border-color: var(--primary); color: var(--primary); }
.shift-tray { background: #F3F7FC; border: 1px solid #B9CCE6; border-radius: var(--radius); padding: 8px 12px 10px; margin-bottom: 12px; }
.sh-tray-tip { font-size: 12px; color: #3E4C5E; margin-bottom: 6px; }
.shw-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 6px; }
.shw-cell { background: var(--panel); border: 1px solid #E3EAF3; border-radius: 8px; min-height: 380px; padding: 8px; cursor: pointer; }
.shw-cell.we { background: #FAFBFD; }
.shw-cell.sel { border-color: #9DB8DE; }
.shw-head { display: flex; align-items: center; justify-content: space-between; gap: 4px; margin-bottom: 8px; }
.shw-wd { font-size: 12px; color: var(--muted); }
.shw-cell.we .shw-wd { color: var(--danger); }
.shw-num { font-size: 14px; font-weight: 800; color: var(--text); padding: 1px 5px; border-radius: 4px; }
.shw-num.today { background: var(--primary); color: #fff; }
.shm-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px; }
.shm-wd { font-size: 12px; color: var(--muted); padding: 0 6px 2px; }
.shm-wd.we { color: var(--danger); }
.shm-cell { background: var(--panel); border: 1px solid #EEF2F7; border-radius: 6px; min-height: 78px; padding: 4px 5px 6px; cursor: pointer; min-width: 0; }
.shm-cell.out { background: #FAFBFD; cursor: default; }
.shm-cell.out .shm-num { color: var(--faint); }
.shm-cell.sel { border-color: #9DB8DE; }
.shm-num { display: inline-block; font-size: 12px; color: var(--text); margin-bottom: 3px; padding: 0 4px; border-radius: 4px; }
.shm-cell.we .shm-num { color: var(--danger); }
.shm-num.today, .shm-cell.we .shm-num.today { background: var(--primary); color: #fff; font-weight: 800; }
.shm-cell .sh-chips { gap: 3px; }
.shm-dots { display: none; }
.shd-box { background: var(--panel); border: 1px solid #E3EAF3; border-radius: var(--radius); padding: 18px 20px 20px; min-height: 240px; }
.shd-count { font-size: 13px; color: var(--muted); margin-bottom: 12px; }
.shd-box .sh-chips { gap: 10px; }
.shd-off { margin-top: 18px; font-size: 13px; color: var(--muted); }
#shift-content.editing .shw-cell, #shift-content.editing .shm-cell { cursor: default; }
.drop-hover { outline: 2px dashed var(--primary); outline-offset: -2px; background: #F3F7FC !important; }
.sh-rules-tip { font-size: 12.5px; color: var(--muted); margin: 0 0 10px; }
.sh-rule { display: flex; align-items: center; gap: 12px; padding: 8px 0; border-top: 1px solid #EEF3F9; flex-wrap: wrap; }
.sh-rule .sh-chip { min-width: 72px; justify-content: center; }
.sh-rule .chip-tab.busy { opacity: .5; }
/* 窄一点（1180 以下）：小日历和人员挪到上面并排，右边一周 7 列才放得下名字 */
@media (max-width: 1180px) {
  .shift-layout { grid-template-columns: 1fr; }
  .shift-side { display: grid; grid-template-columns: minmax(0, 280px) minmax(0, 1fr); column-gap: 28px; }
  .shift-side .sh-leg-title { margin-top: 4px; }
  #shift-legend { display: flex; flex-wrap: wrap; column-gap: 28px; }
  #shift-legend .sh-leg-row { justify-content: flex-start; gap: 10px; }
}
@media (max-width: 1180px) { .shift-side.no-leg { grid-template-columns: minmax(0, 320px); } }
@media (max-width: 600px) { .shift-side, .shift-side.no-leg { grid-template-columns: 1fr; } .shift-side .sh-leg-title { margin-top: 14px; } }
@media (max-width: 760px) {
  .shw-grid { grid-template-columns: 1fr; }
  .shw-cell { min-height: 0; }
  .shm-grid { gap: 2px; }
  .shm-wd { padding: 0 2px 2px; font-size: 11px; }
  .shm-cell { min-height: 56px; padding: 3px 2px; }
  .shm-cell .sh-chip.sm { font-size: 10.5px; padding: 1px 3px; }
}
@media (max-width: 600px) {
  .shm-cell .sh-chips { display: none; }
  .shm-dots { display: flex; flex-wrap: wrap; gap: 3px; padding: 2px 1px; cursor: pointer; }
  .shm-dots i { display: block; width: 8px; height: 8px; border-radius: 50%; }
}

/* 密码统计（只有主账号） */
.pwall-pw { font-family: Consolas, "SFMono-Regular", Menlo, monospace; font-weight: 700; background: #F4F7FB; padding: 2px 8px; border-radius: 6px; }
.pwall-set { display: inline-flex; gap: 6px; flex-wrap: nowrap; }
.pwall-set .input { width: 150px; flex: none; padding: 6px 10px; }
.pwall-count { font-size: 12px; color: var(--muted); }
.data-table tr.pwall-off td { color: var(--muted); }

/* 拖待签约卡片时底部浮出的「去哪里」面板（2026-10-24）：一列一个销售，四行 T0 / T1 / T2 / 签约；平时藏着，拖的时候升上来 */
.drag-palette { position: fixed; left: 260px; right: 176px; bottom: 16px; z-index: 60; background: var(--panel); border: 1px solid var(--border);
  border-radius: 16px; box-shadow: var(--shadow-pop); padding: 10px 14px 14px; visibility: hidden; opacity: 0; transform: translateY(24px);
  transition: transform .16s ease, opacity .16s ease, visibility 0s linear .16s; }
.drag-palette.open { visibility: visible; opacity: 1; transform: none; transition: transform .16s ease, opacity .16s ease; }
/* 鼠标在屏幕下半部分拖的时候，面板放到上面（顶栏下面），不压在鼠标底下（2026-10-24） */
.drag-palette.top { top: 96px; bottom: auto; }
.drag-palette.top:not(.open) { transform: translateY(-24px); }
.dp-head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 8px; min-width: 0; }
.dp-title { font-weight: 800; font-size: 14px; color: var(--text); flex: none; }
.dp-wechat { font-weight: 800; font-size: 13px; color: var(--primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.dp-hint { font-size: 12px; color: var(--muted); margin-left: auto; flex: none; }
.dp-grid { display: grid; gap: 6px; }
.dp-owner { font-size: 13px; font-weight: 800; color: var(--text); text-align: center; padding: 2px 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dp-owner.mine { color: var(--primary); }
.dp-row-label { font-size: 12px; font-weight: 800; color: var(--muted); display: flex; align-items: center; white-space: nowrap; }
.dp-row-label.sign { color: var(--success); }
.dp-cell { height: 40px; border: 1.5px dashed var(--border); border-radius: 10px; display: flex; align-items: center; justify-content: center; padding: 0 6px;
  font-size: 12.5px; font-weight: 800; color: var(--primary); background: #F8FAFD; text-align: center; line-height: 1.2; overflow: hidden; }
.dp-cell.sign { border-color: #9FD3AE; background: var(--success-soft); color: var(--success); }
.dp-cell.here { border-style: solid; background: var(--hover); color: var(--primary); }
.dp-cell.hot { border-style: solid; border-color: var(--primary); background: var(--primary); color: #fff; }
.dp-cell.sign.hot { border-color: var(--success); background: var(--success); color: #fff; }
@media (max-width: 1100px) { .dp-hint { display: none; } }
@media (max-width: 900px) { .drag-palette { left: 12px; right: 12px; } }

/* 签约信息（2026-10-24）：签约后销售填，交给后端建档 */
.stu-who { font-size: 12.5px; color: var(--muted); margin-bottom: 12px; line-height: 1.6; }
.stu-ok { color: var(--success); }
.stu-progs { display: flex; flex-direction: column; gap: 6px; }
.stu-prog { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; min-height: 32px; }
.stu-prog .check-inline { min-width: 92px; font-weight: 700; }
.stu-roles { display: inline-flex; gap: 6px; flex-wrap: wrap; }
.stu-roles .chip-tab { padding: 3px 10px; font-size: 12px; }
.stu-roles.off, .stu-count.off { opacity: .35; }
.stu-count { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--muted); }
.stu-count .input { width: 72px; padding: 5px 8px; }
.stu-status { margin-top: 8px; font-size: 12px; color: var(--primary-dark); background: var(--primary-soft); padding: 8px 10px; border-radius: 8px; }
.lc-need { margin-top: 6px; border: 1px dashed var(--danger); background: var(--danger-soft); color: var(--danger); font-size: 11.5px; font-weight: 800;
  border-radius: 999px; padding: 2px 10px; cursor: pointer; }
.lc-need:hover { background: var(--danger); color: #fff; }
.lc-stu { margin-top: 6px; font-size: 12px; font-weight: 700; color: var(--text); }
.stu-no { font-size: 11px; font-weight: 700; color: var(--primary); background: var(--primary-soft); border-radius: 999px; padding: 0 6px; margin-left: 4px; }
.stu-cell { border: none; background: transparent; padding: 0; font: inherit; font-weight: 700; color: var(--text); cursor: pointer; text-align: left; }
.stu-cell:hover { color: var(--primary); }
.stu-box { border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; margin-bottom: 12px; background: #F8FAFD; }
.stu-box-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; font-size: 13px; margin-bottom: 4px; }
.stu-box-body { font-size: 12.5px; color: var(--text); line-height: 1.6; }
.stu-box-note { color: var(--muted); }
.stu-box-prog { color: var(--primary-dark); font-weight: 700; margin-top: 2px; }
.stu-missing { color: var(--danger); }

