:root{
  --blue:#2563eb; --blue-d:#1d4ed8; --blue-l:#eff6ff; --blue-b:#c7d7f5;
  --t1:#1a2230; --t2:#475569; --t3:#94a3b8;
  --bg:#f4f6fa; --line:#e5e7eb; --line2:#f1f5f9;
  --ok:#16a34a; --warn:#f59e0b; --bad:#dc2626;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{font-family:"Microsoft YaHei","PingFang SC","Helvetica Neue",Arial,sans-serif;
  background:var(--bg);color:var(--t1);font-size:14px}
a{text-decoration:none;color:inherit}
.hidden{display:none !important}

/* ══════════ 登录页 ══════════ */
.auth{min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#eef4ff 0%,#f7f9fd 60%,#eef7ff 100%)}
.auth .box{width:400px;background:#fff;border-radius:16px;padding:34px 34px 26px;
  box-shadow:0 20px 50px rgba(37,99,235,.13);border:1px solid #e8eefb}
.auth .brand{font-size:12.5px;color:var(--blue);font-weight:600;letter-spacing:.4px}
.auth h1{margin:7px 0 20px;font-size:22px;letter-spacing:.5px}
.auth .sub{font-size:12.5px;color:var(--t3);margin-bottom:22px;line-height:1.6}
.auth label{display:block;font-size:12.5px;color:var(--t2);margin:0 0 5px}
.auth input{width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:9px;
  font-size:14px;outline:none;transition:.15s;font-family:inherit}
.auth input:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,99,235,.12)}
.auth .fld{margin-bottom:14px}
.auth button{width:100%;padding:12px;border:0;border-radius:9px;background:var(--blue);
  color:#fff;font-size:15px;font-family:inherit;cursor:pointer;margin-top:6px;transition:.15s}
.auth button:hover{background:var(--blue-d)}
.auth .err{background:#fef2f2;border:1px solid #fecaca;color:#b91c1c;font-size:12.5px;
  padding:9px 12px;border-radius:8px;margin-bottom:14px}
.auth .ok{background:#f0fdf4;border:1px solid #bbf7d0;color:#15803d;font-size:12.5px;
  padding:9px 12px;border-radius:8px;margin-bottom:14px}
.auth .foot{font-size:11.5px;color:var(--t3);margin-top:18px;line-height:1.7;
  border-top:1px solid var(--line2);padding-top:14px}

/* ══════════ 顶栏 ══════════ */
header{height:52px;background:#fff;border-bottom:1px solid var(--line);
  display:flex;align-items:center;padding:0 18px;gap:14px;position:sticky;top:0;z-index:20}
header .logo{font-size:15px;font-weight:600;letter-spacing:.3px}
header .logo span{color:var(--blue)}
header .role{font-size:11.5px;padding:2px 9px;border-radius:11px;
  background:var(--blue-l);color:var(--blue-d);border:1px solid var(--blue-b)}
header .me{margin-left:auto;display:flex;align-items:center;gap:10px;font-size:12.5px;color:var(--t2)}
header .avatar{width:28px;height:28px;border-radius:50%;background:var(--blue);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:11.5px}
header .navlink{font-size:12.5px;color:var(--t2);padding:5px 10px;border-radius:7px}
header .navlink:hover{background:var(--line2);color:var(--t1)}

/* ══════════ 三栏骨架 ══════════ */
.layout{display:flex;height:calc(100vh - 52px);align-items:stretch}
.col{overflow-y:auto;background:#fff}
.c-left{width:266px;flex:0 0 266px;border-right:1px solid var(--line);padding:14px 14px 24px;
  transition:flex-basis .16s ease,width .16s ease,padding .16s ease}
/* 左栏整体收起（对齐原型 v13 .c-left.mini）：只留一条 38px 窄条 + 垂直切换按钮 */
.c-left.mini{flex-basis:40px;width:40px;padding:6px 0 14px;overflow:hidden}
.c-left.mini .hideable{display:none!important}
.c-left.mini .mini-btn{writing-mode:vertical-lr;letter-spacing:2px;writing-mode:vertical-rl;
  height:auto;padding:10px 0}
.mini-btn{display:flex;align-items:center;gap:6px;width:100%;border:0;background:none;
  color:#94a3b8;font-size:12px;cursor:pointer;padding:0 2px 10px;justify-content:flex-start}
.mini-btn:hover{color:var(--blue-d)}
.mini-btn .ic{font-size:13px;line-height:1}
.c-mid{width:352px;flex:0 0 352px;border-right:1px solid var(--line);display:flex;flex-direction:column;overflow:hidden}
.c-right{flex:1;background:var(--bg)}

/* 左栏 */
.sec{margin-bottom:16px}
.sec-t{font-size:11px;color:var(--t3);margin:0 0 8px;font-weight:600;letter-spacing:.4px}
.f{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:7px;font-size:12.5px;
  color:var(--t2);cursor:pointer;border:1px solid transparent}
.f:hover{background:var(--line2)}
.f.on{background:var(--blue-l);border-color:var(--blue-b);color:var(--blue-d);font-weight:500}
.f .chk{width:14px;height:14px;border:1px solid #cbd5e1;border-radius:4px;font-size:10px;
  display:flex;align-items:center;justify-content:center;color:#fff;flex:0 0 14px;background:#fff}
.f.on .chk{background:var(--blue);border-color:var(--blue)}
.f .n{margin-left:auto;font-size:11px;color:var(--t3)}
.f.on .n{color:var(--blue-d)}
.scope{display:flex;gap:6px}
.scope a{flex:1;text-align:center;padding:6px 0;font-size:12.5px;border-radius:7px;
  border:1px solid var(--line);color:var(--t2);background:#fff}
.scope a.on{background:var(--blue);color:#fff;border-color:var(--blue)}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chips a{font-size:12px;padding:4px 10px;border-radius:12px;border:1px solid var(--line);
  color:var(--t2);background:#fff}
.chips a.on{background:var(--blue-l);border-color:var(--blue-b);color:var(--blue-d);font-weight:500}
.health{font-size:11.5px;color:var(--t2);line-height:1.65}
.health .row{padding:6px 0;border-bottom:1px dashed var(--line2)}
.health .row:last-child{border-bottom:0}
.health b{color:var(--t1);font-weight:600}
.health .nt{color:var(--t3);display:block;margin-top:2px}
.note{font-size:11.5px;color:var(--t3);line-height:1.7;background:#f8fafc;border:1px dashed #cbd5e1;
  border-radius:8px;padding:9px 11px}

/* 中栏 */
.mid-head{padding:13px 14px 10px;border-bottom:1px solid var(--line2);background:#fff}
.mid-head h2{margin:0;font-size:15px;display:flex;align-items:center;gap:8px}
.mid-head h2 .cnt{font-size:12px;color:var(--t3);font-weight:400}
.wb{display:flex;padding:9px 8px;border-bottom:1px solid var(--line2);background:#f8faff}
.wb div,.wb a{flex:1;text-align:center;text-decoration:none;color:inherit;display:block}
.wb-c{cursor:pointer;border-radius:7px;padding:1px 2px;transition:.12s}
.wb-c:hover{background:#eef4ff}
.wb-c.on{background:var(--blue-l);box-shadow:inset 0 0 0 1px var(--blue-b)}
.wb-c .t{text-decoration:underline dotted;text-underline-offset:2px}
.wb-week{font-size:10.5px;color:var(--t3);background:#f8faff;padding:5px 12px 7px;
  border-bottom:1px solid var(--line2)}
.wb .n{font-size:15px;font-weight:600}
.wb .t{font-size:10.5px;color:var(--t3);margin-top:1px}
.mid-filter{padding:9px 12px 10px;border-bottom:1px solid var(--line2);background:#fff}
.search{width:100%;padding:8px 11px;border:1px solid var(--line);border-radius:8px;font-size:13px;
  outline:none;font-family:inherit}
.search:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,99,235,.10)}
.ssel{display:flex;gap:7px;margin-top:7px}
.ssel select{flex:1;padding:6px 8px;border:1px solid var(--line);border-radius:7px;
  font-size:12.5px;background:#fff;color:var(--t2);font-family:inherit}
/* ── 考季多选（2026-10-06 需求5）──
   ⚠️ 浮层用 **position:fixed**：中栏 `.c-mid` 是 `overflow:hidden`（第 64 行），
   absolute 浮层会被**直接裁掉**——同一个坑当天在 entry.html 的 .et-card 上刚踩过一次。
   fixed 相对视口定位，彻底避开所有祖先裁剪；坐标由 JS 按触发器 rect 算。 */
.mssel{position:relative;flex:1;min-width:0}
.mssel-hd{display:flex;align-items:center;gap:6px;padding:6px 8px;border:1px solid var(--line);
  border-radius:7px;font-size:12.5px;color:var(--t2);background:#fff;cursor:pointer;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-height:31px;box-sizing:border-box}
.mssel-hd:hover{border-color:var(--blue)}
.mssel-hd .ph{color:#b6bec9}
.mssel-hd .ar{margin-left:auto;font-size:10px;color:var(--t3)}
.mssel-pop{position:fixed;z-index:1200;display:none;background:#fff;border:1px solid var(--line);
  border-radius:9px;box-shadow:0 8px 26px rgba(15,23,42,.16);
  max-height:264px;overflow-y:auto;padding:5px}
.mssel-pop.on{display:block}
.mssel-opt{display:flex;align-items:center;gap:9px;padding:7px 9px;border-radius:7px;
  cursor:pointer;font-size:12.5px;white-space:nowrap}
.mssel-opt:hover{background:#f6f9ff}
.mssel-opt.on{background:#eaf1ff}
.mssel-box{width:14px;height:14px;border:1px solid #cbd5e1;border-radius:4px;flex:0 0 14px;
  display:flex;align-items:center;justify-content:center;font-size:10px;color:#fff;background:#fff}
.mssel-opt.on .mssel-box{background:#2563eb;border-color:#2563eb}
.mssel-all{padding:8px 9px;font-size:12px;color:#2563eb;cursor:pointer;
  /* 2026-10-06：实线 #eef2f7 太淡，看起来像"又一个选项" → 改虚线，与管理端 .ms-add 一致 */
  border-top:1px dashed #d8e0ec;margin-top:4px;font-weight:500}
.mssel-all:hover{background:#f6f9ff}
.list{flex:1;overflow-y:auto}
.item{padding:10px 13px;border-bottom:1px solid var(--line2);cursor:pointer}
.item:hover{background:#fafcff}
.item.on{background:var(--blue-l);border-left:3px solid var(--blue);padding-left:10px}
.l1{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.l1 .nm{font-size:13.5px;font-weight:600}
.l2{display:flex;justify-content:space-between;font-size:11.5px;color:var(--t3);margin-top:4px}
.prog{font-size:11.5px;color:var(--t2);margin-top:5px;display:flex;align-items:center;gap:3px}
.dot{width:6px;height:6px;border-radius:50%;display:inline-block;margin-right:3px}
.badge{font-size:10.5px;padding:1px 7px;border-radius:10px;white-space:nowrap}
.b-ok{background:#dcfce7;color:#15803d}
.b-warn{background:#fef3c7;color:#b45309}
.b-bad{background:#fee2e2;color:#b91c1c}
.b-info{background:#dbeafe;color:#1d4ed8}
.b-gray{background:#f1f5f9;color:#64748b}
.tag{font-size:10.5px;padding:1px 7px;border-radius:9px;background:#f1f5f9;color:var(--t2)}
.due{color:#b91c1c;font-weight:600}
.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;
  height:100%;color:var(--t3);gap:10px;font-size:13px;text-align:center;padding:30px}
.empty .big{font-size:34px;opacity:.25}
.empty .ti{font-size:14px;color:var(--t2)}
.flash{background:#fffbeb;border:1px solid #fde68a;border-radius:9px;padding:9px 12px;
  font-size:12px;color:#92400e;line-height:1.7;margin-bottom:12px}

/* ══════════ 学生详情面板（第 2 步）══════════ */
.dp{height:100%;display:flex;flex-direction:column;background:var(--bg)}
/* 详情顶栏（2026-09-27 两行化：主信息一行 / 次要信息一行，避免挤成一团） */
.dp-bar{display:block;padding:11px 16px 9px;background:#fff;border-bottom:1px solid var(--line)}
.dp-r1{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.dp-r2{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:5px;
  font-size:11.5px;color:var(--t3)}
.dp-r2 .sep{color:#cbd5e1}
.dp-sp{flex:1 1 12px;min-width:12px}
i.adm-d{font-style:normal;color:#4d7c0f;margin-left:3px}
.dp-name{font-size:16px;font-weight:600}
.dp-meta{font-size:12px;color:var(--t2);margin-left:4px}
.dp-sub{font-size:11.5px;color:var(--t3);margin-left:auto}
.dp-close{width:26px;height:26px;border-radius:7px;background:#f3f4f6;color:var(--t2);
  display:flex;align-items:center;justify-content:center;font-size:13px;margin-left:6px}
.dp-close:hover{background:#e5e7eb}
.dp-body{flex:1;overflow-y:auto;padding:13px 16px 24px}
.standalone{max-width:1000px;margin:0 auto;height:calc(100vh - 52px)}
.card{background:#fff;border:1px solid var(--line);border-radius:11px;margin-bottom:12px}
.card-h{display:flex;align-items:center;gap:8px;padding:11px 14px;border-bottom:1px solid var(--line2);
  font-size:13.5px;font-weight:600}
.card-h .r{margin-left:auto;font-size:11.5px;color:var(--t3);font-weight:400}
.card-b{padding:12px 14px}
.grp2{border:1px solid var(--line2);border-radius:9px;margin-bottom:7px;padding:0 12px;background:#fff}
.grp2 summary{display:flex;align-items:center;gap:9px;padding:9px 0;font-size:13px;cursor:pointer;font-weight:500}
.grp2 .gsrc{font-size:10.5px;padding:1px 7px;border-radius:9px;background:#f1f5f9;color:var(--t2);font-weight:400}
.grp2 .gcount{margin-left:auto;font-size:11px;color:var(--t3)}
.kv2{display:grid;grid-template-columns:auto 1fr auto 1fr;gap:6px 14px;padding:4px 0 12px;font-size:12.5px}
.k2{color:var(--t3);font-size:11.5px;white-space:nowrap}
.v2{color:var(--t1);min-width:0;word-break:break-all}
.v2.empty2{color:#cbd5e1}
.vsrc{font-size:10px;color:#94a3b8;margin-left:5px}
.tbl{width:100%;border-collapse:collapse;font-size:12.5px;margin-top:8px}
.tbl th{text-align:left;font-weight:500;color:var(--t3);font-size:11.5px;padding:7px 8px;
  border-bottom:1px solid var(--line);white-space:nowrap}
.tbl td{padding:8px;border-bottom:1px solid var(--line2);vertical-align:middle}
.tbl tr:hover td{background:#fafcff}
.tbl .mono{font-size:11.5px;color:var(--t2)}
.note{font-size:12px;color:var(--t3);line-height:1.75;background:#f8fafc;
  border:1px dashed #cbd5e1;border-radius:8px;padding:9px 12px}
@media (max-width:1100px){.kv2{grid-template-columns:auto 1fr}}

/* ══════════ 操作按钮 / 编辑入口（第 3 步补：此前从未定义，导致入口不可见）══════════ */
.act{padding:5px 12px;border:1px solid var(--line);border-radius:7px;background:#fff;color:var(--t2);
  font-size:12.5px;font-family:inherit;cursor:pointer;transition:.12s;cursor:pointer}
.act:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-l)}
.btn-primary{padding:6px 15px;border:0;border-radius:8px;background:var(--blue);color:#fff;
  font-size:12.5px;font-family:inherit;cursor:pointer;
  box-shadow:0 1px 3px rgba(37,99,235,.3);transition:.12s}
.btn-primary:hover{background:var(--blue-d);box-shadow:0 2px 7px rgba(37,99,235,.35)}
/* 组头的「✎ 修改」——必须看起来像按钮，否则班主任找不到入口 */
.gedit{font-size:11.5px;padding:2px 10px;border:1px solid #c7d7f5;border-radius:12px;
  background:#f4f8ff;color:var(--blue-d);cursor:pointer;white-space:nowrap;
  margin-left:8px;transition:.12s;text-decoration:none}
.gedit:hover{background:var(--blue);color:#fff;border-color:var(--blue)}
.glock{font-size:11px;color:var(--t3);margin-left:8px}
/* 卡片头允许换行：否则长说明会把右侧按钮挤没 */
.card-h{flex-wrap:wrap;row-gap:6px}

/* ─────────── 第2b步 学校与博导（对齐原型 v13） ─────────── */
.sch{border:1px solid var(--line);border-radius:9px;margin-bottom:7px;overflow:hidden}
.sch-h{display:flex;align-items:center;gap:9px;padding:9px 12px;cursor:pointer;background:#fbfcfe}
.sch-h:hover{background:#f6f8fc}
.sch-h .ar{color:var(--t3);font-size:10px;transition:.15s;display:inline-block}
.sch.on .sch-h .ar{transform:rotate(90deg)}
.sch-h .sn{font-weight:500}
.sch-h .sd{font-size:11.5px;color:var(--t3)}
.sch-h .st{margin-left:auto;display:flex;gap:5px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.sch-b{display:none;border-top:1px solid var(--line2)}
.sch.on .sch-b{display:block}
/* 学校与博导工具栏：第一行=考季范围+展开/折叠；第二行=筛选项（分两行，避免错位） */
.tfbar{display:flex;flex-direction:column;gap:6px;padding:2px 2px 10px;
  border-bottom:1px dashed var(--line2);margin-bottom:8px}
.tfrow{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.tchip2{font-size:11.5px;padding:3px 11px;border-radius:14px;border:1px solid var(--line);
  background:#fff;color:var(--t2);cursor:pointer}
.tchip2:hover{border-color:var(--blue);color:var(--blue)}
.tchip2.on{background:var(--blue);border-color:var(--blue);color:#fff}
.tchip2.clr{border-style:dashed;color:var(--t3)}
/* ─── 考季筛选（学校与博导）─── */
.tut-season{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--t2)}
.tut-season label{font-size:11.5px;color:var(--t3)}
.tut-season select{font-size:11.5px;padding:2px 6px;border:1px solid var(--line);border-radius:14px;
  background:#fff;color:var(--blue);font-weight:600;outline:none;max-width:230px;cursor:pointer}
.tut-season select:hover{border-color:var(--blue)}
.tut-season-hint{font-size:11px;color:var(--t3)}
.tut{display:flex;align-items:center;gap:10px;padding:9px 12px 9px 24px;border-bottom:1px solid #f6f8fb}
.tut:last-child{border-bottom:0}
.tut:hover{background:#fafbfe}
.tut .tn{font-weight:500;min-width:62px;cursor:pointer}
.tut .tmail{font-size:11px;color:#64748b;max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;border-bottom:1px dashed #cbd5e1;flex:0 0 auto}
.tut .tmail:hover{color:#1d4ed8;border-bottom-color:#93c5fd}
/* 行内图标统一 14px 盒（2026-10-28）：原来用 emoji，📌 字形天生偏大 ⇒ 三个不成比例。
   现在三枚都是 24 视框描边 SVG，宽高与线宽完全一致。 */
/* 实心图标（Remix fill）：16px 盒 + 14px 图标。
   🔴 「太浅」的根因是一直用 opacity 压淡（曾到 .26）—— 改用中灰 #94a3b8 + opacity .8，
      靠"颜色不抢眼"而不是"整体透明"来做低调，实心填充在 14px 下才看得清。 */
.tut .tmedit{color:#94a3b8;cursor:pointer;margin-left:2px;opacity:.8;
  display:inline-flex;align-items:center;justify-content:center;
  width:16px;height:16px;border-radius:3px;
  transition:opacity .12s,color .12s,background .12s}
.tut .tmedit:hover{background:#eff6ff}
.tut .tmedit svg,.pinbtn svg{width:14px;height:14px;display:block;pointer-events:none}
.tut:hover .tmedit{opacity:1}
.tut .tmedit:hover{color:#2563eb}
/* 多次发送次数：贴在徽标**右上角**（2026-10-22 用户要求，原来是行内）
   ⚠️ 父级 .badge 必须 position:relative（已加）；.tut 不能 overflow:hidden，否则会被裁掉 */
.badge .sn{position:absolute;top:-7px;right:-7px;margin:0;min-width:15px;height:15px;
  line-height:15px;text-align:center;border-radius:8px;background:#2563eb;color:#fff;
  font-size:10px;font-style:normal;font-weight:600;padding:0 3px;
  box-shadow:0 0 0 2px #fff;letter-spacing:0}
.ms-b.ms-again{color:#1d4ed8;border-color:#c7d7f7;background:#f4f8ff;margin-right:auto}
.ms-hist{margin-top:10px;padding-top:9px;border-top:1px dashed #e2e8f0;font-size:12px;color:#475569}
.ms-hist .ms-hl{color:#64748b;margin-right:4px}
.ms-hist .ms-hi{display:inline-block;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:5px;
  padding:1px 6px;margin:0 4px 4px 0;color:#334155}
/* 导出入口（2026-10-22 用户要求：**不要加粗、不要醒目**）
   跟同行文字一样的低调样式，只靠 hover 变蓝提示可点 */
/* 2026-10-23 用户要求：顶栏账号**只留头像**，不显示姓名文字；
   同时给最右的铃铛留 46px，避免压住头像。 */
.me-dd{margin-right:46px}
.me-nm{display:none}
.dp-exp{color:inherit;text-decoration:none;font-weight:400;cursor:pointer;opacity:.85}
.dp-exp:hover{color:#2563eb;text-decoration:underline;opacity:1}
.tut .tmj{font-size:11.5px;color:#1d4ed8;background:#eef4ff;border:1px solid #dbe7fb;
  border-radius:4px;padding:1px 5px;margin-right:6px;white-space:nowrap;letter-spacing:.2px}
.tut .badge.clk{cursor:pointer}
.tut .badge.clk:hover{box-shadow:0 0 0 2px #dbeafe}
.tut .tn{font-weight:500;min-width:62px}
.tut .tm2{font-size:11.5px;color:var(--t3);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tchip{font-size:10.5px;padding:1px 7px;border-radius:4px;background:#eef2ff;color:#4f46e5;white-space:nowrap}
.badge{display:inline-block;position:relative;font-size:10.5px;padding:1px 8px;border-radius:999px;white-space:nowrap}
.b-ok{background:#dcfce7;color:#15803d}
.b-info{background:#dbeafe;color:#1d4ed8}
.b-warn{background:#fef3c7;color:#b45309}
.b-gray{background:#f1f5f9;color:#64748b}
.b-bad{background:#fee2e2;color:#b91c1c}
.reg-badge{font-size:10.5px;padding:1px 8px;border-radius:4px;white-space:nowrap}
.rb-open{background:#dcfce7;color:#15803d}
.rb-todo{background:#dbeafe;color:#1d4ed8}
.rb-stale{background:#f3f4f6;color:#9ca3af}
.rb-soon{background:#fef3c7;color:#b45309}
.rb-urgent{background:#fee2e2;color:#b91c1c;font-weight:600;animation:rb-blink 1.6s ease-in-out infinite}
.reg-win{font-size:10.5px;padding:1px 8px;border-radius:4px;white-space:nowrap;border:1px dashed #cbd5e1;color:#475569;background:#f8fafc}
.reg-win i{font-style:normal;margin-left:5px;font-size:9.5px;color:#94a3b8}
.rw-exact{border-style:solid;border-color:#86efac;background:#f0fdf4;color:#15803d}
.rw-exact i{color:#16a34a}
.rw-row{border-color:#c7d7f5;background:#f4f8ff;color:#1d4ed8}
.rw-row i{color:#60a5fa}
.rw-ref2026{border-color:#fcd34d;background:#fffbeb;color:#b45309}
.rw-ref2026 i{color:#d97706}
.rw-none{color:#94a3b8}
.adm-btn{font-size:10.5px;padding:1px 8px;border-radius:4px;border:1px solid var(--blue-b);color:var(--blue-d);background:#f4f8ff;cursor:pointer}
.adm-btn:hover{background:var(--blue-l)}
/* 2026-11-01：「择校择导需求提报」—— 「学校与博导」标题行右侧的主动作
   用户要求：字体和色块都放大、与上面协调、去掉「+」号 */
.adm-btn.ask{background:var(--blue);border-color:var(--blue);color:#fff;font-family:inherit;
  font-size:12px;padding:3px 12px;border-radius:6px;font-weight:600;letter-spacing:.2px;
  display:inline-block;line-height:1.6;box-shadow:0 1px 2px rgba(37,99,235,.25)}
.adm-btn.ask:hover{background:var(--blue-d);border-color:var(--blue-d);color:#fff}
.adm{display:none;margin:0 12px 8px 24px;padding:9px 12px;background:#f8faff;border:1px solid #dbe7fb;border-radius:8px;font-size:12.5px;line-height:1.7}
.adm.on{display:block}
.adm b{color:var(--t2);font-weight:500}
.adm .asrc{font-size:11px;color:var(--t3);margin-top:3px}
.tut-dir{font-size:12.5px;color:var(--t2);background:#fff;border:1px solid var(--line);border-radius:7px;padding:5px 10px;margin-bottom:5px}
.tut-dir b{color:var(--t3);font-weight:500;font-size:11.5px;margin-right:6px}
@keyframes rb-blink{0%,100%{opacity:1}50%{opacity:.55}}

/* ─────────── 备注 / 动态流（对齐原型 v13） ─────────── */
.note{display:flex;gap:10px;padding:9px 0;border-bottom:1px dashed var(--line2)}
.note:last-child{border-bottom:0}
.note .nt{flex:0 0 92px;font-size:11px;text-align:center;padding:2px 0;border-radius:5px;
  background:#f3f4f6;color:var(--t2);height:20px;line-height:16px;white-space:nowrap;overflow:hidden}
.nt.t-stage{background:#ede9fe;color:#6d28d9}
.nt.t-risk{background:#fee2e2;color:#b91c1c}
.nt.t-tutor{background:#eef2ff;color:#4f46e5}
.note .nc{flex:1;font-size:13px}
.note .nm2{font-size:11px;color:var(--t3);margin-top:3px}
.note.tut-note{background:#fafaff;border-radius:8px;padding:9px 10px;border:1px solid #eef2ff}
.feed-tutor{font-weight:600;color:var(--blue-d);cursor:pointer}
.feed-tutor:hover{text-decoration:underline}
.ft-sub{font-weight:400;color:var(--t3);font-size:11px;margin-left:6px}
.note-del{float:right;font-size:10.5px;color:#cbd5e1;cursor:pointer;margin-left:8px}
.note-del:hover{color:#dc2626}
.nform{border-top:1px solid var(--line2);padding-top:11px;margin-top:6px;position:relative}
.nform textarea{width:100%;min-height:52px;padding:9px 11px;border:1px solid var(--line);
  border-radius:8px;font:inherit;font-size:13px;resize:vertical;outline:none}
.nform textarea:focus{border-color:var(--blue)}
.nform .fr{display:flex;gap:7px;align-items:center;margin-top:7px;flex-wrap:wrap}
.nform select,.nform input[type=date]{padding:6px 9px;border:1px solid var(--line);
  border-radius:7px;font:inherit;font-size:12.5px;color:var(--t2)}
.nform .send{margin-left:auto;padding:7px 18px;border:0;border-radius:7px;background:var(--blue);color:#fff;font-size:13px}
.nform .send:hover{background:var(--blue-d)}
.magic{position:absolute;left:12px;bottom:100%;background:#fff;border:1px solid var(--line);
  border-radius:8px;box-shadow:0 8px 24px rgba(15,23,42,.12);min-width:220px;max-height:180px;
  overflow-y:auto;display:none;z-index:5;padding:4px}
.magic .mi{padding:6px 10px;border-radius:6px;font-size:12.5px;cursor:pointer;display:flex;gap:8px;align-items:center}
.magic .mi:hover{background:var(--blue-l)}
.magic .mi .mh{color:var(--t3);font-size:11px;margin-left:auto}
.datechip{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--blue-d);
  background:var(--blue-l);border-radius:5px;padding:2px 8px;margin-top:5px}
.hidden{display:none}
.ntype-tutor{display:inline-block}

.tut.on{background:#f4f8ff}
.tut-b{display:none;padding:12px 14px 14px 24px;background:#fcfdff;border-bottom:1px solid #f0f4fa}
.tut.on + .tut-b{display:block}

.sw{display:flex;gap:7px;align-items:center}
.sw label{font-size:12px;color:var(--t2);min-width:84px}
.opt{padding:2px 10px;border:1px solid var(--line);border-radius:6px;font-size:12px;background:#fff;color:var(--t2);cursor:pointer}
.opt:hover{border-color:var(--blue);color:var(--blue)}
.opt.on{background:var(--blue);border-color:var(--blue);color:#fff}
.mail-item{border:1px solid var(--line);border-radius:8px;padding:8px 10px;margin-bottom:5px;background:#fff}
.mail-item.in{background:#f0fdf4;border-color:#bbf7d0}
.mail-item .mh{font-size:12px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.mail-item .mh .d{font-size:11px;color:var(--t3)}
.mail-item .mh .dir{font-size:10.5px;padding:0 6px;border-radius:4px}
.mail-item .dir.out{background:#dbeafe;color:#1d4ed8}
.mail-item .dir.in{background:#dcfce7;color:#15803d}
.mail-item .mb{font-size:12.5px;color:var(--t2);margin-top:5px;white-space:pre-wrap;max-height:120px;overflow-y:auto}

.steps{display:flex;align-items:center;margin:2px 0 10px;flex-wrap:wrap;gap:2px}
.step{display:flex;align-items:center;font-size:11px;color:var(--t3);white-space:nowrap}
.step .c{width:16px;height:16px;border-radius:50%;background:#e5e7eb;color:#9ca3af;
  display:flex;align-items:center;justify-content:center;font-size:9px;flex:0 0 16px}
.step .lb{margin:0 6px 0 4px}
.step.done{color:var(--blue)} .step.done .c{background:var(--blue);color:#fff}
.step.cur{color:var(--blue-d);font-weight:600}
.step.cur .c{background:#fff;border:2px solid var(--blue);color:var(--blue)}
.step.skip{opacity:.5}
.step.skip .c{background:#fff;border:1px dashed #cbd5e1;color:#cbd5e1}
.step-line{width:14px;height:1px;background:#e5e7eb;margin:0 2px}

/* ─────────── 左栏 日历+报名院校（对齐原型 v13） ─────────── */
.cal-h{display:flex;align-items:center;justify-content:space-between;padding:2px 0 6px}
.cal-h .m{font-size:13px;font-weight:600}
.cal-tog{border:1px solid var(--line);background:#fff;color:var(--t2);border-radius:6px;
  font-size:11px;padding:2px 9px;cursor:pointer}
.cal-tog:hover{background:var(--blue-l);color:var(--blue-d);border-color:#c7d7f5}
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;padding:0 0 6px;text-align:center;font-size:11.5px}
.cal .wd{color:var(--t3);padding:2px 0;font-size:10.5px}
.cal .d{padding:4px 0;border-radius:6px;cursor:pointer;color:var(--t2);position:relative}
.cal .d:hover{background:#f3f4f6}
.cal .d.today{background:var(--blue);color:#fff;font-weight:500}
.cal .d.has::after{content:'';position:absolute;bottom:2px;left:50%;transform:translateX(-50%);
  width:3px;height:3px;border-radius:50%;background:var(--blue)}
.cal .d.today.has::after{background:#fff}
.cal .d.inweek{border:1px solid #c7d7f5}
.cal .d.picked{outline:2px solid #2563eb;outline-offset:-1px}
.todo{padding:7px 9px;border-radius:7px;background:#f9fafb;margin-bottom:5px;font-size:12px;line-height:1.55}
.todo:hover{background:#eff6ff}
.todo .who{font-weight:500;color:var(--blue-d);cursor:pointer}
.todo .who:hover{text-decoration:underline}
.todo .dt{color:#b45309;font-weight:600;margin-right:5px}
.cal.week-mode .d:not(.inweek){display:none}
.cal.week-mode .pad{display:none}
.reg-list{display:flex;flex-direction:column;gap:2px}
/* 2026-10-07：区块改为「学校库参考窗口」后信息量变大（校名 + 窗口 + 剩余 + 人数）。
   左栏仅 ~240px 宽，一行塞不下 ⇒ 改**两行网格**：
     第 1 行：校名（过长省略） ······ N 人
     第 2 行：10-27~11-05  剩29天
   （曾用 flex-wrap，结果「N 人」徽章被挤到第三行、右边缘参差） */
.reg-item{display:grid;grid-template-columns:1fr auto;column-gap:6px;row-gap:1px;
  padding:5px 8px;border-radius:7px;cursor:pointer;font-size:12.5px;line-height:1.35}
.reg-item .sk{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.reg-item .meta{grid-column:1/-1;display:flex;align-items:baseline;gap:6px;min-width:0}
.reg-item:hover{background:#f5f8ff}
.reg-item.on{background:var(--blue);color:#fff}
.reg-item .n{font-size:10.5px;background:#eef2ff;color:#4f46e5;border-radius:9px;padding:0 6px;
  white-space:nowrap;align-self:center}
.reg-item.on .n{background:rgba(255,255,255,.25);color:#fff}
.reg-item .d{font-size:10.5px;color:var(--t3);white-space:nowrap}
.reg-item .dl{font-size:10.5px;color:#b45309;font-weight:600;white-space:nowrap}
.reg-item.on .d{color:rgba(255,255,255,.8)}
.reg-item.on .dl{color:#fff}
.reg-item .b27{font-size:9px;font-style:normal;line-height:1;padding:2px 4px;border-radius:4px;
  background:#dcfce7;color:#15803d;font-weight:600;margin-left:3px;vertical-align:1px}
.reg-item.on .b27{background:rgba(255,255,255,.28);color:#fff}
.reg-item.warn{background:#fff8f0;border:1px solid #f5d6b8}
.reg-item.on.warn{background:var(--blue)}
/* 2026-10-07：学校库无收录的（无报名窗口参考）→ 灰化垫底，不当临期处理 */
.reg-item.noref{opacity:.62}
/* 本考季已过（无行动价值）→ 弱化，但仍可见 */
.reg-item.past{opacity:.6}
.reg-item .d.nr{color:#b6bfcc}
.reg-item.on .d.nr{color:rgba(255,255,255,.7)}
.reg-item .dl.nr{color:#b6bfcc;font-weight:400}
.reg-item.on .dl.nr{color:rgba(255,255,255,.7)}
.reg-more{font-size:10.5px;color:var(--t3);padding:4px 0 0}
.reg-more a{color:var(--blue-d);text-decoration:underline}
.reg-count{font-size:10.5px;color:var(--t3);font-weight:400}
.reg-empty{font-size:11.5px;color:#94a3b8;padding:3px 0}
.calcal{display:flex;gap:6px;margin-top:5px}
.calcal .dd{background:#f8fafc;border:1px solid var(--line);border-radius:6px;padding:2px 8px;font-size:11px;color:var(--t2);cursor:pointer}
.calcal .dd:hover{border-color:var(--blue);color:var(--blue)}
.calcal .dd.on{background:var(--blue);color:#fff;border-color:var(--blue)}
.fold-bar{display:flex;align-items:center;justify-content:space-between;padding:8px 0 2px;margin-bottom:4px;
  border-bottom:1px dashed var(--line2)}
.fold-bar .t{font-size:12px;font-weight:600}
.fold-bar .fb{font-size:11px;color:var(--t3);cursor:pointer;border:1px solid var(--line);border-radius:5px;padding:1px 8px;background:#fff}
.fold-bar .fb:hover{color:var(--blue-d);border-color:#c7d7f5}

/* 左栏收起后的窄条：显示被收起模块的小图标列 */
.c-left.mini .mini-hint{display:flex;flex-direction:column;align-items:center;gap:10px;
  font-size:15px;color:#cbd5e1;padding-top:4px}
.c-left.mini .mini-hint span{cursor:pointer}
.c-left.mini .mini-hint span:hover{color:var(--blue)}
.c-left:not(.mini) .mini-hint{display:none}

/* ─── 学生信息概览弹窗 ─── */
.btn-ghost{border:1px solid var(--line);background:#fff;color:var(--t2);border-radius:7px;
  font-size:12px;padding:3px 10px;cursor:pointer;margin-left:6px}
.btn-ghost:hover{background:var(--blue-l);color:var(--blue-d);border-color:#c7d7f5}
.ov-mask{display:none;position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:900;
  align-items:center;justify-content:center}
.ov-mask.on{display:flex}
.ov-box{background:#fff;border-radius:14px;width:min(560px,92vw);max-height:82vh;overflow:auto;
  box-shadow:0 20px 50px rgba(2,6,23,.28);animation:ovIn .16s ease}
@keyframes ovIn{from{transform:translateY(8px) scale(.985);opacity:.6}to{transform:none;opacity:1}}
.ov-h{display:flex;align-items:center;gap:8px;padding:14px 18px;border-bottom:1px solid var(--line2)}
.ov-h b{font-size:14px}
.ov-h .ov-sub{font-size:12px;color:var(--t3)}
.ov-h .ov-x{margin-left:auto;cursor:pointer;color:#94a3b8;font-size:15px;padding:0 4px}
.ov-h .ov-x:hover{color:#b91c1c}
.ov-b{padding:12px 18px 4px}
.ov-row{display:flex;gap:12px;padding:9px 0;border-bottom:1px dashed var(--line2);font-size:13px}
.ov-row:last-child{border-bottom:0}
.ov-k{flex:0 0 72px;color:var(--t3);font-weight:600}
.ov-v{flex:1;color:var(--t1);line-height:1.6}
.ov-f{padding:10px 18px 16px;font-size:11px;color:#94a3b8}

/* ─── 导师进度点可点 / 婉拒 / 态度选项 ─── */
.steps .step.clk{cursor:pointer}
.steps .step.clk:hover .ltx,.steps .step.clk:hover .c{transform:scale(1.12)}
.steps .step.clk:hover .lb{color:var(--blue-d)}
.steps .step.rej .c{background:#fee2e2;border-color:#fca5a5;color:#b91c1c}
.steps .step.rej .lb{color:#b91c1c}
.sw .opt.att-高意向.on{background:#16a34a;border-color:#16a34a;color:#fff}
.sw .opt.att-保持联系.on{background:#2563eb;border-color:#2563eb;color:#fff}
.sw .opt.att-婉拒.on{background:#dc2626;border-color:#dc2626;color:#fff}
.tut .badge{margin-left:4px}

/* ─── 学校招生条件（ECS 学校库口径）── */
.adm .adm-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:7px}
.adm .adm-loc{font-size:11.5px;color:var(--t3)}
.adm .adm-mode{font-size:11.5px;color:var(--blue-d);background:#eef4ff;border-radius:5px;padding:1px 7px}
.adm .adm-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:5px 14px}
.adm .adm-i{display:flex;gap:8px;font-size:12.5px;line-height:1.6}
.adm .adm-i b{flex:0 0 62px;color:var(--t3);font-weight:600}
.adm .adm-i span{flex:1;color:var(--t1)}
.adm .adm-line{margin-top:6px;font-size:12px;color:var(--t2);line-height:1.65}
.adm .adm-line b{color:var(--t3);font-weight:600;margin-right:4px}

/* ─── 动态卡：本生待办 + 学生备注两行展示 ─── */
.card-todo{background:#fffdf5;border:1px solid #f5e6b8;border-radius:8px;padding:8px 11px;
  margin-bottom:10px;font-size:12.5px}
.card-todo>b{display:inline-block;margin-bottom:4px}
.card-todo-hint{font-size:11px;color:#94a3b8;font-weight:400;margin-left:6px}
.card-todo .todo{margin-bottom:4px}
.at-body{margin-top:2px;color:var(--t1);line-height:1.6}
.note .nc .feed-tutor{cursor:pointer;font-weight:600;color:var(--blue-d);margin-right:2px}
.note .nc .feed-tutor:hover{text-decoration:underline}

/* ─── 品牌 logo ─── */
header .brand-icon{height:32px;width:32px;display:block;border-radius:8px;object-fit:contain}
.empty-logo{max-width:300px;width:56%;height:auto;opacity:.3;margin-bottom:16px}
.login-logo{max-width:260px;width:80%;height:auto;display:block;margin:0 auto 12px}
.brand-mark{display:inline-flex;align-items:center;gap:7px}
.brand-mark img{height:20px;width:auto;vertical-align:middle}

/* ─── 搜索命中导师提示 + 清除所有筛选项 ─── */
.hit-tip{margin-top:4px;font-size:11px;color:#1d4ed8;background:#eef4ff;border:1px solid #c7d7f5;
  border-radius:6px;padding:3px 7px;line-height:1.5}
.f-reset{margin-top:6px;justify-content:center;color:var(--blue-d);background:#f4f8ff;
  border:1px solid var(--blue-b);font-weight:600}
.f-reset:hover{background:var(--blue-l)}

/* ─── 学校批次标签 ─── */
.batch-chip{font-size:10.5px;padding:1px 7px;border-radius:5px;background:#fff7ed;
  color:#b45309;border:1px solid #f5d6b8;font-weight:600}
/* ─── 学校考季标签（分组键：学校+考季+批次）─── */
.season-chip{font-size:10.5px;padding:1px 7px;border-radius:5px;background:#eef4ff;
  color:#1d4ed8;border:1px solid #c7d7f5;font-weight:600}

/* ─── 导师跟进记录：来源标签 ─── */
.via-chip{display:inline-block;margin-left:6px;font-size:10.5px;padding:0 6px;border-radius:5px;
  background:#eef4ff;color:#1d4ed8;border:1px solid #c7d7f5;vertical-align:middle}
/* ─── 工作台 ⇄ 管理端 互跳入口 ─── */
header .navlink.nav-cta{background:var(--blue);color:#fff;font-weight:500;padding:5px 12px}
.navlink.on{background:var(--blue-l);color:var(--blue);font-weight:600}
header .navlink.nav-cta:hover{background:var(--blue-d);color:#fff}

/* ─── 管理员视角标识（当前在看哪位班主任）── */
.view-tag{display:inline-block;font-size:12px;font-weight:500;padding:1px 8px;border-radius:6px;
  background:var(--blue-l);color:var(--blue-d);border:1px solid var(--blue-b);vertical-align:middle}
.view-tag.ok{background:#ecfdf5;color:#0f766e;border-color:#a7f3d0}
.view-clr{font-size:12px;font-weight:400;margin-left:8px;color:var(--t3);text-decoration:none}
.view-clr:hover{color:#b91c1c;text-decoration:underline}
.view-now{font-size:11px;font-weight:400;color:var(--blue-d);margin-left:6px}
.chips a.reset{border:1px dashed var(--blue-b);color:var(--blue-d);background:#f8fbff}

/* ─── 中栏范围切换（在服中 / 已完结 / 全部）── */
.mid-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.scope-tog{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#fff}
.scope-tog a{font-size:12.5px;padding:4px 11px;color:var(--t2);text-decoration:none;border-right:1px solid var(--line)}
.scope-tog a:last-child{border-right:0}
.scope-tog a:hover{background:#f4f8ff;color:var(--blue-d)}
.scope-tog a.on{background:var(--blue);color:#fff;font-weight:500}
.scope-tog a b{font-weight:500;opacity:.75;margin-left:3px}
.scope-tog a.on b{opacity:.9}

/* ─── 学生申博服务进度条（2026-09-20 · 复用导师进度条的 .steps 体系）──
   灰＝未开始　蓝圈●＝进行中　蓝实心✓＝已完成　灰化—＝曾到过但已中止 */
.pg-steps{margin:0;row-gap:7px}
.pg-steps .step-line{width:18px}
.steps .step.grey{opacity:.62}
.steps .step.grey .c{background:#f1f5f9;border:1px dashed #cbd5e1;color:#94a3b8;font-size:10px}
.steps .step.grey .lb{color:#94a3b8;text-decoration:line-through}
.pg-note{font-size:11.5px;color:var(--t3);margin-top:7px;line-height:1.55}
.pg-grey{color:#b45309;background:#fffbeb;border:1px solid #fde68a;border-radius:7px;
  padding:5px 9px;margin:6px 0 0}

/* 点学生进度节点 → 定位到的导师行高亮（需求 2026-09-20） */
#cardSchool .tut.hit-prog{background:#fff7ed;border-radius:7px;
  box-shadow:inset 0 0 0 1px #fdba74;padding-left:7px;padding-right:7px}

/* ═══════════════ 2026-09-22 新增：风险角标 / 待办完成 / 动态分组折叠 ═══════════════ */
.item{position:relative}
/* 风险标记（邮件预警）：学生卡片右上角 */
.risk-flag{position:absolute;top:5px;right:7px;font-size:13px;line-height:16px;color:#dc2626;
  background:#fee2e2;border:1px solid #fca5a5;border-radius:6px;padding:0 4px;cursor:help}
.risk-flag:hover{background:#fecaca}
/* 日历待办：完成按钮 + 逾期高亮 */
.todo-done{display:inline-block;width:15px;height:15px;line-height:14px;text-align:center;
  border:1px solid #cbd5e1;border-radius:4px;color:#94a3b8;font-size:11px;cursor:pointer;
  margin-right:4px;vertical-align:1px;background:#fff}
.todo-done:hover{color:#16a34a;border-color:#86efac;background:#f0fdf4}
.todo.od{background:#fff7ed;border-left:2px solid #fb923c;padding-left:7px}
.todo.od .dt{color:#b45309}
/* 动态里已完成的待办留痕（可点撤销） */
.done-chip{display:inline-block;font-size:10.5px;color:#15803d;background:#f0fdf4;
  border:1px solid #bbf7d0;border-radius:5px;padding:0 5px;margin-left:6px;cursor:pointer}
.done-chip:hover{background:#dcfce7}
/* 动态流：按博导分组折叠 */
.fgt{font-size:11.5px;color:#64748b;font-weight:700;margin:10px 0 5px;padding-top:6px;
  border-top:1px dashed #e2e8f0}
.fgroup{border:1px solid #e2e8f0;border-radius:8px;margin-bottom:6px;background:#fcfdff;overflow:hidden}
.fgroup .fg-h{display:flex;align-items:center;gap:6px;padding:7px 9px;cursor:pointer;font-size:12.5px}
.fgroup .fg-h:hover{background:#f5f8ff}
.fgroup .ar{color:#94a3b8;font-size:10px;flex:0 0 10px}
.fgroup .fg-n{font-weight:700;color:#1e293b}
.fgroup .fg-s{font-size:11px;color:#2563eb;background:#eff6ff;border-radius:4px;padding:0 5px}
.fgroup .fg-c{font-size:10.5px;color:#64748b;background:#f1f5f9;border-radius:9px;padding:0 6px}
.fgroup .fg-l{flex:1;font-size:11px;color:#94a3b8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fgroup .fg-b{display:none;padding:2px 9px 8px}
.fgroup.open .fg-b{display:block}
/* 风险标记按钮（学生详情顶栏） */
.risk-pill{font-size:11.5px;color:#64748b;border:1px dashed #cbd5e1;border-radius:6px;
  padding:1px 7px;cursor:pointer;background:#fff}
.risk-pill:hover{border-color:#fca5a5;color:#b91c1c}
.risk-pill.on{color:#b91c1c;background:#fef2f2;border:1px solid #fca5a5;font-weight:700}

/* ══════════ 顶栏账号头像下拉（.me-dd / .me-pop；带 me- 前缀避免与页面内类名撞车）══════════ */
.me-dd{position:relative}
.me-btn{display:flex;align-items:center;gap:7px;background:none;border:0;padding:3px 7px;
  border-radius:9px;cursor:pointer;font:inherit;color:var(--t2)}
.me-btn:hover{background:var(--line2)}
.me-dd .avatar{width:28px;height:28px;border-radius:50%;background:var(--blue);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:11.5px;flex:0 0 28px}
.me-nm{font-size:12.5px;white-space:nowrap}
.me-ar{font-size:9px;color:var(--t3);margin-left:-3px}
.me-pop{display:none;position:absolute;right:0;top:calc(100% + 7px);min-width:178px;z-index:60;
  background:#fff;border:1px solid var(--line);border-radius:10px;padding:5px;
  box-shadow:0 12px 28px rgba(15,23,42,.16)}
.me-pop.open{display:block}
.me-pop .me-hd{padding:7px 10px 8px;font-size:12.5px;font-weight:600;color:var(--t1);
  border-bottom:1px solid var(--line2);margin-bottom:4px;white-space:nowrap}
.me-pop .me-hd small{display:block;font-weight:400;color:var(--t3);font-size:11px;margin-top:1px}
.me-pop a{display:block;padding:8px 10px;border-radius:7px;font-size:12.5px;color:var(--t1);text-decoration:none}
.me-pop a:hover{background:var(--blue-l);color:var(--blue-d)}
.me-pop a.me-out:hover{background:#fef2f2;color:#b91c1c}

/* 2026-09-27：中栏列表按成交时间排序 —— 卡片显示成交日 + 列表头提示 */
.deal-date{font-size:11px;color:#94a3b8;margin-left:2px}

/* ══════════════════════════════════════════════════════════════
   🎓 已上岸（2026-09-27）＋ 📌 重点导师（置顶，2026-09-27）
   设计来源：20_设计/学生页_上岸院校展示_设计说明_v1.md
             20_设计/学校与博导_导师置顶_设计说明_v1.md
   ══════════════════════════════════════════════════════════════ */

/* 🎓 已上岸：学生卡片徽章（绿底金边，与「进行中 / 已完成」区分） */
.badge.b-adm{background:#f0fdf4;color:#15803d;border:1px solid #bbf7d0}

/* 🎓 上岸胶囊（详情顶栏） */
.adm-pill{font-size:11.5px;padding:2px 10px;border-radius:999px;background:#f0fdf4;
  color:#15803d;border:1px solid #bbf7d0;white-space:nowrap;max-width:440px;
  overflow:hidden;text-overflow:ellipsis}
.adm-pill[onclick]{cursor:pointer}
.adm-pill[onclick]:hover{border-color:#15803d;background:#dcfce7}
.adm-pill.pend{background:#f8fafc;color:#64748b;border-style:dashed;border-color:#cbd5e1}
.adm-pill b{font-weight:600;color:#b45309;margin-left:5px}

/* 🎓 上岸去向（学校与博导卡顶部）—— 择校 → 上岸 闭环对照 */
.adm-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:2px 0 9px;
  padding:8px 12px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px}
.adm-row .ar-k{font-size:12px;font-weight:600;color:#15803d;white-space:nowrap}
.adm-row .ar-v{font-size:13px;color:#14532d;font-weight:500}
.adm-row .ar-v.pend{color:#94a3b8;font-weight:400}
.adm-row .ar-d{color:#4d7c0f;font-size:11.5px;margin-left:4px}
.adm-row .ar-warn{font-size:11px;color:#b45309;background:#fef3c7;border-radius:9px;
  padding:1px 7px;margin-left:6px}
.adm-row .ar-src{font-size:11px;color:#7ca58c}
.adm-row .ar-cl{margin-left:auto;font-size:11.5px;color:#4d7c0f;white-space:nowrap}

/* 📌 重点导师（置顶区）—— 不受筛选影响 */
.pinbox{margin:2px 0 10px}
.pinbox .pinh{display:flex;align-items:center;gap:8px;padding:0 2px 6px}
.pinbox .pint{font-size:12.5px;font-weight:600;color:#1d4ed8}
.pinbox .pinc{font-size:11px;color:#94a3b8}
.pinbox .pinx{font-size:11.5px;color:#64748b;cursor:pointer;padding:1px 8px;
  border:1px solid var(--line);border-radius:12px}
.pinbox .pinx:hover{border-color:var(--blue);color:var(--blue)}
.pinbox .pinempty{font-size:12px;color:#94a3b8;padding:8px 12px;background:#fafcff;
  border:1px dashed var(--line);border-radius:8px}
.pinbox .pinlist{border:1px solid #dbeafe;border-radius:9px;overflow:hidden;background:#fbfdff}
.pinbox.fold .pinlist,.pinbox.fold .pinempty{display:none}
.pin-item{display:flex;align-items:center;gap:9px;padding:7px 11px;
  border-bottom:1px solid #eef4ff;font-size:12.5px}
.pin-item:last-child{border-bottom:0}
.pin-item:hover{background:#f4f8ff}
.pin-item.dead{background:#fafafa;color:#94a3b8}
.pin-item .pin-no{width:16px;height:16px;flex:0 0 16px;border-radius:50%;background:#dbeafe;
  color:#1d4ed8;font-size:10.5px;line-height:16px;text-align:center}
.pin-item.dead .pin-no{background:#e5e7eb;color:#94a3b8}
.pin-item .pin-tn{font-weight:600;color:#1e293b;cursor:pointer;min-width:56px}
.pin-item .pin-tn:hover{color:var(--blue);text-decoration:underline}
.pin-item .pin-sc{color:#475569}
.pin-item .pin-email{color:#94a3b8;font-size:11.5px;flex:1;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.pin-item .pin-dead{color:#b45309;font-size:11.5px}
.pin-item .pin-ops{margin-left:auto;display:flex;gap:3px}
.pin-item .pb{width:20px;height:20px;line-height:18px;text-align:center;border-radius:5px;
  border:1px solid var(--line);color:#64748b;cursor:pointer;font-size:11.5px}
.pin-item .pb:hover{border-color:var(--blue);color:var(--blue)}
.pin-item .pb.x:hover{border-color:#b91c1c;color:#b91c1c}

/* 📌 置顶入口：导师行悬停出现（已置顶常亮） */
/* 📌 置顶入口：**常显浅灰**（2026-10-28 用户要求：不要隐藏，做成灰色即可） */
.pinbtn{cursor:pointer;padding:0;margin-left:2px;color:#94a3b8;
  transition:opacity .15s,color .15s,background .15s;opacity:.7;
  display:inline-flex;align-items:center;justify-content:center;
  width:16px;height:16px;border-radius:3px}
.tut:hover .pinbtn{opacity:.95}
.pinbtn:hover{opacity:1;color:#2563eb;background:#eff6ff}
/* 已置顶：蓝色常亮 */
/* 已置顶（重点导师）：**红色**（2026-10-28 用户要求，原来跟随普通按钮用蓝色，
   但"置顶"是标记状态不是操作按钮，跟蓝色通用交互色混在一起看不出重点） */
.pinbtn.on{opacity:1;color:#dc2626}
.pinbtn.on:hover{color:#b91c1c;background:#fef2f2}
.tchip2.pin-in.on{background:#fef2f2;border-color:#fecaca;color:#dc2626}

/* 搜索命中提示（2026-09-27，学校搜索）
   ⚠️ 后缀类名**不能**叫 sch / adm —— 会撞上学校块 .adm{display:none}（提示直接消失）
      与 .sch{border/border-radius}（样式被污染）。实测踩过，故用 school / admit 全称。 */
.q-note{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:8px 0 2px;
  padding:7px 11px;background:#f5f9ff;border:1px solid #dbeafe;border-radius:8px;
  font-size:11.5px;color:#334155}
.q-note .qn{background:#fff;border:1px solid var(--line);border-radius:10px;padding:1px 8px;color:#475569}
.q-note .qn.sch{background:#eef4ff;border-color:#c7d7f5;color:#1d4ed8}
.q-note .qn.adm{background:#f0fdf4;border-color:#bbf7d0;color:#15803d}
.q-note .qnc{margin-left:auto;color:#94a3b8;cursor:pointer}
.q-note .qnc:hover{color:var(--blue)}
.hit-tip.school{background:#eef4ff;border-left-color:#60a5fa;color:#1d4ed8}
.hit-tip.admit{background:#f0fdf4;border-left-color:#4ade80;color:#15803d}

/* ── 发送日期弹层（2026-10-20）── */
.ms-mask{position:fixed;inset:0;background:rgba(15,23,42,.42);display:none;align-items:center;justify-content:center;z-index:9000}
.ms-mask.on{display:flex}
.ms-dlg{background:#fff;border-radius:12px;width:430px;max-width:92vw;box-shadow:0 20px 60px rgba(15,23,42,.24);overflow:hidden}
.ms-hd{display:flex;align-items:center;gap:6px;padding:14px 18px;border-bottom:1px solid #eef2f7;font-size:14.5px;font-weight:500;color:#0f172a}
.ms-who{font-size:12px;color:#64748b;font-weight:400;max-width:270px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ms-x{margin-left:auto;cursor:pointer;color:#94a3b8;font-size:20px;line-height:1}
.ms-x:hover{color:#475569}
.ms-bd{padding:16px 18px 4px}
.ms-row{display:flex;align-items:center;gap:10px}
/* ⚠️ 选择器必须覆盖 text —— 邮箱弹窗用的是 type=text（type=email 会拦分号），
   原来只写了 [type=date] ⇒ 邮箱输入框拿不到 flex:1，缩成默认宽度（截图那个窄框） */
.ms-row input{flex:1;min-width:0;width:100%;font-size:14px;padding:7px 10px;border:1px solid #d7dee9;border-radius:8px;color:#0f172a;background:#fff;outline:none}
.ms-row input:focus{border-color:#2563eb;box-shadow:0 0 0 3px rgba(37,99,235,.12)}
#emInput{font-family:inherit;letter-spacing:.2px}
.ms-qk{display:flex;gap:6px;flex:0 0 auto}
.ms-qk button{font-size:12px;padding:5px 9px;border:1px solid #dbe7fb;background:#f4f8ff;color:#1d4ed8;border-radius:6px;cursor:pointer}
.ms-qk button:hover{background:#e8f1ff;border-color:#bfd7fb}
.ms-hint{margin:10px 0 12px;font-size:12px;color:#64748b;line-height:1.65}
.ms-hint.warn{color:#b45309;background:#fffbeb;border:1px solid #fde68a;border-radius:8px;padding:8px 10px}
.ms-ft{display:flex;align-items:center;gap:8px;padding:12px 18px;border-top:1px solid #eef2f7;background:#fafbfd}
.ms-sp{flex:1}
.ms-b{font-size:13px;padding:6px 15px;border-radius:7px;border:1px solid #d7dee9;background:#fff;color:#334155;cursor:pointer;transition:background .12s}
.ms-b:hover{background:#f5f7fa}
.ms-b:disabled{opacity:.5;cursor:not-allowed}
.ms-b.ms-pri{background:#2563eb;border-color:#2563eb;color:#fff}
.ms-b.ms-pri:hover{background:#1d4ed8}
.ms-b.ms-undo{color:#b42318;border-color:#fecaca;background:#fff}
.ms-b.ms-undo:hover{background:#fef2f2}
.ms-b.ms-undo.off{color:#cbd5e1;border-color:#eef2f7}

/* ── 导师行招生条件（2026-10-27）─────────────────────────────
   .tconds=导师行条件标签  .tnrows=「N条」提示
   .cond-chip=块头条件（全行统一才上提）  .cond-mixed=块内条件有分歧 */
.tconds{display:inline-flex;gap:3px;flex-wrap:wrap;margin-left:5px}
.tconds i{font-style:normal;font-size:10px;background:#f5f0ff;color:#6d28d9;border-radius:3px;padding:0.5px 5px;white-space:nowrap}
.tnrows{font-size:10px;background:#eef4ff;color:#2563eb;border-radius:3px;padding:0.5px 5px;margin-left:3px}
.cond-chip{display:inline-flex;gap:3px;flex-wrap:wrap;margin-left:4px}
.cond-chip i{font-style:normal;font-size:11px;background:#eef4ff;color:#2563eb;border-radius:3px;padding:1px 6px;white-space:nowrap}
.cond-mixed{font-size:11px;background:#fef3c7;color:#b45309;border-radius:3px;padding:1px 6px;margin-left:4px;white-space:nowrap;cursor:help}

/* ══ 导师行 / 学校块（2026-10-28 二轮）═══════════════════════════════════
   用户口径：① 学校块能量成一行就一行，右侧那组信息（报名/状态/按钮/统计）**靠右**
            ② 导师行字段**固定比例、单行不换行**，溢出显示「…」，悬停横向滚动
            ③ 学科代码/专业用普通字色（不要蓝色标签）
            ④ 第二行唯一键值/备注用**浅色块**，不要抢眼                              */

/* 导师第一行 */
.tut{flex-wrap:wrap;row-gap:3px;align-items:center}
/* 🔴 2026-10-28 改 grid 固定列：「列没对齐」的根因是 flex + 字段为空时整段不渲染。
   flex 方案下每行元素个数不同 ⇒ shrink 分配不同 ⇒ 学院列错位（武汉理工那批
   学科/专业全空，整列消失，学院就往左跑了）。
   现在：**7 列固定**（姓名·邮箱·学科专业·研究方向·学院·图标组·状态），
   字段没值也占位，任何行都对得上。 */
.tut .tut-l1{display:grid;
  /* 2026-10-28：招生专业列原来 1fr 太宽（"120201 会计学" 只占一半，右侧全是空白），
     压到 0.72fr，省下的给研究方向（1.7fr → 2fr，这列常是 40~60 字）。 */
  grid-template-columns:64px 124px minmax(0,0.72fr) minmax(0,2fr) minmax(0,0.9fr) 58px minmax(64px,auto);
  column-gap:8px;align-items:center;flex-basis:100%;min-width:0}
/* 显式钉死每列（2026-10-28）：不靠自动排布 —— 某个字段不渲染时，
   自动排布会让后面的元素整体前移，这正是「学院列没对齐」的成因之一。 */
.tut .tut-l1 > .tn{grid-column:1}
.tut .tut-l1 > .tmail{grid-column:2}
.tut .tut-l1 > .tmj{grid-column:3}
.tut .tut-l1 > .tdir{grid-column:4}
/* 没有学科/专业时，研究方向吃掉第 3 列 ⇒ 不留空列，学院仍在第 5 列 */
.tut .tut-l1 > .tdir.span2{grid-column:3 / span 2}
.tut .tut-l1 > .tdept{grid-column:5}
.tut .tut-l1 > .tico{grid-column:6}
.tut .tut-l1 > .tstat{grid-column:7}
.tut .tut-l1 > *{min-width:0;overflow:hidden;white-space:nowrap}
/* 🔴 2026-10-28（用户要求）：第一行的长文本**不要省略号**，超出就悬停横向滚动。
   原来 ellipsis + 滚动同时在跑：静态看着是"内容就这么多"，鼠标移上去才动，
   两种表达重复且矛盾。现在静态硬切（保留 overflow:hidden 才能 scrollLeft），
   靠 initEllScroll 的悬停滚动看全文。
   ⚠️ 第二行的条件标签/备注仍保留省略号 —— 那是固定宽度胶囊，硬切更难看。 */
.tut .tut-l1 > [data-ell]{text-overflow:clip}
/* 姓名固定「4 个字」的宽度（2026-10-28 用户要求：否则邮箱列不齐、显丑） */
.tut .tut-l1 .tn{font-weight:500;cursor:pointer}
.tut .tut-l1 .tmail{font-size:11px;color:#64748b;cursor:pointer;
                    border-bottom:1px dashed #cbd5e1}
.tut .tut-l1 .tmj{font-size:11.5px;color:#475569}
.tut .tut-l1 .tdir{font-size:11.5px;color:#64748b;cursor:pointer}
.tut .tut-l1 .tdept{font-size:11.5px;color:#475569}
/* 字段没值时留空列位（不显示「未填」字样干扰阅读，悬停 title 会提示） */
.tut .tut-l1 .is-empty{cursor:default}
/* 三个图标固定容器：只读时容器仍在，保证列数不变 */
.tut .tut-l1 .tico{display:inline-flex;align-items:center;justify-content:flex-end;
                   gap:2px;overflow:visible}
.tut .tut-l1 .tico .tmedit,
.tut .tut-l1 .tico .pinbtn{margin-left:0;overflow:visible}
.tut .tut-l1 .tstat{justify-self:end;display:inline-flex;
                    align-items:center;gap:4px;overflow:visible;white-space:nowrap}

/* 导师第二行：浅色块，单行放不下就省略 */
.tut .tut-l2{display:flex;align-items:center;gap:6px;flex-basis:100%;
             flex-wrap:nowrap;overflow:hidden;min-width:0}
.tut .tut-l2 .tconds{flex:0 1 auto;min-width:0;overflow:hidden;white-space:nowrap}
/* 第二行所有元素**同一字号/内距**（用户要求「字段大小保持一致」），
   超长一律省略号 + 悬停滚动（data-ell） */
.tut .tconds i{font-style:normal;font-size:11.5px;line-height:17px;background:#f6f8fb;
               color:#64748b;border:1px solid #e8eef7;border-radius:3px;padding:0 7px;
               margin-right:4px;white-space:nowrap;display:inline-block;
               max-width:260px;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
.tut .tnrows{flex:0 0 auto;font-size:11.5px;line-height:17px;background:#f6f8fb;color:#94a3b8;
             border:1px solid #e8eef7;border-radius:3px;padding:0 7px;white-space:nowrap}
/* 2026-10-28（用户要求）：备注也改成「研究方向」那种形式 —— **不要省略号**，
   超出就悬停横向滚动（data-ell 由 initEllScroll 接管）。
   ⚠️ 必须保留 overflow:hidden，否则 scrollLeft 无效、根本滚不动。 */
.tut .tnote{flex:0 1 auto;min-width:0;max-width:300px;background:#f8fafc;color:#64748b;
            border:1px solid #e8eef7;border-radius:3px;padding:0 7px;font-size:11.5px;
            line-height:17px;overflow:hidden;text-overflow:clip;white-space:nowrap;
            scrollbar-width:none}
.tut .tnote::-webkit-scrollbar{display:none}
.tut .tnote.tpnote{background:#f8fafc;color:#64748b;border-color:#e8eef7}

/* 学校块：能一行就一行；右侧分组靠右，放不下才整体换行 */
.sch-h{display:flex;flex-wrap:wrap;align-items:center;gap:9px;padding:8px 12px}
.sch-h .sh-l1{display:inline-flex;align-items:center;gap:9px;flex-wrap:wrap;min-width:0}
.sch-h .sh-l2{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap;
              margin-left:auto;min-width:0}
/* 重点导师面板「置顶」按钮内的小图标（2026-10-28） */
.tchip2 svg{width:13px;height:13px;vertical-align:-2px;margin-right:3px;
  display:inline-block;pointer-events:none}
