/* ==========================================================
   陶端健课题组 · Tao Group @ JXNU
   设计基调：浅色留白 / 卡片化 / 科研蓝
   ========================================================== */
:root{
  --navy:#0e2f52;
  --navy-2:#143d68;
  --blue:#1e6fc4;
  --blue-2:#3b93e0;
  --blue-100:#e8f2fc;
  --blue-50:#f3f8fd;
  --cyan:#0ea5b7;
  --sky:#e6f4fe;
  --gold:#d99a3c;
  --gold-100:#fdf3e2;
  --violet:#7c5cd6;
  --violet-100:#f0ebfd;
  --ink:#1a2b3c;
  --ink-2:#48607a;
  --muted:#8ba0b6;
  --line:#e8eef5;
  --line-2:#f1f5f9;
  --bg:#f7fafd;
  --white:#fff;
  --r:14px;
  --r-lg:18px;
  --sh-1:0 1px 2px rgba(16,47,82,.04),0 2px 8px rgba(16,47,82,.04);
  --sh-2:0 4px 16px rgba(16,47,82,.07),0 12px 32px rgba(16,47,82,.05);
  --sh-blue:0 8px 24px rgba(30,111,196,.22);
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC",Helvetica,Arial,sans-serif;
  --serif:Georgia,"Times New Roman","Songti SC","Noto Serif SC",serif;
  --max:1240px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);
  font-size:calc(15.5px * var(--fz-all,1));line-height:1.75;-webkit-font-smoothing:antialiased}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
h1,h2,h3,h4{margin:0;font-weight:700;letter-spacing:-.01em;color:var(--navy)}
p{margin:0 0 1em}
p:last-child{margin-bottom:0}
ul{margin:0;padding:0;list-style:none}
button{font-family:inherit}
.wrap{max-width:var(--max);margin:0 auto;padding:0 32px}
/* 只给搜索引擎 / 读屏用的文字（页头品牌文字去掉后，标题靠它保留） */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0}

/* ============ 头部（顶栏底色后台可自由取色） ============
   底色 --head-bg 与文字色 --head-fg / --head-on 都由 <body> 上的
   内联 CSS 变量给（PHP 按底色亮度自动选深字还是浅字）。
   原来那条深色信息条（地址 / 电话 / 邮箱）已按要求去掉。

   ⚠️ .header 必须是 <body> 的直接子元素，position:sticky 才会整页吸顶。
   前面新增的 .bbar（顶部品牌带）也是 body 直接子元素，它先滚走，导航接管吸顶。 */
.header{position:sticky;top:0;z-index:80;background:var(--head-bg,#fff);
  border-bottom:1px solid var(--head-line,rgba(20,60,102,.12));transition:background .25s ease}
.header .wrap{display:flex;align-items:center;height:92px;gap:28px}
/* flex:0 1 auto + min-width:0 + max-width —— 长方形 logo 变宽后也不把整条顶栏撑出去 */
.brand{display:flex;align-items:center;flex:0 1 auto;min-width:0;max-width:min(400px,44%);
  transition:opacity .28s ease,transform .28s ease}
/* 有品牌带时，导航左侧的 logo 先藏着 —— 上面那条里已经有两个大 logo 了，
   等品牌带滚出屏幕再淡入，避免同屏出现三个一样的标识。
   它始终占位（只是透明），所以导航不会在滚动时跳一下。 */
body.has-bbar:not(.bbar-gone) .brand{opacity:0;transform:translateX(-8px);pointer-events:none}
/* 后台勾了「品牌带还在时也显示导航 logo」就一直显示（勾了才方便调大小时看效果） */
body.has-bbar.nav-logo-always .brand{opacity:1;transform:none;pointer-events:auto}
/* 页头标识：只放一张 logo 图，文字由图片自身带。
   高度由 --nav-logo 控制（= 基准高度 × 全站 logo 缩放），后台可调。 */
.brand .mark{
  height:var(--nav-logo,48px);min-width:0;border-radius:0;flex:0 1 auto;
  display:flex;align-items:center;background:transparent;box-shadow:none;
}
.brand .mark img{display:block;height:var(--nav-logo,48px);width:auto;max-width:100%;object-fit:contain}
.brand .mark.no-img{
  flex:0 0 auto;width:var(--nav-logo,48px);border-radius:12px;overflow:hidden;
  background:linear-gradient(145deg,var(--blue),var(--navy));
  color:#fff;display:grid;place-items:center;font-family:var(--serif);font-size:12px;font-weight:700;
  box-shadow:0 4px 12px rgba(30,111,196,.3);letter-spacing:.02em;
}
.brand .mark.no-img img{display:none}
/* 导航项：字号加大到 17.5、字重加到 600（选中项 700），项与项之间留 10px 呼吸位 */
.nav{margin-left:auto;display:flex;align-items:center;gap:10px}
.nav a{position:relative;padding:12px 17px;font-size:calc(17.5px * var(--fz-all,1) * var(--fz-nav,1));font-weight:600;letter-spacing:.015em;
  color:var(--head-fg,#3d566e);border-radius:10px;transition:.2s;white-space:nowrap}
.nav a:hover{color:var(--head-on,var(--blue));background:var(--head-onbg,var(--blue-50))}
.nav a.on{color:var(--head-on,var(--blue));font-weight:700}
.nav a.on:after{content:"";position:absolute;left:17px;right:17px;bottom:4px;height:3px;
  border-radius:2px;background:var(--head-on,var(--blue))}
.burger{display:none;margin-left:auto;width:44px;height:44px;border:1px solid var(--head-line,var(--line));
  border-radius:11px;background:transparent;cursor:pointer;padding:12px}
.burger i{display:block;height:1.7px;background:var(--head-fg,var(--navy));border-radius:2px;margin:3.5px 0}
.burger i:nth-child(2){width:70%}
body.head-tone-dark .brand .mark.no-img{box-shadow:0 4px 12px rgba(0,0,0,.35)}

/* ============ 页面标题带 ============
   排在顶部背景图「下面」，文字落在纯色底上，不会再压在照片上看不清。 */
/* 页头区右侧的淡分子装饰（化学课题组的苯环网络）——
   只挂在 .pb（栏目页头）上，首页没有 .pb 所以不受影响；
   纯装饰，pointer-events:none 不挡任何点击，窄屏藏掉。 */
.pb{position:relative;padding:48px 0 10px;overflow:hidden}
.pb::after{content:"";position:absolute;right:-36px;top:0;bottom:0;width:600px;
  background:url(../img/pb-deco.svg) no-repeat right center;background-size:600px auto;
  pointer-events:none}
@media (max-width:980px){.pb::after{opacity:.5;width:340px}}
@media (max-width:640px){.pb::after{display:none}}
.pb .wrap{position:relative;z-index:1}
.pb .crumb{font-size:15px;color:#5a6b7d;margin-bottom:15px}
.pb .crumb a{color:#3d4f61}
.pb .crumb a:hover{color:var(--blue)}
.pb .crumb em{margin:0 8px;font-style:normal;opacity:.45}
/* 不在页头横幅(.pb)里的面包屑（论坛列表/详情、内容详情等）——此前无样式，
   一直是继承来的小灰字，2026-10-03 老师反馈不明显 */
.crumb{font-size:15px;color:#5a6b7d;margin:0 0 14px}
.crumb a{color:#3d4f61}
.crumb a:hover{color:var(--blue);text-decoration:none}
.crumb em{margin:0 8px;font-style:normal;opacity:.45}
.pb h1{font-size:calc(40px * var(--fz-all,1) * var(--fz-pb,1));line-height:1.24;letter-spacing:-.02em}
.pb-en{font-family:var(--serif);font-size:calc(17px * var(--fz-all,1) * var(--fz-sub,1));color:var(--muted);font-weight:400;
  letter-spacing:.06em;margin-left:14px}
.pb .sub{color:var(--ink-2);font-size:calc(17px * var(--fz-all,1) * var(--fz-sub,1));margin-top:12px;max-width:840px}

/* ==========================================================
   ① 顶部品牌带（网站最顶端的一条整行背景图 + 两个等大的 logo 槽位）
   ----------------------------------------------------------
   DOM: <div class="bbar"> → <header class="header"> → <div class="pb">
   也就是说：**品牌带在最上面，导航栏在它下面**，页面标题带再在导航下面。

   背景图由后台「Logo 与品牌」上传（--bb-h 控制带子高度，cover 铺满整行）；
   带内是 .wrap 里的两个 .slot —— 两个槽位**高度完全一样、可容纳宽度也一样**，
   图片用 object-fit:contain 居中，所以换上宽高比不同的 logo 也不会一大一小。

   white-logo：把 logo 自动转成纯白（brightness(0) invert(1)），
   这样深色的院徽 / 文字直接放到深色背景带上也能看清，不用手工做白版。
   ========================================================== */
.bbar{position:relative;background-color:#2d7dbc;background-position:center;background-size:cover;
  background-repeat:no-repeat;overflow:hidden}
/* 上下压一点暗，让白色 logo 在浅色图案区也够清楚 */
.bbar::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,rgba(4,26,48,.16),rgba(4,26,48,.02) 46%,rgba(4,26,48,.20))}
.bbar .wrap{position:relative;z-index:1;height:var(--bb-h,132px);display:flex;align-items:center;
  justify-content:center;gap:var(--bb-gap,56px)}
.bbar.al-left .wrap{justify-content:flex-start}
.bbar .slot{display:flex;align-items:center;justify-content:center;
  height:var(--bb-lh,64px);max-width:var(--bb-lw,300px);flex:0 1 auto;min-width:0}
.bbar .slot img{display:block;height:100%;width:auto;max-width:100%;object-fit:contain;
  transition:transform .25s ease}
.bbar .slot:hover img{transform:scale(1.03)}
/* 自动转白：任意颜色的 logo 都能一键变成纯白剪影 */
.bbar.white-logo .slot img{filter:brightness(0) invert(1) drop-shadow(0 2px 6px rgba(0,10,25,.28))}
/* 还没传 logo 时的占位：一个虚线框，提示这里要放什么 */
.bbar .slot.no-img{border:1px dashed rgba(255,255,255,.55);border-radius:10px;padding:0 16px;
  max-width:var(--bb-lw,300px)}
.bbar .slot.no-img .ph{color:rgba(255,255,255,.9);font-size:13.5px;letter-spacing:.08em;white-space:nowrap}

/* ==========================================================
   ② 全站背景水印（隐约的化工元素，不影响阅读）
   ----------------------------------------------------------
   一层固定在视口最底下的图案（position:fixed + z-index:-1），
   除了它别的元素都排在它上面；浓度由 --wm-op 控制（后台可调 0 – 16%）。
   带白底的内容卡片会自然盖住它，所以正文区域始终清爽。
   ========================================================== */
.wm{position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:var(--wm-op,.05);
  background:url(../img/watermark.svg) repeat 0 0;background-size:620px 620px}

/* ============ 详情页 · 子栏目横向导航 ============ */
.subnav{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:14px;
  padding:9px 12px;background:#fff;border:1px solid var(--line);border-radius:12px;
  box-shadow:var(--sh-1)}
.subnav .lb{flex:0 0 auto;font-size:12.5px;font-weight:700;color:var(--navy);letter-spacing:.05em;
  padding-right:10px;margin-right:2px;border-right:1px solid var(--line-2)}
.subnav a{flex:0 0 auto;font-size:13.5px;color:var(--ink-2);text-decoration:none;
  padding:6px 13px;border-radius:8px;transition:.18s;border:1px solid transparent}
.subnav a:hover{background:var(--blue-50);color:var(--blue);border-color:#cfe2f7}
.subnav a.on{background:linear-gradient(135deg,var(--blue),var(--blue-2));color:#fff;
  font-weight:600;border-color:transparent;box-shadow:var(--sh-blue)}
.subnav .sp{flex:1 1 auto;min-width:6px}
.subnav a.home{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:9px;
  font-size:12.5px;font-weight:600;color:var(--ink-2);background:#fff;border:1px solid var(--line);transition:.2s}
.subnav a.home:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-50);text-decoration:none}
@media(max-width:600px){
  .subnav{gap:6px;padding:8px 9px}
  .subnav a{padding:5px 10px;font-size:12.5px}
  .subnav .lb{width:100%;border-right:none;border-bottom:1px solid var(--line-2);
    padding:0 0 6px;margin:0 0 2px}
}

/* ============ 板块标题 ============ */
.sec{padding:34px 0 64px}
.sec-h{display:flex;align-items:center;gap:11px;margin-bottom:22px}
.sec-h:before{content:"";width:4px;height:19px;border-radius:3px;
  background:linear-gradient(180deg,var(--blue),var(--blue-2))}
.sec-h h2{font-size:calc(20px * var(--fz-all,1) * var(--fz-sec,1));letter-spacing:-.01em}
.sec-h .cnt{font-size:13px;color:var(--muted);font-weight:400;background:var(--line-2);
  padding:1px 9px;border-radius:20px}
/* 「全部方向 → / 更多动态 → / 查看全部 →」：栏目标题右侧的跳转动作，按钮化 */
.sec-h .right{margin-left:auto;display:inline-flex;align-items:center;gap:5px;padding:6px 14px;
  border-radius:9px;font-size:12.5px;font-weight:600;color:var(--blue);background:#fff;
  border:1px solid var(--line);transition:.2s}
.sec-h .right:hover{border-color:var(--blue);background:var(--blue-50);text-decoration:none}

/* ============ 按钮 ============ */
.btn{display:inline-flex;align-items:center;gap:7px;padding:11px 22px;border-radius:10px;
  font-size:14.5px;border:1px solid transparent;transition:.22s;cursor:pointer;font-weight:500}
.btn-p{background:linear-gradient(135deg,var(--blue),var(--blue-2));color:#fff;box-shadow:var(--sh-blue)}
.btn-p:hover{transform:translateY(-2px);box-shadow:0 12px 28px rgba(30,111,196,.32)}
.btn-g{background:#fff;border-color:var(--line);color:var(--ink-2)}
.btn-g:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-50)}

/* ============ 标签 ============ */
.tag{display:inline-flex;align-items:center;font-size:calc(13.5px * var(--fz-all,1) * var(--fz-sub,1));padding:3.5px 12px;border-radius:6px;
  background:var(--blue-100);color:var(--blue);font-weight:500;line-height:1.6}
.tag.g{background:var(--gold-100);color:#a9701d}
.tag.v{background:var(--violet-100);color:var(--violet)}
.tag.n{background:var(--line-2);color:var(--ink-2)}
.tag.on-img{position:absolute;top:12px;left:12px;z-index:3;background:rgba(255,255,255,.94);
  backdrop-filter:blur(6px);color:var(--navy);font-weight:600;box-shadow:0 2px 8px rgba(16,47,82,.14)}

/* ==========================================================
   PI 卡片（首页 / 成员页）
   ========================================================== */
.pi-hero{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);
  padding:28px;display:grid;grid-template-columns:400px 1fr;gap:36px;box-shadow:var(--sh-1)}
/* 左列现在只有头像（原「联系方式」栏已去掉） */
.pi-col{display:flex;flex-direction:column;min-width:0}
/* PI 头像：高度撑满右侧正文列（上下不再留白），
   高度不受限时（窄屏单列）退回 4.2 : 3.6（≈ 7:6）的自然比例 */
.pi-portrait{
  border-radius:12px;overflow:hidden;position:relative;
  aspect-ratio:4.2/3.6;flex:1 1 auto;
  background:linear-gradient(160deg,#123a63 0%,#1c5288 55%,#2a6fa8 100%);
  display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;color:#fff;
}
/* 头像下方的联系信息块，撑满剩余高度避免出现空白 */
.pi-side{flex:1;margin-top:14px;border:1px solid var(--line);border-radius:12px;
  background:var(--blue-50);padding:14px 16px 16px;display:flex;flex-direction:column;gap:10px}
.pi-side-h{font-size:11.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--blue);
  font-weight:700;padding-bottom:8px;border-bottom:1px solid #dbeafe}
.pi-side .r{display:flex;gap:10px;font-size:calc(14px * var(--fz-all,1) * var(--fz-sub,1));line-height:1.6}
.pi-side .k{flex:0 0 42px;color:var(--muted);font-size:calc(13px * var(--fz-all,1) * var(--fz-sub,1))}
.pi-side .v{flex:1;color:var(--ink-2);word-break:break-all}
.pi-side .v a{color:var(--blue);text-decoration:none}
.pi-side .v a:hover{text-decoration:underline}
.pi-portrait img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 22%}
/* 照片上不再压任何文字/蒙版，姓名挪到右侧正文列（见 .pi-name） */
.pi-main{display:flex;flex-direction:column}
/* PI 姓名标题（原先是压在照片上的浮层，现移到照片右侧） */
.pi-name{font-family:var(--serif);font-size:32px;font-weight:700;color:var(--navy);
  line-height:1.15;letter-spacing:-.01em;margin-bottom:4px}
.pi-name-cnline{display:flex;align-items:center;flex-wrap:wrap;gap:12px}
.pi-name-cnline .pi-actions{margin:0 0 0 auto;padding:0;flex:none}
.pi-name-cnline .pi-actions .btn.btn-p{min-height:38px;padding:0 16px;border-radius:9px;
  background:#173f68;border:1px solid #173f68;color:#fff;font-size:calc(14px * var(--fz-all,1) * var(--fz-button,1));
  font-weight:600;box-shadow:0 4px 11px rgba(23,63,104,.18)}
.pi-name-cnline .pi-actions .btn.btn-p:hover{background:#103453;border-color:#103453;
  box-shadow:0 6px 14px rgba(23,63,104,.24);transform:translateY(-1px)}
.pi-name span{display:block;font-family:var(--sans);font-size:11.5px;font-weight:400;
  letter-spacing:.24em;text-transform:uppercase;color:var(--muted);margin-top:6px}
.pi-name-enline{display:flex;align-items:center;flex-wrap:wrap;gap:12px;margin-top:6px}
.pi-name-enline .pi-name-en{display:block;font-family:var(--sans);font-size:calc(13.5px * var(--fz-all,1) * var(--fz-en,1));
  font-weight:400;letter-spacing:.24em;text-transform:uppercase;color:var(--muted);margin:0}
.pi-name-enline .pi-roles{gap:6px;margin:0}
.pi-main .role{font-size:14px;color:var(--blue);font-weight:600;margin-bottom:6px}
.pi-main h2{font-size:26px;margin-bottom:12px;letter-spacing:-.02em}
.pi-main h2 small{font-family:var(--serif);font-size:17px;color:var(--ink-2);font-weight:400;margin-left:8px}
/* 身份标签：由「副标题」拆分而来，替代原来重复出现的 role 行 + 职务 */
.pi-roles{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px}
.role-chip{font-size:calc(12.5px * var(--fz-all,1) * var(--fz-count,1));font-weight:600;color:var(--blue);background:var(--blue-50);
  border:1px solid #dbeafe;border-radius:20px;padding:3px 11px;letter-spacing:.02em}
.pi-intro{background:var(--blue-50);border:1px solid #dbeafe;border-radius:12px;padding:16px 18px;
  font-size:calc(15px * var(--fz-all,1) * var(--fz-sub,1));line-height:1.9;color:var(--ink-2);margin:0 0 16px;
  text-align:justify;text-justify:inter-character}
.pi-field,.pi-tags{margin-bottom:18px}
.pi-field .lb,.pi-tags .lb{display:block;font-size:calc(13.5px * var(--fz-all,1) * var(--fz-count,1));letter-spacing:.12em;text-transform:uppercase;
  color:var(--blue);font-weight:700;margin-bottom:9px}
.pi-field .tags,.pi-tags .tags{display:flex;flex-wrap:wrap;gap:7px}
.pi-field .tag{background:var(--blue-50);border:1px solid #dbeafe;color:#1a5fa8;
  font-size:calc(13.5px * var(--fz-all,1) * var(--fz-count,1))}
/* 邮箱 / 电话标签：可点，样式跟「研究方向」的标签保持一致 */
.pi-field .tag-link{text-decoration:none;cursor:pointer;transition:.18s}
.pi-field .tag-link:hover{background:#dbeafe;border-color:#b9d6f5;color:#124a89}
.mail-sep{color:var(--muted);margin:0 3px}
.pi-tags .tag.tg{background:linear-gradient(180deg,#fff8e6,#ffefc9);border-color:#f0d79a;color:#8a5b00;
  font-size:calc(13px * var(--fz-all,1) * var(--fz-count,1));padding:3px 10px}
.kv{display:grid;grid-template-columns:112px 1fr;gap:9px 16px;font-size:14.5px;margin-bottom:18px}
.kv dt{color:var(--muted);font-size:calc(15px * var(--fz-all,1) * var(--fz-kv,1))}
.kv dd{font-size:calc(17px * var(--fz-all,1) * var(--fz-kv,1))}
.kv dd{margin:0;color:var(--ink)}
.kv dd a{color:var(--blue)}
.pi-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:auto;padding-top:4px}

/* ============ PI 详情双栏 ============ */
.pgrid{display:grid;grid-template-columns:1fr 1fr;gap:22px;margin-top:22px}
.card{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);padding:24px 26px;box-shadow:var(--sh-1)}
.card+.card{margin-top:22px}
.card-h{display:flex;align-items:center;gap:9px;margin-bottom:20px;padding-bottom:14px;border-bottom:1px solid var(--line-2)}
.card-h:before{content:"";width:3px;height:16px;border-radius:2px;background:var(--blue)}
.card-h h3{font-size:16px;letter-spacing:.01em}
.card-h .en{font-size:12px;color:var(--muted);letter-spacing:.06em}

/* 时间轴 */
.tl{position:relative;padding-left:24px}
.tl:before{content:"";position:absolute;left:4.5px;top:9px;bottom:9px;width:1px;background:var(--line)}
.tl li{position:relative;padding-bottom:20px}
.tl li:last-child{padding-bottom:0}
.tl li:before{content:"";position:absolute;left:-24px;top:7px;width:10px;height:10px;border-radius:50%;
  background:#fff;border:2.5px solid var(--blue-2)}
.tl .t1{font-size:14.5px;color:var(--ink);font-weight:500;line-height:1.6}
.tl .t2{font-size:13px;color:var(--muted);margin-top:3px;line-height:1.65}

/* 荣誉 */
.aw li{display:flex;gap:16px;padding:13px 0;border-bottom:1px dashed var(--line)}
.aw li:last-child{border-bottom:0;padding-bottom:0}
.aw .yr{flex:0 0 62px;font-size:13.5px;font-weight:700;color:var(--blue);letter-spacing:.02em;padding-top:1px}
.aw .c1{font-size:14.5px;color:var(--ink);line-height:1.65}
.aw .c2{font-size:12.5px;color:var(--muted);margin-top:3px;line-height:1.6}

/* 项目 */
.fund{margin-bottom:18px}
.fund:last-child{margin-bottom:0}
.fund-h{display:inline-block;font-size:13px;font-weight:600;color:var(--blue);
  background:var(--blue-100);padding:3px 12px;border-radius:20px;margin-bottom:10px}
.fund li{padding:11px 0;border-bottom:1px dashed var(--line);font-size:14.5px;color:var(--ink)}
.fund li:last-child{border-bottom:0}
.fund li .m{font-size:12.5px;color:var(--muted);margin-top:3px}
.fund li .amt{float:right;font-size:12.5px;color:var(--blue);font-weight:600}

/* 报告 / 兼职 */
.rp li{display:flex;gap:14px;padding:9px 0;border-bottom:1px dashed var(--line);font-size:14px;align-items:baseline}
.rp li:last-child{border-bottom:0}
.rp .yr{flex:0 0 62px;color:var(--muted);font-size:12.5px;letter-spacing:.02em}
.rp .c1{flex:1;color:var(--ink);line-height:1.6}
.rp .c2{font-size:12px;color:var(--muted);flex:0 0 auto}
.pt li{padding:10px 0 10px 18px;position:relative;border-bottom:1px dashed var(--line);font-size:14px;color:var(--ink);line-height:1.65}
.pt li:last-child{border-bottom:0}
.pt li:before{content:"";position:absolute;left:2px;top:18px;width:6px;height:6px;border-radius:50%;background:var(--blue-2)}
.pt .c2{display:block;font-size:12.5px;color:var(--muted);margin-top:2px}

/* ==========================================================
   成员卡片（3:4 竖版）
   ========================================================== */
.mgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
/* 团队导师 / 实验系列：一行 3 人。限宽避免卡片被拉伸过大，照片同步改为 1:1 */
.mgrid.c3{grid-template-columns:repeat(3,1fr);max-width:1080px;margin:0 auto}
.mgrid.c3 .pcard .ph{aspect-ratio:1/1}
.mgrid.c3 .pcard .ph img{object-position:center 18%}
/* 博士 / 硕士：横向卡片 —— 照片在左（4:5），成员信息在右 */
.mgrid.mh{grid-template-columns:repeat(2,1fr);gap:18px 22px}
.pcard.h{display:grid;grid-template-columns:126px 1fr;align-items:stretch}
.pcard.h .ph{aspect-ratio:4/5;height:100%;min-height:158px}
.pcard.h .ph img{object-position:center 18%}
.pcard.h .bd{padding:16px 18px;justify-content:flex-start}
.pcard.h .nm{font-size:calc(17px * var(--fz-all,1) * var(--fz-card,1))}
.pcard.h .sub{margin-top:3px}
.pcard.h .sp{margin:12px 0 10px}
.pcard.h .rows{gap:8px;font-size:13.5px;flex:0 0 auto}
.pcard.h .rows .k{flex:0 0 40px}
.pcard.h:hover .ph img{transform:scale(1.05)}
.pcard{background:#fff;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;
  transition:.26s;cursor:pointer;box-shadow:var(--sh-1);display:flex;flex-direction:column}
.pcard:hover{transform:translateY(-4px);box-shadow:var(--sh-2);border-color:#cfe2f7}
.pcard .ph{position:relative;aspect-ratio:3/4;background:linear-gradient(160deg,#123a63,#245c92 60%,#33739f);
  overflow:hidden;display:grid;place-items:center}
.pcard .ph img{width:100%;height:100%;object-fit:cover;object-position:center 20%;transition:.55s}
.pcard:hover .ph img{transform:scale(1.05)}
.pcard .ph .ini{font-family:var(--serif);font-size:46px;font-weight:700;letter-spacing:.06em;
  color:rgba(255,255,255,.9);text-shadow:0 2px 20px rgba(6,26,48,.45);user-select:none}
.pcard .bd{padding:15px 16px 17px;display:flex;flex-direction:column;flex:1}
.pcard .nm{font-size:16.5px;font-weight:700;color:var(--navy);line-height:1.4}
.pcard .sub{font-size:12px;color:var(--muted);letter-spacing:.04em;margin-top:2px}
.pcard .tag{margin-top:10px;align-self:flex-start}
.pcard .sp{height:1px;background:var(--line-2);margin:13px 0 11px}
.pcard .rows{display:flex;flex-direction:column;gap:7px;font-size:13px;line-height:1.55;flex:1}
.pcard .rows .r{display:flex;gap:9px}
.pcard .rows .k{flex:0 0 46px;color:var(--muted);font-size:12.5px}
.pcard .rows .v{flex:1;color:var(--ink-2);word-break:break-all}
.pcard .rows .v a{color:var(--blue)}
.pcard .go{margin-top:13px;font-size:13px;color:var(--blue);display:flex;align-items:center;gap:4px}
.pcard:hover .go{gap:8px}
/* 团队导师 / 实验系列 / 合作导师小卡牌：照片下固定排版（2026-09-30 老师）
   姓名（加粗加大）→ 职称 → 方向/邮箱/招生（带标签、单行整词截断）→ 查看详情 */
.pcard.rich .nm{font-size:calc(18px * var(--fz-all,1) * var(--fz-card,1))}
.pcard.rich .sub{font-size:12.5px;margin-top:3px}
.pcard.rich .rows .v.fitline{white-space:nowrap;overflow:hidden;word-break:normal;flex:1;min-width:0}
.pcard.rich .rows .em a{color:var(--blue);white-space:nowrap}
.pcard.rich .go{margin-top:auto;padding-top:12px}

/* ==========================================================
   论文列表（按年份分组 · 编号排版）
   ========================================================== */
.yearbar{display:flex;align-items:center;gap:14px;margin:34px 0 6px}
.yearbar:first-child{margin-top:8px}
.yearbar .y{font-family:var(--serif);font-size:24px;font-weight:700;color:var(--navy);letter-spacing:.01em}
.yearbar .ln{flex:1;height:1px;background:var(--line)}
.yearbar .n{font-size:12px;color:var(--muted)}
.pub{display:grid;grid-template-columns:54px 1fr;gap:16px;padding:20px 4px;border-bottom:1px solid var(--line-2);
  cursor:pointer;transition:.2s;align-items:start}
.pub:hover{background:var(--blue-50);border-radius:10px}
.pub .idx{font-size:13px;color:var(--muted);padding-top:3px;letter-spacing:.02em}
.pub .idx b{color:var(--blue)}
.pub .ttl{font-size:16px;font-weight:700;color:var(--navy);line-height:1.5;display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.pub .ttl .a{color:var(--blue);opacity:0;transition:.2s;transform:translateX(-4px)}
.pub:hover .ttl .a{opacity:1;transform:translateX(0)}
.pub .sub{font-size:14px;color:var(--ink-2);margin-top:6px;line-height:1.7}
.pub .meta{font-size:12.5px;color:var(--muted);margin-top:8px;letter-spacing:.02em;display:flex;gap:14px;flex-wrap:wrap}
.pub .meta .pdf{color:var(--blue);font-weight:500}
.pub.thm{grid-template-columns:54px 1fr}
.pub .bb{display:flex;gap:10px;align-items:center;font-size:13px;padding:12px 4px;border-bottom:1px solid var(--line-2);cursor:pointer}
.pub .bb:hover{background:var(--blue-50);border-radius:10px}

/* 简易行（毕业/专利等） */
.rlist{qbackground:#fff}
.rlist li{display:flex;align-items:center;gap:16px;padding:15px 6px;border-bottom:1px solid var(--line-2);
  cursor:pointer;transition:.2s}
.rlist li:hover{background:var(--blue-50);border-radius:10px}
.rlist .idx{flex:0 0 44px;font-size:13px;color:var(--muted)}
.rlist .tx{flex:1;font-size:15px;color:var(--navy);font-weight:500;line-height:1.6}
.rlist .dt{font-size:12.5px;color:var(--muted);flex:0 0 auto}
/* 列表行/年份分组行的引文（期刊缩写+年份+期卷号+页码） */
.pub .cite,.rlist .cite{color:var(--blue);font-size:13px;font-weight:500;margin-top:4px;
  font-family:"Times New Roman","Songti SC","Noto Serif SC",serif;text-align:left}
/* 列表行引文（期刊缩写+年份+期卷号+页码） */
.pub .cite{color:var(--blue);font-size:13px;font-weight:500;margin-top:4px;
  font-family:"Times New Roman","Songti SC","Noto Serif SC",serif}
.rlist .ar{color:var(--blue);opacity:0;transition:.2s}
.rlist li:hover .ar{opacity:1}

/* ============ 选项卡 ============ */
.tabs{display:flex;gap:8px;flex-wrap:wrap;background:#fff;border:1px solid var(--line);
  border-radius:14px;padding:7px;box-shadow:var(--sh-1);margin-bottom:26px}
.tabs .tab{border:0;background:transparent;padding:10px 20px;border-radius:10px;font-size:14.5px;
  color:var(--ink-2);cursor:pointer;transition:.2s;display:flex;align-items:center;gap:7px;white-space:nowrap;
  text-decoration:none;line-height:1.25;font-family:inherit}
.tabs .tab:hover{background:var(--blue-50);color:var(--blue)}
.tabs .tab.on{background:linear-gradient(135deg,var(--blue),var(--blue-2));color:#fff;font-weight:600;
  box-shadow:var(--sh-blue)}
.tabs:not(.lab-tabs) .tab .n{font-size:14px;font-weight:600;opacity:.9}

/* ============ 新闻 / 相册 / 设施 ============ */
.ngrid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.ncard{background:#fff;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;
  display:flex;flex-direction:column;transition:.26s;cursor:pointer;box-shadow:var(--sh-1)}
.ncard:hover{transform:translateY(-4px);box-shadow:var(--sh-2);border-color:#cfe2f7}
.ncard .ph{aspect-ratio:16/10;background:var(--line-2);overflow:hidden;position:relative}
.ncard .ph img{width:100%;height:100%;object-fit:cover;transition:.55s}
.ncard:hover .ph img{transform:scale(1.05)}
.ncard .bd{padding:15px 17px 18px;flex:1;display:flex;flex-direction:column}
.ncard .dt{font-size:12px;color:var(--blue);letter-spacing:.05em;margin-bottom:7px;font-weight:500}
/* 标题一律换行显示完整，不做行数截断（原来 clamp 到 2 行会把长标题吃掉）。
   两端对齐：中文标题换行后左右两边都是齐的，不会一边长一边短。
   text-justify:inter-character 是给 CJK 用的，否则浏览器按西文规则只在词间拉开，
   中文长标题会看起来「没对齐」。 */
.ncard h4{font-size:15.5px;line-height:1.6;font-weight:600;color:var(--navy);
  word-break:break-word;overflow-wrap:anywhere;
  text-align:justify;text-justify:inter-character}
.news-card h4{
  display:block!important;white-space:normal!important;overflow:visible!important;
  text-overflow:clip!important;-webkit-line-clamp:unset!important;max-height:none!important;
  overflow-wrap:anywhere;word-break:break-word
}
.ncard:hover h4{color:var(--blue)}

/* 组内动态：卡片样式保持不变，整条轨道由右向左无缝滚动 */
.mq-view{overflow:hidden;position:relative;
  -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 44px,#000 calc(100% - 44px),transparent 100%);
  mask-image:linear-gradient(90deg,transparent 0,#000 44px,#000 calc(100% - 44px),transparent 100%)}
.mq-track{display:flex;width:max-content;will-change:transform;animation:mqRoll linear infinite}
.mq-track:hover{animation-play-state:paused}
.ngrid.mq{display:flex;gap:20px;width:max-content;padding-right:20px}
.ngrid.mq .ncard{width:400px;flex:0 0 400px}
@keyframes mqRoll{from{transform:translateX(0)}to{transform:translateX(var(--mq-shift,-50%))}}
@media(max-width:1100px){.ngrid.mq .ncard{width:326px;flex:0 0 326px}}
@media(max-width:620px){.ngrid.mq .ncard{width:264px;flex:0 0 264px}}

/* 首页「最新成果」固定 4 个，窄屏降为 2 列 / 1 列，避免出现落单的孤儿卡 */
@media(max-width:920px){.home-pub .tocgrid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:620px){.home-pub .tocgrid{grid-template-columns:1fr}}

.ggrid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.gitem{position:relative;border-radius:12px;overflow:hidden;aspect-ratio:4/3;background:var(--line-2);
  cursor:pointer;border:1px solid var(--line)}
.gitem img{width:100%;height:100%;object-fit:cover;transition:.55s}
.gitem:hover img{transform:scale(1.06)}
/* 相册标题同样完整换行，不截断 */
.gitem .cap{position:absolute;left:0;right:0;bottom:0;padding:30px 14px 12px;font-size:13.5px;color:#fff;
  line-height:1.55;background:linear-gradient(180deg,rgba(10,32,54,0),rgba(10,32,54,.82));
  word-break:break-word}

.fgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.fcard{background:#fff;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;
  cursor:pointer;transition:.26s;box-shadow:var(--sh-1)}
.fcard:hover{transform:translateY(-4px);box-shadow:var(--sh-2);border-color:#cfe2f7}
.fcard .ph{aspect-ratio:4/3;background:var(--line-2);overflow:hidden}
.fcard .ph img{width:100%;height:100%;object-fit:cover;transition:.55s}
.fcard:hover .ph img{transform:scale(1.05)}
.fcard .nm{padding:13px 16px 16px;font-size:calc(14.5px * var(--fz-all,1) * var(--fz-card,1));color:var(--navy);font-weight:500;line-height:1.6}

/* 科研设施是纯展示页：固定为截图中的三列图片卡，不混入预约页签。 */
.facilities-only{min-height:360px}
.facilities-only .fgrid{gap:22px}
.facilities-only .fcard{border-radius:14px}
.facilities-only .fcard .ph{aspect-ratio:1.36/1}

/* 组内管理：一级导航始终横向固定在内容上方；个人中心内部再使用左侧事务菜单。 */
.lab-login-section,.lab-workspace-section{background:linear-gradient(180deg,#f7faff 0,#fff 100%)}
.lab-login-card{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:26px;
  max-width:940px;margin:12px auto;padding:34px 38px;background:#fff;border:1px solid var(--line);
  border-radius:20px;box-shadow:var(--sh-2)}
/* 圆形徽标（2026-10-04 替换原来的圆角方块 "TG"）：
   内联 SVG 画的，底色走渐变，外圈白环，尺寸跟着容器走。
   原来这里有 font-size/letter-spacing，是给文字 "TG" 用的，SVG 下不再需要。 */
.lab-login-mark{width:82px;height:82px;border-radius:50%;flex:none;
  box-shadow:0 12px 28px rgba(20,80,143,.24);overflow:hidden}
.lab-login-mark svg{display:block;width:100%;height:100%}
/* 徽标里的渐变 id 是全局的，页面多处出现时浏览器会复用第一个，
   所以给每个徽标一个独立的作用域，避免颜色串掉。 */
.lab-login-mark{isolation:isolate}
.eyebrow{display:block;margin-bottom:5px;color:var(--blue);font-size:11px;font-weight:800;letter-spacing:.14em}
.lab-login-copy h2,.lab-welcome h2{color:var(--navy);font-size:24px}
.lab-login-copy p,.lab-welcome p{margin:7px 0 0;color:var(--ink-2);line-height:1.8}
.lab-login-copy ul{display:flex;gap:8px 20px;flex-wrap:wrap;margin:14px 0 0;padding:0;list-style:none;color:var(--muted);font-size:13px}
.lab-login-copy li::before{content:"\2713";margin-right:6px;color:var(--blue);font-weight:800}
.lab-login-btn{white-space:nowrap;padding:11px 22px}
.tabs.lab-tabs{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;margin:0 0 18px;padding:8px;background:#fff;overflow-x:auto}
.tabs.lab-tabs .tab{flex:0 0 auto;padding:11px 20px;border-radius:10px}
.tabs.lab-tabs .tab-mine:not(.on){color:var(--blue);font-weight:700;border:1px solid #cfe2f7;background:var(--blue-50)}
.tabs.lab-tabs .tab.on{box-shadow:var(--sh-blue)}
.lab-tab-dot{width:7px;height:7px;border-radius:50%;background:#bdd1e5;flex:none}
.tabs.lab-tabs .tab.on .lab-tab-dot{background:#fff}
.lab-user-tools{display:flex;align-items:center;gap:10px;margin-left:auto;padding:0 8px 0 15px;white-space:nowrap;color:var(--ink-2);font-size:13px}
.lab-user-tools a{padding-left:10px;border-left:1px solid var(--line)}
.lab-content{min-width:0}

.lab-member-nav{display:flex;align-items:center;gap:8px;margin:0 0 18px;padding:8px;background:#fff;border:1px solid var(--line);
  border-radius:14px;box-shadow:var(--sh-1);overflow-x:auto}
.lab-member-link{display:inline-flex;align-items:center;gap:7px;flex:0 0 auto;padding:10px 20px;border-radius:10px;color:var(--ink-2);font-size:14.5px;white-space:nowrap}
.lab-member-link:hover{text-decoration:none;color:var(--blue);background:var(--blue-50)}
.lab-member-link.on{color:#fff;background:linear-gradient(135deg,var(--blue),var(--blue-2));font-weight:700;box-shadow:var(--sh-blue)}
.lab-member-link .ic{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.lab-member-mine:not(.on){color:var(--blue);font-weight:700;border:1px solid #cfe2f7;background:var(--blue-50)}

@media(max-width:900px){
  .tabs.lab-tabs{overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none}
  .tabs.lab-tabs::-webkit-scrollbar{display:none}
  .lab-user-tools{display:none}
}
@media(max-width:680px){
  .lab-login-card{grid-template-columns:1fr;padding:25px 22px;gap:18px}
  .lab-login-mark{width:64px;height:64px}
  .lab-login-btn{justify-self:start}
  .tabs.lab-tabs .tab,.lab-member-link{padding:9px 14px}
}

/* ---- 仪器预约 ---- */
.bkgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.bkcard{background:#fff;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;
  transition:.26s;box-shadow:var(--sh-1);display:flex;flex-direction:column}
.bkcard:hover{transform:translateY(-4px);box-shadow:var(--sh-2);border-color:#cfe2f7}
.bkcard .ph{aspect-ratio:4/3;background:linear-gradient(160deg,#f4f8fd,#e7f0fa);
  display:grid;place-items:center;overflow:hidden}
.bkcard .ph img{width:100%;height:100%;object-fit:cover;transition:.55s}
.bkcard:hover .ph img{transform:scale(1.05)}
.bkcard .ph .ic{width:64px;height:64px;border-radius:18px;display:grid;place-items:center;
  background:linear-gradient(145deg,var(--blue),var(--navy));color:#fff;font-size:24px;font-weight:700;
  box-shadow:0 6px 16px rgba(30,111,196,.28)}
.bkcard .tx{padding:14px 17px 17px;display:flex;flex-direction:column;gap:7px;flex:1}
.bkcard .tx b{font-size:calc(15.5px * var(--fz-all,1) * var(--fz-card,1));color:var(--navy);font-weight:600;line-height:1.55}
.bkcard .tx p{margin:0;font-size:13px;color:var(--muted);line-height:1.7;flex:1}
.bkcard .tx .bk-meta{font-size:12.5px;color:var(--muted);line-height:1.6}
.bkcard .tx .bk-meta:before{content:"\1F551\00a0";font-size:11.5px}
.bk-ops{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
.bk-ops .btn.s{padding:7px 14px;font-size:13px}
/* 预约须知：Tab 顶上的一条淡蓝提示 */
.bknote{margin:0 0 18px;padding:13px 16px;border-radius:12px;font-size:13.5px;line-height:1.75;
  color:#2b4d70;background:#f2f7fd;border:1px solid #d8e7f7;white-space:pre-wrap}

.cgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
.ccard{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:18px 16px;text-align:center;
  transition:.26s;box-shadow:var(--sh-1)}
/* 合作交流的卡片只展示信息，不跳详情页，所以不做手势提示 */
.ccard.flat{cursor:default}
.ccard.flat:hover{border-color:#cfe2f7;box-shadow:var(--sh-2);transform:none}
.ccard .sub{font-size:12.5px;color:var(--muted);margin-top:6px;line-height:1.7;word-break:break-word}
.ccard:hover{transform:translateY(-3px);box-shadow:var(--sh-2);border-color:#cfe2f7}
.ccard .ph{width:88px;height:88px;margin:2px auto 14px;border-radius:50%;overflow:hidden;background:var(--line-2);
  border:3px solid #fff;box-shadow:0 4px 14px rgba(16,47,82,.12)}
.ccard .ph img{width:100%;height:100%;object-fit:cover}
.ccard .tx{font-size:calc(14.5px * var(--fz-all,1) * var(--fz-card,1));color:var(--navy);font-weight:500;line-height:1.6}

/* ============ 详情页 ============ */
.dwrap{max-width:900px;margin:0 auto}
.dwrap.member-detail-wrap{max-width:none}
.dhead{padding:34px 0 22px;border-bottom:1px solid var(--line);margin-bottom:28px}
.dhead h1{font-size:calc(29px * var(--fz-all,1) * var(--fz-dt,1));line-height:1.4;letter-spacing:-.015em;margin-bottom:14px}
.dmeta{display:flex;gap:18px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
.dmeta .pill{background:var(--blue-100);color:var(--blue);padding:2px 11px;border-radius:20px;font-size:12.5px}
.dbody{font-size:calc(16px * var(--fz-all,1) * var(--fz-body,1));line-height:2;color:var(--ink-2)}
.dbody img{max-width:100%;height:auto;border-radius:12px;margin:16px 0;box-shadow:var(--sh-1)}
.dbody a{color:var(--blue);text-decoration:underline;text-underline-offset:3px;word-break:break-all}
.dbody h3{font-size:calc(17px * var(--fz-all,1) * var(--fz-body,1));color:var(--navy);margin:24px 0 10px}
.dbody b,.dbody strong{color:var(--ink)}
.dbody u{text-decoration:none}
.abstract{background:var(--blue-50);border:1px solid #dbeafe;border-radius:12px;padding:18px 20px;
  font-size:17px;line-height:1.95;color:var(--ink-2);margin-bottom:22px}
.abstract .lb{font-size:12px;color:var(--blue);letter-spacing:.12em;font-weight:600;
  text-transform:uppercase;margin-bottom:8px}
.abstract-h{font-size:15px;color:var(--blue);font-weight:700;letter-spacing:.08em;margin-bottom:10px;
  display:flex;align-items:center;gap:8px}
.abstract-h:before{content:"";width:4px;height:16px;border-radius:2px;background:var(--blue)}
.actbar{display:flex;gap:10px;flex-wrap:wrap;margin:26px 0 6px}

/* PDF 预览 */
.pdfbox{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;
  box-shadow:var(--sh-1);margin:26px 0 8px}
.pdfbox .hd{display:flex;align-items:center;gap:11px;padding:14px 20px;border-bottom:1px solid var(--line);
  background:var(--blue-50)}
/* PDF 胶囊：定宽不压缩、文字不折行（修复被压成竖条的问题） */
.pdfbox .hd .ic{width:34px;height:24px;border-radius:12px;background:#e34b4b;color:#fff;
  display:flex;align-items:center;justify-content:center;flex:0 0 34px;
  font-size:10px;font-weight:700;letter-spacing:.02em;white-space:nowrap;line-height:1}
.pdfbox .hd b{font-size:14.5px;color:var(--navy);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pdfbox .hd b em{font-style:normal;font-size:12.5px;color:var(--muted);margin-left:8px;font-weight:400}
.pdfbox .hd .act{display:flex;gap:8px;flex:0 0 auto}
.pdfbox .hd .act a,.pdfbox .hd .act .fsbtn{font-size:13px;color:var(--blue);padding:5px 13px;border:1px solid #cfe2f7;
  border-radius:8px;background:#fff;transition:.2s;white-space:nowrap;cursor:pointer;
  font-family:inherit;line-height:1.6}
.pdfbox .hd .act a:hover,.pdfbox .hd .act .fsbtn:hover{background:var(--blue);color:#fff;border-color:var(--blue)}
.pdfbox object,.pdfbox iframe{width:100%;height:78vh;min-height:560px;border:0;display:block;background:#fff}
/* 全屏预览 */
.pdfbox:fullscreen{border-radius:0;border:0;height:100vh;display:flex;flex-direction:column;margin:0}
.pdfbox:fullscreen .hd{flex:0 0 auto}
.pdfbox:fullscreen object,.pdfbox:fullscreen iframe{flex:1;height:auto;min-height:0}
.pdfbox:-webkit-full-screen{border-radius:0;border:0;height:100vh;display:flex;flex-direction:column;margin:0}
.pdfbox:-webkit-full-screen object{flex:1;height:auto;min-height:0}
.pdfbox .fb{height:78vh;min-height:300px;display:grid;place-items:center;padding:30px;
  text-align:center;color:var(--ink-2);font-size:14.5px;line-height:2;
  background:linear-gradient(180deg,#fff,#f4f8fc)}
.pdfbox .fb a{color:var(--blue);text-decoration:underline;text-underline-offset:3px}

/* 资源下载卡片（压缩包 / Word / PPT 这类浏览器内嵌不了的附件）
   以前这类文件被硬塞进 <object>，浏览器渲染不了 → 一进详情页就默默下载。
   现在改成一张卡片，把「下载」变成一个明确的按钮。 */
.dlbox{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;
  box-shadow:var(--sh-1);margin:26px 0 8px}
.dlbox .hd{display:flex;align-items:center;gap:11px;padding:14px 20px;border-bottom:1px solid var(--line);
  background:var(--blue-50)}
.dlbox .hd .ic{width:34px;height:34px;border-radius:8px;background:#5b7c99;color:#fff;display:grid;
  place-items:center;font-size:10px;font-weight:700;letter-spacing:.02em;flex:0 0 auto}
.dlbox .hd .ic.t-archive{background:#c98a2b}
.dlbox .hd .ic.t-pdf{background:#e34b4b}
.dlbox .hd .ic.t-word{background:#2b579a}
.dlbox .hd .ic.t-excel{background:#1d7a4c}
.dlbox .hd .ic.t-ppt{background:#c1552b}
.dlbox .hd .ic.t-image,.dlbox .hd .ic.t-video{background:#7a5bc9}
.dlbox .hd b{font-size:14.5px;color:var(--navy);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dlbox .hd b em{font-style:normal;font-size:12.5px;color:var(--muted);margin-left:8px;font-weight:400}
.dlbox .hd .act{display:flex;gap:8px;flex:0 0 auto}
.dlbox .hd .act a{font-size:13px;color:var(--blue);padding:5px 13px;border:1px solid #cfe2f7;
  border-radius:8px;background:#fff;transition:.2s;white-space:nowrap;line-height:1.6}
.dlbox .hd .act a:hover{background:var(--blue);color:#fff;border-color:var(--blue)}
.dlbox .hd .act a.dload{background:var(--blue);color:#fff;border-color:var(--blue);font-weight:600;
  padding:6px 18px;font-size:13.5px;box-shadow:0 2px 8px rgba(24,92,168,.18)}
.dlbox .hd .act a.dload:hover{background:#12467e;border-color:#12467e}
.dlbox .body{padding:18px 22px 20px}
.dlbox .frow{display:flex;gap:14px;padding:7px 0;border-bottom:1px dashed #eaf0f6;font-size:14px}
.dlbox .frow:last-of-type{border-bottom:0}
.dlbox .frow .k{flex:0 0 84px;color:var(--muted);font-size:13px;line-height:1.9}
.dlbox .frow .v{flex:1;color:var(--navy);word-break:break-all;line-height:1.7}
.dlbox .tip{margin:12px 0 0;font-size:13px;color:var(--muted);line-height:1.8}
@media (max-width:640px){
  .dlbox .hd{flex-wrap:wrap;gap:9px}
  .dlbox .hd b{flex:1 1 100%;order:2}
  .dlbox .hd .act{order:3;flex:1 1 100%}
  .dlbox .hd .act a{flex:1;text-align:center}
}

/* ==========================================================
   首页顶部 · 整行照片轮播
   ----------------------------------------------------------
   内容与顺序都在后台「首页管理」里配。
   --hb-h 是桌面端最大高度；窄屏按 34vw 自动变矮。
   只有一张照片时不显示箭头/圆点，也不自动切换。
   ========================================================== */
/* 轮播不再通栏铺满，改跟正文一样宽（对齐 .wrap 内容区，左右留白一致） */
.hb{position:relative;background:transparent;max-width:var(--max);margin:0 auto;padding:0 32px}
.hb-vp{position:relative;width:100%;height:clamp(190px,32vw,var(--hb-h,420px));overflow:hidden}
.hb-tr{position:absolute;inset:0}
.hb-sl{position:absolute;inset:0;display:block;opacity:0;transition:opacity .7s ease}
.hb-sl.on{opacity:1}
/* 照片适配：默认「填满整行」，可在后台切成不裁切的两种 */
.hb-sl .hb-mn{display:block;width:100%;height:100%}
.hb.fit-cover .hb-mn{object-fit:cover}
.hb.fit-contain .hb-mn,.hb.fit-blur .hb-mn{object-fit:contain}
.hb.fit-contain .hb-vp{background:#0d2242}
.hb.fit-blur .hb-vp{background:#0d2242}
/* 完整显示时，两侧空白用同一张图放大虚化补上 */
.hb.fit-blur .hb-bl{position:absolute;left:0;top:0;width:100%;height:100%;object-fit:cover;
  transform:scale(1.25);filter:blur(30px) saturate(1.15);opacity:.5}
.hb.fit-blur .hb-mn{position:relative;z-index:1}
.hb-nv{position:absolute;top:50%;transform:translateY(-50%);z-index:3;width:44px;height:44px;
  border:0;border-radius:50%;cursor:pointer;padding:0 0 3px;line-height:1;
  font-size:26px;font-family:var(--serif);color:var(--navy);background:rgba(255,255,255,.82);
  box-shadow:0 4px 14px rgba(16,47,82,.2);backdrop-filter:blur(6px);transition:.22s;opacity:.9}
.hb-nv:hover{background:#fff;opacity:1}
.hb-pv{left:22px}
.hb-nx{right:22px}
.hb-dots{position:absolute;left:0;right:0;bottom:16px;z-index:3;display:flex;justify-content:center;gap:9px}
.hb-dots button{width:9px;height:9px;padding:0;border:0;border-radius:50%;cursor:pointer;
  background:rgba(255,255,255,.55);box-shadow:0 1px 4px rgba(11,36,62,.35);transition:.22s}
.hb-dots button.on{background:#fff;width:26px;border-radius:6px}

/* ==========================================================
   出版物 · 3:4 TOC 图卡片网格
   ========================================================== */
.filters{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 20px}
.filters .lb2{font-size:13px;color:var(--muted);margin-right:2px}
.chip{border:1px solid var(--line);background:#fff;border-radius:20px;padding:6px 15px;font-size:13.5px;
  color:var(--ink-2);cursor:pointer;transition:.2s;line-height:1.6}
.chip:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-50)}
.chip.on{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:500}

.tocgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:22px}
.tcard{background:#fff;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;
  display:flex;flex-direction:column;cursor:pointer;transition:.26s;box-shadow:var(--sh-1)}
.tcard:hover{transform:translateY(-5px);box-shadow:var(--sh-2);border-color:#cfe2f7}
/* TOC 图：定高 200px（保证跨卡片引文行对齐），图片等比完整显示、白底融合无留白感
   ⚠️ 2026-10-05 老师指出「图的上下左右要居中」。原来这里有两个毛病：
     ① padding 是 `10px 12px 0` —— 底部 0 padding，图片被顶到上边，
        下面空一大块，视觉上就是「没居中」；
     ② JS 的 fitToc() 会给容器加 .fill 类，而 .fill 原本是 display:block，
        把上面那行 flex + align-items:center 的居中效果**整个覆盖掉**了。
        —— 两处叠加，实测每张卡上下留白 10px vs 53.5px、左右 12px vs 12px。
      现在：padding 四边对称，.fill 也保持 flex 居中。 */
.tcard .ph{position:relative;background:#fff;overflow:hidden;
  display:flex;align-items:center;justify-content:center;height:200px;padding:10px 12px}
/* .fill 原来写 display:block，会顶掉 flex 居中 —— 改成继续用 flex 并显式再声明一次居中，
   免得以后有人改 .ph 时又悄悄失效。 */
.tcard .ph.fill{display:flex;align-items:center;justify-content:center;background:#fff}
.tcard .ph.fill:before,.tcard .ph.fill:after{display:none}
.tcard .ph img{position:relative;z-index:2;width:auto;height:auto;max-width:100%;max-height:100%;
  object-fit:contain;object-position:center;transition:.5s;display:block;margin:auto}
/* 期刊全称：底栏左侧，flex:1 占满剩余空间，过长自动换行不截断 */
.tcard .jnf{color:var(--blue);font-weight:500;flex:1 1 auto;min-width:0;line-height:1.5}
.tcard:hover .ph img{transform:scale(1.035)}
.tcard .ph .no{font-family:var(--serif);font-size:40px;color:#c9dced;letter-spacing:.02em}
/* 重点推荐小黄星（后台可勾选） */
.stk{display:inline-block;vertical-align:middle;color:#f5b301;font-size:15px;line-height:1;
  text-shadow:0 1px 3px rgba(120,80,0,.28);margin-left:5px}
.tcard .ph .stk{position:absolute;top:10px;right:11px;z-index:4;font-size:19px;margin:0;
  text-shadow:0 2px 8px rgba(0,0,0,.45);filter:drop-shadow(0 1px 2px rgba(0,0,0,.35))}
.stkc{display:inline-block;font-size:11.5px;font-weight:700;letter-spacing:.04em;color:#8a5b00;
  background:linear-gradient(180deg,#fff5d6,#ffe9ab);border:1px solid #f2d489;border-radius:20px;
  padding:2px 9px;white-space:nowrap}
/* 星章在左、DOI/全文徽标靠右（.dv 自带 margin-left:auto） */
.tcard .ft .dv{margin-left:8px}
.tcard .ft a.dv{color:var(--blue);text-decoration:none;cursor:pointer}
.tcard .ft a.dv:hover{text-decoration:underline}
.dlinks .stkc,.dlinks a.stkc{color:#8a5b00;background:linear-gradient(180deg,#fff5d6,#ffe9ab);
  border:1px solid #f2d489;border-radius:8px;padding:5px 12px;font-size:13px}
.pub .meta .stkc{margin-right:4px}
.rlist .tx .stk{font-size:13px}
/* 列表行末尾的「附件」角标：让人在点之前就知道是能在线看还是要下载 */
.at-chip{display:inline-block;margin-left:9px;padding:1px 8px;border-radius:20px;font-size:11.5px;
  font-weight:500;line-height:1.9;vertical-align:middle;white-space:nowrap;letter-spacing:.02em}
.at-chip.pv{color:#b0332f;background:#fdeceb;border:1px solid #f3cfcc}
.at-chip.dl{color:#8a5b00;background:linear-gradient(180deg,#fff5d6,#ffe9ab);border:1px solid #f2d489}
.tcard .bd{padding:14px 15px 16px;flex:1;display:flex;flex-direction:column;
  font-family:"Times New Roman","Songti SC","Noto Serif SC",serif}
/* 作者行：完整显示、两端对齐（老师要求只保留通讯作者 * 号） */
.tcard .au{font-size:13px;color:var(--ink-2);line-height:1.7;margin-top:7px;
  text-align:justify}
/* 化学式下标 */
/* 化学式下标：Word 风格（缩小、下沉、紧贴、同字体） */
.tcard sub,.dinfo h1 sub{font-size:.66em;line-height:1;vertical-align:-.18em;
  letter-spacing:normal;font-family:inherit}
/* 期刊眉头：期刊名做小徽标行（学术排版惯例：刊名在上、文章标题在下） */
.tcard .jn{font-size:12px;font-weight:700;color:var(--blue);letter-spacing:.05em;
  margin-bottom:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tcard .jr{font-family:"Times New Roman","Songti SC","Noto Serif SC",serif;font-size:16px;
  font-weight:700;color:var(--navy);line-height:1.5;text-align:justify;
  hyphens:auto;-webkit-hyphens:auto}
.tcard:hover .jr{color:var(--blue)}
/* 期刊全称：单独一行完整显示（不截断） */
.tcard .jnf{color:var(--blue);font-weight:500;font-size:12.5px}
/* DOI 在底栏最右（不遮盖期刊全称）；星标紧随期刊名 */
.tcard .ft .stkc{margin-left:2px}
.tcard .au{font-size:12.5px;color:var(--ink-2);line-height:1.7;margin-top:7px;
  text-align:justify}   /* 作者/说明区：两端对齐，行数自适应不锁三行 */
.tcard .ft{margin-top:auto;padding-top:12px;display:flex;align-items:center;gap:8px;
  font-size:12px;color:var(--muted);border-top:1px solid var(--line-2)}
.tcard .ft:empty{display:none}
.tcard .ft .dv{margin-left:auto;color:var(--blue);font-weight:500;white-space:nowrap}

/* ==========================================================
   详情页 · TOC 图 + 元信息
   ========================================================== */
/* 图片列放大一些（原来 300 / 320px 照片偏小），右侧文字相应右移。
   图片依旧按真实比例完整显示，不裁切。 */
.dtop{display:grid;grid-template-columns:420px 1fr;gap:34px;align-items:start;margin-bottom:8px}
.dtop.news-detail{display:block;margin:0 0 18px}
.dtop.news-detail .dinfo{width:100%;max-width:none}
.dtop.news-detail .dinfo h1{
  white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;word-break:break-word
}
/* 组内动态这类纯文字详情页：标题居中、日期行也居中（老师 2026-09-30 要求）。
   论文/成员详情页是左图右文布局，不套用这里的居中。 */
.dtop.news-detail .dinfo h1{text-align:center}
.dtop.news-detail .dinfo .kv{grid-template-columns:auto auto;justify-content:center}
.dtop.news-detail .dinfo .kv dt{text-align:right}
.dtop.news-detail .dinfo .kv dd{text-align:left}
.dtop.mem{display:block;position:relative;margin-bottom:44px;--member-photo-w:460px;--member-photo-gap:38px}
.dtop.mem .pcol{position:relative;width:var(--member-photo-w)}
.dtop.mem .pcol .tocl{position:absolute;top:100%;left:0;right:0;margin:10px 0 0}
.dtop.mem .dinfo{position:absolute;top:0;right:0;bottom:0;left:calc(var(--member-photo-w) + var(--member-photo-gap));
  width:auto;max-width:none;min-width:0;display:flex;flex-direction:column}
.dtop.mem .dinfo .kv{width:100%;grid-template-columns:112px minmax(0,1fr)}
.abstract.member-intro{flex:1 1 0;min-height:0;overflow:hidden;margin:14px 0 0;
  text-align:justify;text-justify:inter-character}
.abstract.member-intro .abstract-h{flex:0 0 auto}
.dtop .pcol{min-width:0}
/* 详情页图片：容器比例由 JS 设为图片真实比例，图片整块铺满 —— 保证完整显示、不裁切
   ⚠️ 2026-10-05 同样修「上下左右居中」：
      ① .fill 原来是 display:block，把 .toc 的 grid + place-items:center 覆盖掉了；
      ② img 用 object-fit:cover —— 即使容器比例 = 图片比例，cover 在某些
         取整误差下也会**裁掉图边缘**（实测 592x230 的图，右侧 "2 μm" 标注被切掉）。
      改法：.fill 保持 grid 居中；img 改 object-fit:contain，任何比例都不裁切，
      多出来的部分露出白底（和卡片区的观感一致）。 */
.dtop .toc{position:relative;border:1px solid var(--line);border-radius:var(--r);
  aspect-ratio:4/3;background:#f4f8fc;display:grid;place-items:center;overflow:hidden;
  box-shadow:var(--sh-1)}
.dtop .toc.fill{display:grid;place-items:center;background:#eef4fa}
.dtop .toc.fill:before,.dtop .toc.fill:after{display:none}
.dtop .toc img{position:relative;z-index:2;width:100%;height:100%;object-fit:contain;
  object-position:center;display:block;margin:auto}
.dtop .toc .no{position:relative;z-index:2}
.dtop .toc .no{font-family:var(--serif);font-size:44px;color:#c5d9ea}
.dtip{margin-top:16px;font-size:14px;line-height:1.8;color:var(--muted);
  background:var(--blue-50);border:1px solid #dbeafe;border-radius:10px;padding:12px 14px}
.dtop .tocl{margin-top:10px;text-align:center;font-size:11.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--muted)}
.dinfo{min-width:0}
.dinfo h1{font-size:calc(27px * var(--fz-all,1) * var(--fz-dt,1));line-height:1.42;letter-spacing:-.018em;margin-bottom:12px}
/* 论文详情标题：Times New Roman（中文回退宋体）、字号收敛、两端对齐 */
.dinfo h1.pt{font-family:"Times New Roman","Songti SC","Noto Serif SC",serif;
  font-size:calc(21px * var(--fz-all,1) * var(--fz-dt,1));line-height:1.5;
  letter-spacing:0;text-align:justify;hyphens:auto;-webkit-hyphens:auto}
.dinfo .kv{margin-bottom:14px}
.dlinks{display:flex;gap:9px;flex-wrap:wrap;margin-top:4px}
.dlinks a{font-size:13px;color:var(--blue);border:1px solid #cfe2f7;background:var(--blue-50);
  padding:5px 13px;border-radius:8px;transition:.2s}
.dlinks a:hover{background:var(--blue);color:#fff;border-color:var(--blue)}

/* 上下篇导航 */
.pnav{display:flex;gap:14px;margin:34px 0 6px}
.pnav a{flex:1;min-width:0;background:#fff;border:1px solid var(--line);border-radius:var(--r);
  padding:14px 18px;transition:.22s;box-shadow:var(--sh-1)}
.pnav a:hover{border-color:#cfe2f7;box-shadow:var(--sh-2)}
.pnav a .k{font-size:11.5px;color:var(--muted);letter-spacing:.1em;text-transform:uppercase}
.pnav a .t{font-size:14.5px;color:var(--navy);font-weight:500;margin-top:4px;line-height:1.6;
  word-break:break-word}
.pnav a.r{text-align:right}

/* ============ 分页 / 空态 ============ */
.pager{display:flex;justify-content:center;align-items:center;gap:7px;flex-wrap:wrap;margin:34px 0 4px}
.pager button{min-width:36px;height:36px;padding:0 12px;border:1px solid var(--line);background:#fff;
  border-radius:9px;font-size:14px;color:var(--ink-2);cursor:pointer;transition:.2s;line-height:1}
.pager button:hover:not(:disabled):not(.on){border-color:var(--blue);color:var(--blue);background:var(--blue-50)}
.pager button.on{background:linear-gradient(135deg,var(--blue),var(--blue-2));color:#fff;
  border-color:transparent;font-weight:600;box-shadow:var(--sh-blue)}
.pager button:disabled{opacity:.4;cursor:default}
.pager .pg-nav{padding:0 15px;font-size:13.5px}
.pager .gap{color:var(--muted);padding:0 2px;user-select:none}
.pager .info{font-size:12.5px;color:var(--muted);margin-left:8px}
.more-wrap{text-align:center;margin:30px 0 6px}
.more-btn{padding:11px 32px;border-radius:10px;border:1px solid var(--line);background:#fff;
  color:var(--ink-2);font-size:14.5px;cursor:pointer;transition:.22s}
.more-btn:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-50)}
.empty{padding:70px 0;text-align:center;color:var(--muted)}
.empty a{color:var(--blue);text-decoration:underline}

/* ============ 统计条 ============ */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-top:26px}
.stat{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:20px 22px;box-shadow:var(--sh-1)}
.stat b{display:block;font-size:30px;font-weight:700;color:var(--navy);line-height:1.2;
  font-family:var(--serif);letter-spacing:-.01em}
.stat b i{font-style:normal;font-size:14px;color:var(--muted);font-weight:400;margin-left:3px}
.stat span{font-size:13.5px;color:var(--muted)}

/* ============ 方向卡片 ============ */
.dgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.dcard{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:24px 24px 22px;
  position:relative;overflow:hidden;transition:.26s;box-shadow:var(--sh-1)}
.dcard:hover{transform:translateY(-4px);box-shadow:var(--sh-2);border-color:#cfe2f7}
.dcard .no{font-family:var(--serif);font-size:32px;font-weight:700;color:var(--blue-100);line-height:1;margin-bottom:10px}
.dcard h4{font-size:16px;line-height:1.6;margin-bottom:7px}
.dcard .en{font-size:12.5px;color:var(--muted);line-height:1.65;min-height:3.2em}
.dcard p{font-size:14px;color:var(--ink-2);line-height:1.85;margin-top:10px;padding-top:12px;
  border-top:1px solid var(--line-2)}

/* ============ 页脚 ============ */
.footer{background:var(--navy);color:rgba(255,255,255,.7);padding:52px 0 26px;margin-top:20px}
.footer .fg{display:grid;grid-template-columns:1.5fr 1.1fr;gap:48px}
.footer .fg.has-wx{grid-template-columns:1.32fr 1fr 1.1fr;gap:38px}
.footer h5{margin:0 0 16px;font-size:16px;color:#fff;font-weight:600}
/* 页脚标识：同样只放一张图、不垫白底，透明 PNG 直接压在深蓝页脚上 */
.footer .fl{display:flex;align-items:center;margin-bottom:18px}
.footer .fl .mark{height:auto;width:auto;padding:0;border-radius:0;background:transparent;
  display:flex;align-items:center;flex:0 0 auto}
.footer .fl .mark img{display:block;height:var(--nav-logo,48px);width:auto;max-width:420px;object-fit:contain}
@media (max-width:1200px){.footer .fl .mark img{height:calc(var(--nav-logo,48px) * .92)}}
.footer .fl .mark.no-img{display:none}
/* 页脚微信公众号：整图按比例放，给足宽度才扫得动 */
.footer .wx-img{display:block;width:100%;max-width:420px;border-radius:12px;overflow:hidden;
  background:transparent;padding:0;line-height:0;transition:.25s}
.footer .wx-img:hover{transform:translateY(-2px);opacity:.92}
.footer .wx-img img{display:block;width:100%;height:auto}
.footer .wx-tip{margin-top:11px;font-size:13px;line-height:1.7;color:rgba(255,255,255,.6)}
.footer .ct li{display:flex;gap:9px;font-size:14px;line-height:1.85;margin-bottom:10px;color:rgba(255,255,255,.72)}
.footer .ct b{color:rgba(255,255,255,.95);font-weight:500;flex:0 0 42px}
.footer .ct li span{flex:1;min-width:0}
.footer .bot{margin-top:34px;padding-top:18px;border-top:1px solid rgba(255,255,255,.13);
  display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;font-size:12.5px;color:rgba(255,255,255,.45)}

.to-top{position:fixed;right:26px;bottom:30px;width:44px;height:44px;border-radius:12px;display:grid;
  place-items:center;background:#fff;border:1px solid var(--line);box-shadow:var(--sh-2);cursor:pointer;
  color:var(--navy);z-index:60;opacity:0;pointer-events:none;transition:.25s;font-size:17px}
.to-top.on{opacity:1;pointer-events:auto}
.to-top:hover{color:var(--blue)}

/* 灯箱：必须用 #lb 限定，不能用 .lb ——
   .lb 这个类名同时被 .subnav .lb / .pi-field .lb / .pi-tags .lb / .abstract .lb
   当作小标签使用，若在这里写成 .lb 会把那些标签也变成全屏遮罩，导致整页被盖住。 */
#lb{position:fixed;inset:0;background:rgba(10,28,48,.92);z-index:200;display:none;
  align-items:center;justify-content:center;padding:40px}
#lb.on{display:flex}
#lb img{max-width:92%;max-height:80%;border-radius:12px;box-shadow:0 24px 60px rgba(0,0,0,.5)}
#lb .cap{position:absolute;bottom:32px;left:0;right:0;text-align:center;color:#fff;font-size:15px;padding:0 30px}
#lb .x{position:absolute;top:22px;right:30px;color:#fff;font-size:34px;cursor:pointer;opacity:.85;line-height:1}
#lb .x:hover{opacity:1}

/* ============ 响应式 ============ */
@media (max-width:1120px){
  .mgrid,.ggrid,.cgrid,.tocgrid{grid-template-columns:repeat(3,1fr)}
  .pi-hero{grid-template-columns:340px 1fr;gap:28px}
  .dtop{grid-template-columns:340px 1fr;gap:26px}
  .dtop.mem{--member-photo-w:360px;--member-photo-gap:28px}
}
/* 导航单独一档：字号加大后 9 个栏目在 1200 以下就会开始挤 logo，这里先收一档 */
@media (max-width:1200px){
  .header .wrap{gap:14px;height:84px}
  .brand .mark,.brand .mark img{height:calc(var(--nav-logo,48px) * .92)}
  .nav{gap:5px}
  .nav a{padding:10px 12px;font-size:calc(16px * var(--fz-all,1) * var(--fz-nav,1));letter-spacing:0}
  .nav a.on:after{left:12px;right:12px}
}
@media (max-width:920px){
  .header .wrap{height:auto;padding:12px 0;flex-wrap:wrap}
  .burger{display:block}
  .nav{display:none;width:100%;flex-direction:column;align-items:stretch;margin:8px 0 4px;gap:3px}
  .nav.open{display:flex}
  .nav a{padding:13px 16px;font-size:calc(17px * var(--fz-all,1) * var(--fz-nav,1))}
  .nav a:hover{background:var(--head-hover)}
  .nav a.on:after{display:none}
  .nav a.on{background:var(--head-onbg)}
  /* 窄屏下品牌带收一档，别把首屏挤满；两个 logo 仍等高，只是间距缩小 */
  .bbar .wrap{height:calc(var(--bb-h,132px) * .78);gap:calc(var(--bb-gap,56px) * .6)}
  .wrap{padding:0 22px}
  .hb{padding:0 22px}
  .pi-hero{grid-template-columns:1fr;gap:22px}
  .pi-col{max-width:460px;width:100%;margin:0 auto}
  .pgrid,.ngrid,.dgrid,.fgrid,.bkgrid{grid-template-columns:repeat(2,1fr)}
  .mgrid,.ggrid,.cgrid,.tocgrid{grid-template-columns:repeat(2,1fr)}
  .tocgrid{grid-template-columns:repeat(2,1fr) !important}
  .mgrid.c3{grid-template-columns:repeat(2,1fr);max-width:none}
  .mgrid.c3 .pcard .ph{aspect-ratio:3/4}
  .stats{grid-template-columns:repeat(2,1fr)}
  .hb-vp{height:clamp(180px,46vw,300px)}
  .hb-nv{width:38px;height:38px;font-size:22px}
  .hb-pv{left:12px}
  .hb-nx{right:12px}
  .dtop{grid-template-columns:1fr;gap:20px}
  .dtop.mem{display:grid;grid-template-columns:1fr;gap:20px;margin-bottom:8px}
  .dtop.mem .pcol{width:auto}
  .dtop.mem{margin-bottom:8px}
  .dtop.mem .pcol .tocl{position:static;margin-top:10px}
  .dtop.mem .dinfo{position:static;display:block}
  .abstract.member-intro{display:block;min-height:0;overflow:visible;margin:18px 0 0}
  .dtop .toc{max-width:560px;margin:0 auto}
  .mgrid.mh{grid-template-columns:1fr}
  .pb{padding:32px 0 8px}
  .pb h1{font-size:31px}
  .pb-en{font-size:15.5px;margin-left:10px}
  .pb .sub{font-size:16px;margin-top:10px}
  .dinfo h1{font-size:24px}
  .footer .fg,.footer .fg.has-wx{grid-template-columns:1fr;gap:26px}
  .dhead h1{font-size:24px}
}
@media (max-width:600px){
  .mgrid,.ggrid,.cgrid,.ngrid,.dgrid,.fgrid,.pgrid,.tocgrid,.bkgrid{grid-template-columns:1fr}
  .mgrid.c3{grid-template-columns:1fr;max-width:none}
  .mgrid.c3 .pcard .ph{aspect-ratio:3/4}
  .tocgrid{gap:16px}
  .ggrid{grid-template-columns:repeat(2,1fr);gap:12px}
  .pub{grid-template-columns:34px 1fr;gap:10px}
  .kv{grid-template-columns:88px 1fr}
  .pi-name{font-size:26px}
  .pcard.h{grid-template-columns:104px 1fr}
  .pcard.h .ph{min-height:130px}
  .mgrid.mh{grid-template-columns:1fr}
  .footer .bot{flex-direction:column;gap:6px}

  /* 成果卡片手机端紧凑化（2026-10-04）：后台列数是行内样式会压掉上面的响应式，
     这里用 !important 夺回来；标题两端对齐，卡片不再被拉成长条 */
  .tocgrid{grid-template-columns:1fr !important}
  .tcard .jr{text-align:justify;font-size:15px;line-height:1.5}
  .tcard .bd{padding:12px 13px 13px}
  .tcard .ph{height:170px;padding:8px 10px 0}
  .tcard .ft{padding-top:9px}
}
  /* 窄屏：logo 收一档，避免顶栏被长方形 logo 撑出横向滚动 */
  .brand .mark,.brand .mark img{height:calc(var(--nav-logo,48px) * .8)}
  .brand .mark img{max-width:210px}
  .brand .mark.no-img{width:calc(var(--nav-logo,48px) * .8);font-size:10px;border-radius:9px}
  .footer .fl .mark img{height:calc(var(--nav-logo,48px) * .8);max-width:210px}
  .pb{padding:26px 0 6px}
  .pb h1{font-size:27px}
  .pb-en{display:block;margin:7px 0 0;font-size:15px}
  .pb .sub{font-size:15.5px}
  .pb .crumb{font-size:13.5px}
  .bbar .wrap{height:calc(var(--bb-h,132px) * .62);gap:calc(var(--bb-gap,56px) * .42)}
  .bbar .slot{max-width:46%}
}

/* ==========================================================
   按钮的「小号 / 主色 / 次要」三种规格
   后台 admin.css 里一直有，前台之前只有基础 .btn；
   预约页、仪器卡片都要用小号按钮，这里补上（不影响已有页面）。
   ========================================================== */
.btn.s{padding:7px 15px;font-size:13.5px;border-radius:9px}
.btn.p{background:linear-gradient(135deg,var(--blue),var(--blue-2));color:#fff;border-color:transparent;
  box-shadow:0 6px 18px rgba(30,111,196,.2)}
.btn.p:hover{transform:translateY(-1px);box-shadow:0 10px 24px rgba(30,111,196,.3)}
.btn.ghost{background:#fff;border-color:var(--line);color:var(--ink-2)}
.btn.ghost:hover{border-color:var(--blue);color:var(--blue)}
.btn.danger{background:linear-gradient(135deg,#d9463f,#e8665e);border-color:transparent;
  box-shadow:0 6px 18px rgba(217,70,63,.22)}
.btn.danger:hover{box-shadow:0 10px 24px rgba(217,70,63,.3)}
.btn.dis,.btn[disabled]{opacity:.45;cursor:not-allowed;pointer-events:none}
a.btn.dis{pointer-events:none}

/* ==========================================================
   仪器预约
   ------------------------------------------------------------
   .bktable 是一张真正的表格：行 = 时段，列 = 日期。
   格子四态：free 可约 / mine 我约的 / busy 别人约的 / past 已过期。
   窄屏时表格横向滚动，第一列（时段）吸在左边不动。
   ========================================================== */

/* 顶栏：我是谁 + 可约规则 + 退出 */
.bkbar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;background:#fff;border:1px solid var(--line);
  border-radius:var(--r);padding:12px 18px;box-shadow:var(--sh-1);margin-bottom:18px}
.bkbar-me{display:flex;align-items:center;gap:9px;font-weight:600;color:var(--navy)}
.bkbar-me img{width:32px;height:32px;border-radius:50%;object-fit:cover;border:1px solid var(--line)}
.bkbar-me em{font-style:normal;font-weight:400;font-size:13px;color:var(--muted)}
.bk-adm{font-style:normal;font-size:11.5px;font-weight:600;padding:2px 8px;border-radius:6px;
  background:var(--gold-100);color:#a9701d}
/* 「← 返回仪器列表」这类导航动作一律按钮化（老师要求：全站不许再有裸文字按钮） */
.bkback{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:9px;
  font-size:13px;font-weight:600;color:var(--blue);background:#fff;border:1px solid var(--line);
  transition:.2s;margin-right:4px}
.bkback:hover{border-color:var(--blue);background:var(--blue-50);text-decoration:none}
.bkbar-meta{margin-left:auto;font-size:13px;color:var(--muted)}
/* 仪器日程页：只保留返回清单与当前仪器信息，不重复整排栏目导航 */
.bkfocus{display:flex;gap:18px;align-items:stretch;margin-bottom:20px;overflow:hidden;background:#fff;
  border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-1)}
.bkfocus-photo{position:relative;overflow:hidden;flex:0 0 182px;min-height:136px;background:#eaf2f9}
.bkfocus-photo.is-empty{display:flex;align-items:center;justify-content:center;flex:0 0 182px;min-height:136px;border:1px dashed #c9d9e8;border-radius:16px;color:#7188a0;font-size:13px}
.bkfocus-photo img{display:block;width:100%;height:100%;object-fit:cover}
.bkfocus-photo-edit{position:absolute;left:9px;bottom:9px;z-index:2;padding:6px 9px;border-radius:7px;background:rgba(255,255,255,.94);color:#1765a8;font-size:12px;font-weight:700;box-shadow:0 2px 8px rgba(16,56,96,.14)}
.bkfocus-photo-edit:hover{background:#fff;text-decoration:none}
.bkfocus-placeholder{display:grid;place-items:center;width:100%;height:100%;min-height:136px;
  color:#7190ac;font-size:12px;background:linear-gradient(135deg,#eef5fa,#e3edf6)}
.bkfocus-main{display:flex;flex:1;flex-direction:column;align-items:flex-start;justify-content:center;
  gap:8px;min-width:0;padding:15px 18px 15px 0}
.bkfocus-main .bkback{margin-bottom:2px}
.bkfocus-label{font-size:11px;color:var(--blue);font-weight:700;letter-spacing:.08em}
.bkfocus-main strong{color:var(--navy);font-size:19px;line-height:1.5;overflow-wrap:anywhere}
.bkfocus-facts{display:flex;gap:8px;flex-wrap:wrap;color:var(--ink-2);font-size:12px}
.bkfocus-facts span,.bkfocus-facts a{padding:5px 9px;border-radius:7px;background:#f2f7fc}
@media (max-width:640px){
  .bkfocus{gap:0;flex-direction:column}
  .bkfocus-photo{flex:auto;height:150px;min-height:0}
  .bkfocus-main{padding:14px}
  .bkfocus-main strong{font-size:17px}
}
/* 2026-09-29：顶栏右上角原来那排「★ 我的 / 我的资料 / 退出」整块撤了 ——
   资料和密码都并进「个人中心」，退出也在个人中心的侧栏菜单里，
   再留三个按钮既占地方又和左上角那个「← 个人中心」重复。
   配套删掉的：.bkbar-out / .bkbar-link / .bkbar-me2 这三个 class 的样式
   （源码里已经没有任何地方用它们，留着只会让人以为是还在用的东西）。 */
/* 「姓名还没读到」的提醒条 */
.bkhelp{display:flex;gap:10px;flex-wrap:wrap;align-items:baseline;background:#fffaf0;
  border:1px solid #f0d9a8;border-radius:var(--r);padding:12px 18px;margin-bottom:18px;
  font-size:13.5px;line-height:1.7;color:var(--ink-2)}
.bkhelp b{color:#a9701d;flex:none}
.bkhelp code{background:#fff;border:1px solid #f0d9a8;border-radius:5px;padding:1px 7px;font-size:12.5px}
/* 「预约要实名」拦截条：差姓名/手机号就横在页面最上面，附一个去补全的按钮 */
.bkneed{display:flex;align-items:center;gap:14px;background:#fff4f4;border:1px solid #f3c9c9;
  border-left:4px solid var(--err);border-radius:var(--r);padding:14px 18px;margin-bottom:18px}
.bkneed-ic{font-size:22px;line-height:1;flex:none}
.bkneed-tx{flex:1 1 auto;min-width:0}
.bkneed-tx b{display:block;font-size:14.5px;color:#b3272b;margin-bottom:3px}
.bkneed-tx span{display:block;font-size:13px;line-height:1.7;color:var(--ink-2)}
.bkneed .btn{flex:none}
@media (max-width:640px){
  .bkneed{flex-wrap:wrap}
  .bkneed .btn{width:100%;justify-content:center}
}
/* 我的资料：改名卡片 */
.bkprof{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:20px 22px;
  box-shadow:var(--sh-1);margin-bottom:26px}
.bkprof h3{margin:0;font-size:16px;color:var(--navy)}
.bkprof-form{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.bkprof-form input[type=text]{width:220px;padding:9px 12px;border:1px solid var(--line);
  border-radius:9px;font-size:14px;font-family:inherit;color:var(--ink)}
.bkprof-form input[type=text]:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-50)}
/* 「预约实名资料」表单：姓名 / 手机号 / 企业邮箱两列排，窄屏自动单列 */
.bkprof-id{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;align-items:start}
@media (max-width:820px){.bkprof-id{grid-template-columns:1fr}}
.bkprof-fld{display:block;min-width:0}
.bkprof-fld>b{display:block;font-size:13px;color:var(--ink-2);margin-bottom:6px}
.bkprof-fld input[type=text]{width:100%;box-sizing:border-box;padding:9px 12px;border:1px solid var(--line);
  border-radius:9px;font-size:14px;font-family:inherit;color:var(--ink);background:#fff}
.bkprof-fld input[type=text]:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-50)}
/* 只读字段（比如管理员分配的企业邮箱）：一眼看出不能改 */
.bkprof-fld input[readonly]{background:#f6f8fa;color:var(--ink-2);cursor:default}
.bkprof-fld .mini{display:block;margin-top:6px;line-height:1.6}
.bkprof-ops{grid-column:1/-1;display:flex;gap:10px;align-items:center;flex-wrap:wrap;
  border-top:1px dashed var(--line);padding-top:14px}
.bkprof-locked .v{font-size:15px;color:var(--navy);font-weight:600}
/* 我的资料：四张卡片两列排（窄屏自动单列） */
.bkprof-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin-bottom:8px}
@media (max-width:820px){.bkprof-grid{grid-template-columns:1fr}}
.bkprof-grid .bkprof{margin-bottom:0}
.bkprof-lock{display:inline-block;margin-left:8px;font-style:normal;font-size:12px;font-weight:400;
  background:#eef4fb;color:#2b5f96;border:1px solid #d6e8fb;border-radius:20px;padding:2px 10px}
.bkprof-locked{background:var(--blue-50);border:1px dashed #c9dcf3;border-radius:10px;padding:14px 16px}
.bkprof-locked .v{font-size:19px;font-weight:700;color:var(--navy);margin-bottom:6px}
.bkprof-locked span{font-size:13px;color:var(--muted);line-height:1.85}
.bkprof-locked b{color:#143d68}
.bkprof-pass{flex-direction:column;align-items:stretch;gap:9px}
.bkprof-pass input[type=password]{width:100%;box-sizing:border-box;padding:9px 12px;border:1px solid var(--line);
  border-radius:9px;font-size:14px;font-family:inherit;color:var(--ink)}
.bkprof-pass input[type=password]:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-50)}
.bkprof-pass button{align-self:flex-start;margin-top:3px}
/* 姓名锁定后的提示弹窗 */
.bkdlg h3{font-size:17px;margin-bottom:12px}
.bkdlg-btns{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}

/* 图例 */
.bklegend{display:flex;flex-wrap:wrap;gap:8px 20px;font-size:13px;color:var(--ink-2);margin-bottom:14px}
.bklegend span{display:inline-flex;align-items:center;gap:7px}
.bklegend .lg{width:16px;height:16px;border-radius:5px;border:1px solid;flex:none}
.lg.free{background:#fafdff;border-color:#d9e8f8}
.lg.mine{background:linear-gradient(165deg,#5d9ce8,#3a7bc8);border-color:#3a7bc8}
.lg.busy{background:#e9edf2;border-color:#d7dee7}
.lg.past{background:#eef1f5;border-color:#e0e5ec}

/* 翻页条 */
.bkwk{display:flex;align-items:center;justify-content:center;gap:14px;margin-bottom:14px}
.bkwk-t{font-size:13.5px;color:var(--muted)}

/* 表格本体 */
/* ---------- 日程表 ----------
   列宽必须**固定**：以前是 table-layout:auto，列宽由内容决定 ——
   站台方块多一个列就宽一点，预约成功后格子里从「+」换成「我」列宽又变一次，
   拖选高亮时整行重排，结果就是老师说的「一填就莫名很长、会乱跳、日期都被挤没了」。
   现在 table-layout:fixed：列宽只由「第一行的宽度」决定，格子里的内容再怎么变，
   列宽纹丝不动。表格的 min-width 由 PHP 按「站台数 × 天数」算好内联上来，
   窗口不够宽就让 .bkscroll 横向滚动，绝不压列。 */
.bkscroll{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--line);
  border-radius:var(--r);background:#fff;box-shadow:var(--sh-1)}
/* 紧凑时间轴日历（老师反馈「约很多表格会变长，别用表格了」）：
   行高压到 26px、去掉格子的常驻边框、被约时段显示为**整条色带** ——
   视觉上不再是一张大表格，而是一根根彩色时段带；整个表一屏看全，
   约再多高度也纹丝不动（格子高度锁死，色带 absolute 不撑行）。 */
.bktable{border-collapse:separate;border-spacing:0;width:100%;min-width:640px;
  table-layout:fixed;font-size:12.5px}
.bktable th{border-bottom:1px solid var(--line);background:var(--blue-50);color:var(--ink-2);font-weight:600}
.bktable thead th{padding:7px 5px;text-align:center;line-height:1.35}
.bktable thead th b{display:block;color:var(--navy);font-size:13px}
.bktable thead th em{display:block;font-style:normal;font-size:11px;font-weight:400;color:var(--muted)}
.bktable thead th.we{background:var(--gold-100)}
.bktable thead th.we b{color:#a9701d}
.bktable thead th.we em{color:#b98a4a}
/* 今天那一列给个明显标记：底色深一档 + 顶部蓝条 */
.bktable thead th.today{background:#d8eafb;box-shadow:inset 0 3px 0 var(--blue)}
.bktable thead th.today b{color:var(--blue)}
.bktable thead th.today em{color:var(--blue);font-weight:600}
.bktable th.h{position:sticky;left:0;z-index:2;width:76px;min-width:76px;padding:5px 6px;text-align:center;
  background:var(--blue-50);color:var(--ink-2);font-variant-numeric:tabular-nums;border-right:1px solid var(--line)}
.bktable tbody th.h{background:#fafcfe;color:var(--muted);font-weight:500;font-size:11.5px}
.bktable td{border-bottom:1px solid var(--line-2)}
.bktable tbody tr:last-child td{border-bottom:0}

/* 格子 */
.bkcell{height:26px;min-width:64px;text-align:center;vertical-align:middle;cursor:default;
  font-size:12px;color:var(--muted);transition:background .15s,border-color .15s;
  border-right:1px solid var(--line-2);position:relative;overflow:hidden}
/* 可预约：极淡底，不再每个格子描边框（几十个框框排在一起就是「表格感」的来源）；
   悬停时才亮出可点的样子 */
.bkcell.free{background:#f8fbfe;cursor:pointer}
.bkcell.free:hover{background:var(--blue-100);box-shadow:inset 0 0 0 2px var(--blue-2);color:var(--blue)}
.bkcell.free:after{content:"+";position:absolute;inset:0;display:grid;place-items:center;
  color:#c2d9f0;font-size:13px;font-weight:400;opacity:0;transition:opacity .15s}
.bkcell.free:hover:after{opacity:1}
.bkcell.mine{cursor:pointer}
.bkcell.mine:hover .bkb{filter:brightness(.94)}
.bkcell.busy{background:transparent}
.bkcell.past{background:#f2f4f7;color:#b3bcc7;cursor:not-allowed}
.bkcell.past:after{content:"";position:absolute;left:7px;right:7px;top:50%;height:1px;background:#cdd6df}

/* ---------- 预约色带 ----------
   被约的格子不再是一格一个「我」文字块（约一整天整列全是重复小块，
   老师说「表格会变长」），而是**整格填充的色带**：
   · 同一个人连续约的相邻格，服务端标好 data-cu / data-cd，
     上下格去圆角、色带向上多伸 1px 盖住中间分隔线 → 视觉上合成一条；
   · 文字（我 / 姓名 / 已约）只出现在色带首格，后续格留白；
   · 「我的」色带 = 蓝渐变白字；别人的 = 他的头像色（td 上着色，色带 inherit）。 */
.bkb{position:absolute;left:0;right:0;top:0;bottom:0;display:flex;align-items:center;justify-content:center;
  border-radius:7px;font-weight:700;font-size:11.5px;letter-spacing:.02em;
  background:inherit;color:inherit;pointer-events:none}
.bkcell.mine .bkb{background:linear-gradient(165deg,#5d9ce8,#3a7bc8);color:#fff;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.22)}
.bkcell.busy .bkb{left:3px;right:3px;top:1px;bottom:1px;background:#e9f3ff;color:#1765ad;font-weight:700;
  box-shadow:inset 0 0 0 1px #cfe3fa;border-radius:999px}
.bkcell.avfill .bkb{font-weight:700}
.bkcell[data-cu] .bkb{top:-1px;bottom:0;height:calc(100% + 1px);
  border-top-left-radius:0;border-top-right-radius:0}
.bkcell[data-cd] .bkb{border-bottom-left-radius:0;border-bottom-right-radius:0}
/* 连体段内部不放分隔线：border 画在色带包含块之外，负偏移盖不住，
   直接把段内格子的下边框透明掉（border 仍占位，行高不变） */
.bkcell[data-cd]{border-bottom-color:transparent}

/* 说明 / 须知 */
.bktip{margin-top:14px;font-size:13.5px;color:var(--muted);line-height:1.8}
.bktip b{color:var(--ink-2)}

/* ---------- 批量取消测试（横条 + 下拉）----------
   仪器清单页顶部一条 / 个人中心「仪器预约信息」标题旁。
   下拉里按「用途备注」聚合：同一条备注的格子算一个测试，一键全取消。 */
.bkbulk{display:flex;align-items:center;gap:14px;padding:11px 16px;margin-bottom:16px;
  background:var(--blue-50);border:1px solid #d6e8fb;border-radius:12px;font-size:13.5px;color:var(--ink-2)}
.bkbulk-t b{color:var(--navy)}
.bkbulk-host{position:relative;margin-left:auto}
.bkcm-btn{border:1px solid #f0c8c4;background:#fff;color:#b3352f;font-weight:600;font-size:13px;
  padding:7px 14px;border-radius:20px;cursor:pointer;transition:.15s}
.bkcm-btn:hover{background:#fdeeee;border-color:#eab8b3}
.bkcm-btn:disabled{opacity:.55;cursor:wait}
.bkcm{position:absolute;right:0;top:calc(100% + 8px);z-index:60;min-width:290px;max-width:360px;
  background:#fff;border:1px solid var(--line);border-radius:14px;padding:8px;
  box-shadow:0 18px 48px rgba(14,47,82,.18)}
.bkcm-h{font-size:12px;color:var(--muted);padding:6px 10px 8px;border-bottom:1px solid var(--line-2);margin-bottom:6px}
.bkcm-it{display:block;width:100%;text-align:left;background:transparent;border:0;cursor:pointer;
  padding:9px 10px;border-radius:9px;font-size:13px;color:var(--ink);transition:background .13s}
.bkcm-it:hover{background:var(--blue-50)}
.bkcm-it b{display:block;font-weight:600;color:var(--navy);margin-bottom:2px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bkcm-it .mini{display:block;font-size:11.5px}
.bkcm-it.all{margin-top:6px;border-top:1px dashed var(--line-2);border-radius:0 0 9px 9px;
  color:#b3352f;font-weight:600;padding-top:11px}
.bkcm-it.all:hover{background:#fdeeee}
.bknote{background:var(--blue-50);border:1px solid #d6e8fb;border-radius:12px;color:#2b5f96;
  padding:12px 16px;font-size:14px;line-height:1.85;margin-bottom:18px;white-space:pre-wrap}

/* 提示条：保存成功 / 出错 */
.msg{padding:11px 15px;border-radius:10px;margin-bottom:15px;font-size:13.5px;line-height:1.75}
.msg.ok{background:#e8f8f1;border:1px solid #c3e8d9;color:#10754f}
.msg.err{background:#fdeeee;border:1px solid #f5cdcd;color:#a8382f}
.mini{font-size:12.5px;color:var(--muted);font-weight:400}

/* ==========================================================
   仪器管理员：在这台仪器的日程表上直接改开放设置
   ========================================================== */
.bkadm{border:1px solid var(--line);border-radius:var(--r);background:#fff;margin:0 0 18px;overflow:hidden;
  box-shadow:var(--sh-1)}
.bkadm>summary{cursor:pointer;padding:13px 18px;display:flex;flex-wrap:wrap;align-items:center;gap:9px;
  background:var(--blue-50);border-bottom:1px solid var(--line-2);font-size:14.5px;color:var(--navy);
  list-style:none;user-select:none}
.bkadm>summary::-webkit-details-marker{display:none}
.bkadm>summary:before{content:"\25B8";color:var(--blue);font-size:13px;transition:transform .18s;display:inline-block}
.bkadm[open]>summary:before{transform:rotate(90deg)}
.bkadm>summary b{font-weight:600}
.bkadm-f{padding:18px}
.bkadm-row{margin-bottom:14px;display:flex;flex-wrap:wrap;align-items:center;gap:10px}
.bkadm-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:0 16px;margin-bottom:12px}
.bkfld{margin-bottom:13px}
.bkfld>label{display:block;font-size:13px;font-weight:600;color:var(--ink-2);margin-bottom:6px}
.bkfld>label .tip{font-weight:400;color:var(--muted);font-size:12px;margin-left:6px}
.bkfld input[type=text],.bkfld input[type=number],.bkfld textarea{
  width:100%;border:1px solid var(--line);border-radius:9px;padding:8px 11px;font-size:13.5px;
  font-family:inherit;background:#fff;color:var(--ink)}
.bkfld input:focus,.bkfld textarea:focus{outline:0;border-color:var(--blue);box-shadow:0 0 0 3px rgba(37,110,190,.12)}
.bkfld input[type=checkbox]{width:auto;margin:0;flex:none;accent-color:var(--blue);cursor:pointer}
.bkfld label.chk{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:400;
  color:var(--ink-2);margin:0;cursor:pointer}
.bkadm-days{display:flex;flex-wrap:wrap;gap:9px 16px}
.bkadm-days .chk{font-size:13px;color:var(--ink-2)}
.bkadm-ops{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding-top:14px;
  border-top:1px dashed var(--line-2)}
.bkadm-p{padding:13px 18px;background:var(--blue-50);border-top:1px solid var(--line-2);font-size:13px;
  color:var(--ink-2);display:flex;flex-wrap:wrap;align-items:center;gap:9px}
.bkadm-p b{color:var(--navy)}
.bkadm-p1{display:inline-flex;align-items:center;gap:6px;background:#fff;border:1px solid var(--line);
  border-radius:20px;padding:3px 12px 3px 4px;font-size:12.5px}
.bkadm-p1 img{width:24px;height:24px;border-radius:50%;object-fit:cover;flex:none}
.bkadm-p1 em{font-style:normal;color:var(--muted);font-size:11.5px}

/* 一格内按「功能」分成几行（各功能可同时约时用） */
.bktable.multi{min-width:940px}
.bktable.multi .bkcell.multi{min-width:96px}
.bkcell.multi{padding:2px;text-align:left;vertical-align:top}
.bkcell.multi.past{pointer-events:none}
.bkm{display:flex;align-items:center;gap:4px;min-height:16px;margin-bottom:2px;
  padding:1px 6px;border-radius:5px;font-size:10.5px;line-height:1.25;cursor:default;
  border:1px solid transparent;overflow:hidden}
.bkm:last-child{margin-bottom:0}
.bkm .n{font-weight:600;flex:0 0 auto}
.bkm .u{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right;opacity:.92}
.bkm.free{background:transparent;border-color:transparent;color:var(--muted);cursor:pointer}
.bkm.free:hover{background:var(--blue-100);border-color:var(--blue-2);color:var(--blue);font-weight:600}
.bkm.mine{background:var(--blue-100);border-color:var(--blue);color:var(--blue);font-weight:700;cursor:pointer}
.bkm.mine:hover{background:#d3e5f9}
.bkm.busy{background:#e9f3ff;border-color:#cfe3fa;color:#1765ad;border-radius:999px}
.bkm.past{color:#b3bcc7}
.bkcell.multi.past .bkm{border-color:transparent;background:transparent}

/* ==========================================================
   多站台：一格并排放 N 个独立位置（BET 脱气的 6 个站台）
   ----------------------------------------------------------
   1 号站台被人占了，2–6 号同一时段照样能约 —— 所以一格不再是
   「一个洞」，而是一排小方块，一块一块地占。
   ========================================================== */
.bktable.st{min-width:760px}
.bkcell.st{padding:2px 4px;text-align:center;vertical-align:middle;overflow:hidden}
/* 站台方块**不换行**：换行了格子就变两行高，整张表跟着变长、还会左右跳。
   列宽这边保证得够（PHP 按站台数算 min-width），宁可横向滚动也不挤成两行。 */
.bks{display:flex;flex-wrap:nowrap;gap:2px;justify-content:center;align-items:center;
  min-height:13px}
.bks-i{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:13px;height:13px;padding:0 2px;border-radius:4px;
  font-size:9px;font-weight:600;line-height:1;cursor:default;
  border:1px dashed #cdd9e6;background:#fff;color:#9aa9b8;
  transition:background .12s,color .12s,border-color .12s;
}
.bks-i.free{cursor:pointer;border-style:solid;border-color:#dbe7f4;background:#f8fbfe;color:#8fa6bd}
.bks-i.free:hover{background:var(--blue-100);border-color:var(--blue-2);color:var(--blue)}
.bks-i.mine{background:var(--blue-100);border-color:var(--blue);color:var(--blue);font-weight:700;cursor:pointer}
.bks-i.mine:hover{background:#d3e5f9}
.bks-i.busy{background:#e9f3ff;border-color:#cfe3fa;color:#1765ad;border-style:solid}
.bks-i.past{background:#f4f6f9;border-color:#e6eaf0;color:#c3cbd6;border-style:solid;cursor:not-allowed}
.bkcell.st.past .bks-i{cursor:not-allowed}
/* 站台太多（>8）时只写一行「剩 x/N」 */
.bks-n{display:inline-block;font-size:10.5px;color:var(--muted);font-weight:600}
.bkcell.st .bkm{flex-wrap:nowrap;gap:3px}
.bkcell.st .bkm .n{font-size:10px;color:var(--muted);min-width:24px}
/* 功能并行时一格里有好几行（一行一个功能），行高要能自己长；其余格子固定 26px，
   行高统一了表格才不会一格高一格矮地跳 */
.bkcell.multi{height:auto;min-height:26px}

/* 拖选连约：划过的格子高亮，划不动的（满了 / 过期）打叉底 */
.bsel,.bsel.free,.bsel.mine{background:#dcecfc!important;box-shadow:inset 0 0 0 2px var(--blue)!important}
.bsel.free:after{opacity:0!important}
/* 拖选扫过「已被约」的格子：色带要跟着一起反馈（色带是子元素，会盖住 td 的底色） */
.bkcell.bskip .bkb{opacity:.35}
.bkcell.bsel .bkb{box-shadow:inset 0 0 0 2px var(--blue)}
.bskip{background:repeating-linear-gradient(45deg,#f4f6f9,#f4f6f9 5px,#eaeef3 5px,#eaeef3 10px)!important}
/* 连选时长按一下就滑过一片，把浏览器自带的「选蓝文字」关掉，不然满屏蓝色 */
.bktable{user-select:none;-webkit-user-select:none}
/* 没赶上的格子闪一下，让人看清是哪几格 */
.bmiss{animation:bkmisss .8s ease 0s 3}
@keyframes bkmisss{0%,100%{background:transparent}50%{background:#fdecea;box-shadow:inset 0 0 0 2px #e08080}}

/* 拖选时跟着鼠标的一句提示 */
.bksel-tip{
  position:fixed;left:50%;bottom:26px;transform:translate(-50%,14px);
  background:var(--navy);color:#eaf3fd;font-size:13px;font-weight:600;
  padding:9px 18px;border-radius:22px;box-shadow:0 10px 26px rgba(14,47,82,.32);
  opacity:0;pointer-events:none;transition:opacity .14s,transform .14s;z-index:60;
}
.bksel-tip.on{opacity:1;transform:translate(-50%,0)}
.bklegend .lg-drag{margin-left:auto;color:var(--muted);font-size:12px}
@media (max-width:760px){.bklegend .lg-drag{display:none}}

/* 预约弹窗里的点选按钮：功能 / 常用用途，点一下就好，不用打字 */
.bkchips{display:flex;flex-wrap:wrap;gap:7px;margin-top:2px}
.bkchip{border:1px solid var(--line);background:#fff;color:var(--ink-2);border-radius:18px;
  padding:5px 13px;font-size:13px;font-family:inherit;cursor:pointer;transition:.15s;line-height:1.4}
.bkchip:hover{border-color:var(--blue-2);color:var(--blue);background:var(--blue-50)}
.bkchip.on{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:600}

/* 跳到某一天 */
.bkwk-jump{display:inline-flex}
.bkwk-jump input[type=date]{border:1px solid var(--line);border-radius:9px;padding:5px 9px;font-size:13px;
  font-family:inherit;color:var(--ink-2);background:#fff}
.bkwk-jump input:focus{outline:0;border-color:var(--blue)}

/* 「我的预约」列表 */
.bkmine{border:1px solid var(--line);border-radius:var(--r);background:#fff;overflow:hidden;box-shadow:var(--sh-1)}
.bkmine-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:11px 16px;border-bottom:1px solid var(--line-2);font-size:14px}
.bkmine-row:last-child{border-bottom:0}
.bkmine-row .d{font-weight:600;color:var(--navy);font-variant-numeric:tabular-nums}
.bkmine-row .s{color:var(--blue);background:var(--blue-100);border-radius:7px;padding:2px 9px;font-size:12.5px;
  font-variant-numeric:tabular-nums}
.bkmine-row .n{flex:1;min-width:120px;color:var(--ink);font-weight:500}
.bkmine-row .t{color:var(--muted);font-size:13px}
/* 「3 号站台」要一眼看得出来 —— BET 有 6 个站台，约了哪个得知道 */
.bkmine-row .t.stn{color:var(--blue);background:var(--blue-100);border:1px solid #d9e8f8;
  border-radius:7px;padding:1px 8px;font-size:12.5px;font-weight:600;white-space:nowrap}

/* ---------- 预约按天汇总 ----------
   原来一条预约一行、每行都把日期重复一遍，同一天约 6 格就是 6 个「2026-10-01」。
   现在一天一块：日期只出现一次，块头写「共 N 小时 · M 格」，块里才是各时段。 */
.bkd{display:flex;flex-direction:column;gap:14px}
.bkd .bkday{border:1px solid var(--line);border-radius:var(--r);background:#fff;
  overflow:hidden;box-shadow:var(--sh-1)}
.bkday-h{display:flex;align-items:center;gap:10px;padding:10px 16px;background:var(--blue-50);
  border-bottom:1px solid var(--line);flex-wrap:wrap}
.bkday-h b{color:var(--navy);font-size:14.5px;font-variant-numeric:tabular-nums}
.bkday-h em{font-style:normal;font-size:12.5px;color:var(--muted)}
.bkday-sum{margin-left:auto;font-size:12.5px;font-weight:600;color:var(--blue);
  background:#fff;border:1px solid #d9e8f8;border-radius:20px;padding:3px 11px;white-space:nowrap}
.bkday .bkmine-row:last-child{border-bottom:0}
.bkday .bkmine-row .n a{color:var(--ink);text-decoration:none;border-bottom:1px dashed #c8d6e6}
.bkday .bkmine-row .n a:hover{color:var(--blue);border-bottom-color:var(--blue)}
.bkday .bkmine-row .s{min-width:96px;text-align:center}

/* 「只看我的」开关：值日表上排着全组几十号人，学生只想确认哪天轮到自己 */
.monly{display:inline-flex;align-items:center;gap:7px;font-size:13px;color:var(--ink-2);
  cursor:pointer;user-select:none;background:#fff;border:1px solid var(--line);
  border-radius:20px;padding:6px 14px;transition:.18s}
.monly:hover{border-color:var(--blue);color:var(--blue)}
.monly input{width:15px;height:15px;margin:0;accent-color:var(--blue);cursor:pointer}

/* 组内安排的时间范围筛选：全部 / 只看本周 / 只看本月 */
.drng{display:inline-flex;gap:6px;margin-left:12px;flex-wrap:wrap}
.drng-b{padding:6px 14px;font-size:13px;border-radius:20px;border:1px solid var(--line);
  background:#fff;color:var(--ink-2);cursor:pointer;transition:.18s}
.drng-b:hover{border-color:var(--blue);color:var(--blue)}
.drng-b.on{background:var(--blue);border-color:var(--blue);color:#fff}

/* 「个人中心 → 我的资料」：三张卡（实名资料 / 用户名 / 密码）叠成一列，
   卡头沿用按天汇总那套 .bkday 的样式，卡体给点内边距把表单撑开 */
.mprof-card{margin-bottom:14px}
.mpf-b{padding:14px 16px}
.mpf-b .mini{margin:0 0 10px;color:var(--muted);font-size:12.5px;line-height:1.6}
.mpf-b input[readonly]{background:#f4f6f9;color:var(--muted);cursor:not-allowed}
/* ---- 「预约实名资料 / 登录账号」两个区块的布局（2026-10-05 修排版）----
   ⚠️ 这两个区块原来也套 class="mpass"（想复用改密码那块的样式），
      但 .mpass 已改成「普通容器 + 内部 .mpf-row 三列网格」，
      复用它会让姓名/手机号/按钮全挤在一行、按钮压住输入框（老师截图）。
      **结论：.mpass 只给「修改密码」用，这里一律 .mpf-form。** */
.mpf-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 18px;align-items:start}
.mpf-f{display:flex;flex-direction:column;gap:6px;min-width:0;
  font-size:12.5px;color:var(--ink-2);line-height:1.35}
.mpf-f>span{display:block}
/* 「我的信息」只读展示区（姓名 / 手机号 / 登录邮箱）
   ⚠️ 2026-10-05 老师要求：这四项个人**不能改**（后台从企业微信 Excel 导入维护），
   但**要展示给人看**。所以用 dl/dt/dd 纯文本排版，不是输入框。
   （.mpf-tags / .mpf-act / .mpf-f 还在用 —— 改密码区靠它们，别删。）

   为什么用 dl 而不是一堆只读 input：只读 input 会让人以为「我能改」，
   而且读屏软件读出来是「可编辑文本框」，语义不对。 */
.mpf-ro{margin:0;display:flex;flex-direction:column;gap:11px}
.mpf-ro-r{display:grid;grid-template-columns:78px minmax(0,1fr);gap:12px;align-items:baseline}
.mpf-ro-r>dt{font-size:12.5px;color:var(--muted);line-height:1.6}
.mpf-ro-r>dd{margin:0;font-size:14px;color:var(--ink);line-height:1.6;
  word-break:break-all;font-weight:600}
.mpf-ro-none{color:var(--muted);font-weight:400}
.mpf-ro-tip{margin:13px 0 0;padding-top:11px;border-top:1px solid var(--line-2);
  font-size:12px;line-height:1.7;color:var(--muted)}
.mpf-ro-tip::before{content:'↳ ';color:var(--blue);font-weight:700}
.mpf-tags{margin-top:5px;display:flex;flex-wrap:wrap;gap:5px}
.mpf-tags .badge{font-size:11.5px}
@media(max-width:420px){
  .mpf-ro-r{grid-template-columns:66px minmax(0,1fr);gap:9px}
}
.mpf-act{grid-column:1 / -1;display:flex;align-items:center;gap:14px;flex-wrap:wrap}
/* 输入框样式原来挂在 .mpass input 上，这里搬一份（别指望复用，那块改成网格了） */
.mpf-form input{
  padding:9px 11px;border:1px solid var(--line);border-radius:9px;background:var(--white);
  font:inherit;font-size:13.5px;color:var(--ink);width:100%;
}
.mpf-form input:focus{border-color:var(--blue-2);outline:2px solid rgba(26,86,168,.12);outline-offset:0}
@media(max-width:640px){.mpf-form{grid-template-columns:1fr}}
.mwho-i .me-tag{font-style:normal;font-size:11px;font-weight:700;color:var(--blue);
  background:var(--blue-100);border-radius:5px;padding:1px 6px}

/* 「个人中心 → 简历修改」：导师自维护简历 */
.cv-photo{display:flex;align-items:center;gap:16px;margin-bottom:18px}
.cv-photo img{width:96px;height:96px;border-radius:14px;object-fit:cover;border:1px solid var(--line)}
.cv-photo-empty{width:96px;height:96px;border-radius:14px;border:1px dashed var(--line);
  display:grid;place-items:center;color:var(--muted);font-size:12.5px;background:#fafcfe}
.cv-photo-ops{display:flex;flex-direction:column;gap:6px}
.cv-fields{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px;margin-bottom:20px}
.cv-f{display:flex;flex-direction:column;gap:6px}
.cv-f .k{font-size:13px;color:var(--muted);font-weight:600}
.cv-f input{width:100%;padding:9px 12px;border:1px solid var(--line);border-radius:9px;
  font-size:14px;font-family:inherit;color:var(--ink);background:#fff}
.cv-f input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(30,111,196,.12)}
.cv-rt{border:1px solid var(--line);border-radius:12px;overflow:hidden;margin-bottom:18px}
.cv-tb{display:flex;flex-wrap:wrap;gap:4px;padding:8px 10px;background:var(--blue-50);
  border-bottom:1px solid var(--line)}
.cv-tb button{min-width:30px;height:28px;padding:0 8px;border:1px solid var(--line);border-radius:7px;
  background:#fff;color:var(--ink-2);cursor:pointer;font-size:13px;transition:.15s}
.cv-tb button:hover{background:var(--blue-100);color:var(--blue);border-color:#cfe2f7}
.cv-tb-sep{width:1px;height:20px;background:var(--line);margin:0 4px;align-self:center}
.cv-tb .cv-sel{height:28px;padding:0 4px;border:1px solid var(--line);border-radius:7px;background:#fff;color:var(--ink);font-size:12.5px;cursor:pointer}
.cv-tb .cv-sel:hover{border-color:#cfe2f7}
.cv-tb .cv-num{height:28px;width:52px;padding:0 4px;border:1px solid var(--line);border-radius:7px;background:#fff;color:var(--ink);font-size:12.5px}
.cv-tb .cv-num:focus{border-color:var(--blue);outline:none}
/* 点字号/字体控件时正文的假选区高亮（选区在输入框聚焦期间仍然可见） */
.cv-fakesel{background:#b3d4fc}
/* 背景色板里的「透明」格：白底红斜线 */
.cv-sw-none{background:#fff!important;position:relative}
.cv-sw-none::after{content:'';position:absolute;left:2px;top:8px;width:14px;height:2px;background:#c0392b;transform:rotate(-45deg)}
/* 颜色按钮上的小色条 + 色板弹层 */
.cv-tb .cbar{display:block;width:16px;height:4px;border-radius:2px;margin:1px auto 0}
.cv-palette{position:absolute;z-index:80;top:calc(100% + 6px);left:0;background:#fff;
  border:1px solid var(--line);border-radius:10px;padding:10px;box-shadow:0 12px 32px rgba(14,47,82,.16)}
.pal-grid{display:grid;grid-template-columns:repeat(8,20px);gap:5px}
.cv-sw{display:block;width:20px;height:20px;border-radius:5px;cursor:pointer;border:1px solid rgba(0,0,0,.12);transition:.12s}
.cv-sw:hover{transform:scale(1.18);border-color:var(--navy)}
.pal-custom{display:flex;align-items:center;gap:6px;margin-top:9px;font-size:12px;color:var(--ink-2)}
.pal-custom input[type=color]{width:34px;height:24px;border:1px solid var(--line);border-radius:5px;
  padding:1px;background:#fff;cursor:pointer}
.cv-edit{min-height:260px;max-height:520px;overflow-y:auto;padding:16px 18px;font-size:14.5px;
  line-height:1.8;color:var(--ink);outline:none;background:#fff}
.cv-edit:empty:before{content:attr(data-ph);color:var(--muted)}
.cv-edit h2{margin:14px 0 8px;font-size:18px}
.cv-edit h3{margin:14px 0 8px;font-size:16px}
.cv-edit hr{border:0;border-top:1px solid var(--line-2);margin:14px 0}
.cv-edit ul,.cv-edit ol{padding-left:22px;margin:8px 0}
.cv-edit img{max-width:100%;border-radius:8px;margin:6px 0}
.cv-edit a{color:var(--blue);text-decoration:underline}
.cv-ops{display:flex;align-items:center;gap:14px}
.cv-ops .mres{font-size:13.5px}
@media (max-width:700px){
  .cv-fields{grid-template-columns:1fr}
  .cv-photo{flex-direction:column;align-items:flex-start}
}

/* 仪器卡片上的「近 N 天已约 M 次」小标 */
.bk-busy{display:inline-block;margin-left:8px;font-size:11.5px;font-weight:500;padding:2px 8px;
  border-radius:6px;background:var(--gold-100);color:#a9701d;vertical-align:middle}

/* 仪器卡片上的「功能」标签：这台仪器能做哪几种测试 */
.bk-modes{margin-top:8px;display:flex;flex-wrap:wrap;gap:5px}
.bk-mode{display:inline-block;padding:2px 9px;border-radius:6px;font-size:11.5px;line-height:1.6;
  background:#eef4fb;color:#2b5f96;border:1px solid #d6e8fb;white-space:nowrap}
.bk-mode.par{background:#fdf1e0;color:#96601a;border-color:#f2dcbb}

/* ==========================================================
   企业微信扫码登录页
   ========================================================== */
.bklogin{max-width:520px;margin:0 auto;background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--sh-1);padding:32px 30px 26px;text-align:center}
.bklogin-head h2{font-size:20px;margin-bottom:6px}
.bklogin-head p{color:var(--muted);font-size:14px;margin-bottom:18px}
.bklogin-qr{min-height:290px;display:grid;place-items:center;margin:6px 0 4px}
.bklogin-qr iframe{width:100%;max-width:300px;height:290px;border:0}
.bklogin-qr img{display:block;border-radius:8px;background:#fff}
.qr-fail{color:var(--muted);font-size:13.5px;border:1px dashed var(--line);border-radius:12px;padding:22px;
  background:var(--blue-50);line-height:1.8}

/* ---- 登录方式横排滑块（2026-10-05 新增）
   老师要求：企业微信扫码 / 密码 / 邮箱验证码 横着排，选中态用滑块指示，
   像腾讯云登录那样一行切换，不要上下分三段。 ---- */
.ltabs{position:relative;display:flex;gap:0;margin:0 0 22px;
  border-bottom:1px solid var(--line);text-align:center}
.ltabs-b{position:relative;z-index:1;flex:1;padding:10px 4px 12px;margin:0;
  background:none;border:0;cursor:pointer;
  font:500 15px/1.4 inherit;color:var(--muted);transition:color .18s}
.ltabs-b:hover{color:var(--ink)}
.ltabs-b.on{color:var(--brand);font-weight:700}
/* 滑块指示条：位置由 JS 按按钮 offsetLeft/offsetWidth 设置，
   没有 JS 时靠 CSS 变量兜个底，至少不会错位到屏幕外。 */
.ltabs-hd{position:absolute;z-index:0;left:0;bottom:-1px;height:3px;width:0;
  background:var(--brand);border-radius:2px;
  transition:transform .22s cubic-bezier(.4,0,.2,1),width .22s cubic-bezier(.4,0,.2,1)}
.ltabs:not(:has(.ltabs-b)) .ltabs-hd{display:none}
/* 面板：hidden 属性控制显隐（比 style.display 更好维护，也不会和 CSS 打架） */
.lpanel[hidden]{display:none !important}
.lpanel{animation:lfade .22s ease}
@keyframes lfade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){
  .lpanel{animation:none}
  .ltabs-hd{transition:none}
}
@media (max-width:420px){
  .ltabs-b{font-size:14px;padding:9px 2px 11px}
}
.bklogin-alt{margin-top:14px;font-size:13.5px;color:var(--muted);display:flex;align-items:center;
  justify-content:center;gap:10px;flex-wrap:wrap}
.bklogin-tip{text-align:left;background:var(--blue-50);border:1px solid #d6e8fb;border-radius:12px;
  padding:16px 18px;color:#2b5f96;font-size:14px;line-height:1.85}
.bklogin-tip b{color:#143d68}
/* ---- 扫码步骤说明（2026-10-05 老师实测学生踩坑后加）----
   原来只有一句「用手机企业微信扫」，学生以为手机扫手机也行，
   结果企微返回「请使用企业微信扫描二维码」。把步骤写死。 */
/* ---- 企业微信扫码：一个大按钮，跳到企微官方扫码页（2026-10-05 17:40）----
   🔴 方案变更记录（别再改回去）：
   原来是我们自己画二维码 → 再 302 到企微官方页，绕了两轮还是让学生扫码失败
   （视频实测：手机扫我们站的码 → 官方页又画一个码 → 「请使用企业微信扫描」）。
   现在登录页**不再自己画码**，只放一个按钮，扫码页交给企业微信官方 ——
   官方页本来就是设计给手机扫的，行为由企微自己保证。
   配套 HTML 在 wxwork_login.php，链接中转在 wxwork_go.php。
   .wx-go-box 是这一组专用前缀（项目铁律：CSS 类名不许复用）。 */
.wx-go-box{margin:18px 0 4px}
.wx-go{
  display:flex;align-items:center;justify-content:center;gap:8px;
  width:100%;min-height:52px;padding:14px 22px;
  font-size:16px;font-weight:600;letter-spacing:.02em;border-radius:12px;
}
.wx-go:hover{filter:brightness(1.05)}
.wx-go:active{transform:translateY(1px)}
.wx-go-tip{margin:12px 0 0;font-size:13px;color:var(--muted);line-height:1.7;text-align:center}
.wx-go-tip b{color:var(--ink-2);font-weight:600}
.bklogin-err{background:#fdecec;border:1px solid #f5c9c6;color:#a33c36;border-radius:12px;padding:12px 16px;
  font-size:14px;margin-bottom:16px}
.bklogin-back{margin-top:20px;padding-top:16px;border-top:1px solid var(--line);display:flex;
  justify-content:space-between;gap:12px;font-size:13.5px;color:var(--muted)}
.bklogin-back a{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:9px;
  font-size:13px;font-weight:600;color:var(--ink-2);background:#fff;border:1px solid var(--line);transition:.2s}
.bklogin-back a:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-50);text-decoration:none}

/* ---- 扫码确认登录：本站自己画的二维码 ---- */
.bklogin-qr{position:relative}
.bklogin-qr img{width:220px;height:220px;display:block;margin:0 auto;
  border:1px solid var(--line);border-radius:14px;background:#fff;padding:6px}
.qr-mask{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:232px;height:232px;border-radius:14px;background:rgba(255,255,255,.93);
  display:grid;place-items:center;cursor:pointer;z-index:2}
.qr-mask span{font-size:14px;color:var(--ink);border-bottom:1px dashed var(--line);padding-bottom:3px}
.qr-mask[hidden]{display:none}
.qr-tip{margin-top:12px;font-size:14px;color:var(--muted)}
.qr-tip-warn{color:#a33c36}
/* 2026-10-05：企业微信扫码「手机已登、这边没跳」的补救提示。
   .qr-tip-ok 只在这个登录页用（wxQrTip 的 id 限定），不与别处冲突。 */
.qr-tip-ok{color:#16794a;font-size:13.5px;line-height:1.9}
.qr-tip-ok b{font-weight:600}
.qr-tip-ok .btn.s{margin-left:4px;vertical-align:middle}
.qr-hint{font-size:13px;color:var(--muted)}

/* ---- 账号密码登录 ---- */
.bkpass{display:flex;flex-direction:column;gap:13px;margin-top:4px;text-align:left}
.bkpass label{font-size:14px;font-weight:600;display:block}
.bkpass input[type=text],.bkpass input[type=password]{
  width:100%;box-sizing:border-box;margin-top:6px;padding:11px 13px;font-size:15px;
  border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink)}
.bkpass input[type=text]:focus,.bkpass input[type=password]:focus{
  outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(21,101,192,.12)}
/* .btn 是 inline-flex 且没设 justify-content，宽度撑满时文字会贴左边 —— 这里居中 */
.bkpass button{width:100%;box-sizing:border-box;padding:11px 0;font-size:15.5px;margin-top:2px;
  justify-content:center}
.bkpass-rm{display:flex!important;align-items:center;gap:8px;font-weight:400!important;
  font-size:13.5px!important;color:var(--muted);cursor:pointer}
.bkpass-rm input{width:15px;height:15px;margin:0;accent-color:var(--blue)}
.bkpass-tip{margin:0;font-size:12.8px;line-height:1.85;color:var(--muted);
  background:var(--blue-50);border:1px solid #d6e8fb;border-radius:10px;padding:11px 13px}
.bkpass-tip b{color:#143d68}

/* ---- 邮箱验证码登录 ---- */
.bklogin-ok{background:#eaf7ee;border:1px solid #bfe3cc;color:#256b3c;border-radius:12px;padding:12px 16px;
  font-size:14px;margin-bottom:16px}
.bkmform{display:flex;flex-direction:column;gap:13px;margin-top:4px;text-align:left}
.bkmform label{font-size:14px;font-weight:600;display:block}
.bkmform input[type=email],.bkmform input[type=text],.bkmform .bkcode{
  width:100%;box-sizing:border-box;margin-top:6px;padding:11px 13px;font-size:15px;
  border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink)}
.bkmform input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(21,101,192,.12)}
.bkmform .bkcode{font-size:22px;letter-spacing:8px;text-align:center;font-weight:700;
  font-family:ui-monospace,Menlo,Consolas,monospace}
.bkmform button[type=submit]{width:100%;box-sizing:border-box;padding:11px 0;font-size:15.5px;
  margin-top:2px;justify-content:center}
.bkmform-sent{background:var(--blue-50);border:1px solid #d6e8fb;border-radius:10px;
  padding:11px 13px;font-size:13.5px;color:#2b5f96;line-height:1.7}
.bkmform-sent b{color:#143d68;word-break:break-all}
.bkmform-sent span{color:var(--muted);font-size:12.5px}
.bkmform-alt{display:flex;gap:10px;flex-wrap:wrap;justify-content:space-between}
.bkmform-alt .btn{flex:1;min-width:120px;justify-content:center}
.bkmform-alt .btn:disabled{opacity:.55;cursor:not-allowed}
.bkmform .bkpass-tip{margin-top:2px}
/* 邮箱「只填前缀 + 固定后缀」：后缀做成贴在右边的灰色块，看得见但点不掉 */
.esfx{display:flex;align-items:stretch;width:100%;box-sizing:border-box;margin-top:6px;
  border:1px solid var(--line);border-radius:10px;background:#fff;overflow:hidden}
.esfx:focus-within{border-color:var(--blue);box-shadow:0 0 0 3px rgba(21,101,192,.12)}
.esfx-in{flex:1 1 auto;min-width:0;border:0!important;outline:none;margin:0!important;
  padding:11px 13px;font-size:15px;background:transparent;color:var(--ink);border-radius:0!important}
.esfx-in:focus{box-shadow:none!important;border:0!important}
.esfx-at{flex:none;display:flex;align-items:center;padding:0 13px;font-style:normal;font-weight:700;
  font-size:15.5px;color:var(--navy,#0e2f52);background:#eef4fa;border-left:1px solid var(--line);
  font-family:'Times New Roman',Times,serif;user-select:none;white-space:nowrap}
/* 后台成员表里显示邮箱时，后缀也淡化一下 */
.mail-sfx{color:#8a94a6;font-family:ui-monospace,Menlo,Consolas,monospace}
/* ---- 人员名单「企业微信账号」列（2026-10-05 老师要求后台可见、方便改）----
   .rost-wx 是这一列专用前缀（项目铁律：CSS 类名不许复用）。 */
.rost-wx .wxacc{
  font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12.5px;
  background:#eef4ff;color:#1a56a8;padding:2px 7px;border-radius:6px;
}
.rost-wx .rost-wx-flag{font-size:11.5px;white-space:nowrap}
.rost-wx .rost-wx-ok{color:#16794a}
.rost-wx .rost-wx-bad{color:#c0392b}

/* 几种登录方式并存时的分隔线 */
.bklogin-or{position:relative;margin:22px 0 16px;text-align:center}
.bklogin-or::before{content:"";position:absolute;left:0;right:0;top:50%;height:1px;background:var(--line)}
.bklogin-or span{position:relative;display:inline-block;padding:0 14px;background:#fff;
  font-size:13.5px;color:var(--muted)}

/* ---- 手机端确认页 ---- */
.bkqr-me{display:flex;align-items:center;gap:10px;justify-content:center;
  background:var(--blue-50);border:1px solid #d6e8fb;border-radius:12px;
  padding:12px 16px;margin-bottom:16px;font-size:14px;color:#2b5f96}
.bkqr-me img{width:34px;height:34px;border-radius:50%;object-fit:cover;background:#e8f0f9}
.bkqr-form{display:flex;flex-direction:column;gap:12px;margin-bottom:16px;text-align:left}
.bkqr-form label{font-size:14px;font-weight:600;display:block;margin-bottom:6px}
.bkqr-form label .tip{display:block;font-weight:400;font-size:12.5px;color:var(--muted);margin-top:3px}
.bkqr-form input[type=text]{width:100%;box-sizing:border-box;padding:11px 13px;font-size:15px;
  border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink)}
.bkqr-form input[type=text]:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(21,101,192,.12)}
.bkqr-form button{width:100%;box-sizing:border-box;padding:11px 0;font-size:15px;justify-content:center}

/* 「扫码后才能看仪器」的引导块（科研设施 → 仪器预约 页签里用） */
.bkgate{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);padding:38px 30px;text-align:center;
  box-shadow:var(--sh-1)}
.bkgate .ico{width:64px;height:64px;margin:0 auto 16px;border-radius:20px;display:grid;place-items:center;
  background:linear-gradient(160deg,var(--blue-100),#dbeaf9);font-size:30px}
/* 门禁块里那把锁：跟别处一样用线框图标，不带 emoji 风格 */
.bkgate-ic{width:30px;height:30px;flex:0 0 30px;color:var(--blue);margin:0 auto 16px;
  background:linear-gradient(160deg,var(--blue-100),#dbeaf9);border-radius:20px;
  padding:17px;box-sizing:content-box}
.bkgate h3{font-size:19px;margin-bottom:8px}
.bkgate p{color:var(--muted);font-size:14px;line-height:1.9;max-width:440px;margin:0 auto 20px}
.bkgate-desc{background:var(--blue-50);border:1px solid #d6e8fb;border-radius:10px;
  padding:11px 14px;margin:0 auto 14px!important;color:#2b5f96!important;font-size:13.5px}

/* ==========================================================
   预约总览（科研设施 → 预约总览 页签）
   ----------------------------------------------------------
   一屏看清「哪台仪器、哪个时段、被谁约走了」。
   两种视图共用一套工具条；配色跟站点主色一致（navy / blue）。
   ========================================================== */
.bkov{font-size:14px}

/* ---------- 工具条 ---------- */
.bkov-bar{display:flex;flex-wrap:wrap;gap:9px;align-items:center;padding:13px 15px;margin-bottom:14px;
  background:#fff;border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh-1)}
.bkov-seg{display:inline-flex;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#f7fafd}
.bkov-seg .sb{border:0;background:transparent;padding:7px 13px;font-size:13px;color:var(--ink-2);
  cursor:pointer;font-family:inherit;line-height:1.5;transition:.18s;white-space:nowrap}
.bkov-seg .sb+.sb{border-left:1px solid var(--line)}
.bkov-seg .sb:hover{background:#eaf3fd;color:var(--blue)}
.bkov-seg .sb.on{background:var(--blue);color:#fff;font-weight:600}
.bkov-range{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--muted)}
.bkov-range .din{border:1px solid var(--line);border-radius:9px;padding:6px 9px;font-size:13px;
  font-family:inherit;color:var(--ink);background:#fff;min-width:132px}
.bkov-range .din:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(30,111,196,.12)}
.bkov-sel{border:1px solid var(--line);border-radius:9px;padding:7px 10px;font-size:13px;
  font-family:inherit;color:var(--ink);background:#fff;max-width:220px}
.bkov-sel:focus{outline:none;border-color:var(--blue)}
.bkov-kw{border:1px solid var(--line);border-radius:9px;padding:7px 12px;font-size:13px;
  font-family:inherit;color:var(--ink);background:#fff;width:180px}
.bkov-kw:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(30,111,196,.12)}
.bkov-chk{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-2);cursor:pointer;
  padding:5px 2px;white-space:nowrap}
.bkov-chk input{width:15px;height:15px;accent-color:var(--blue);cursor:pointer}
.bkov-refresh{margin-left:auto;border:1px solid var(--line);background:#fff;border-radius:9px;
  padding:7px 14px;font-size:13px;color:var(--blue);cursor:pointer;font-family:inherit;transition:.18s;white-space:nowrap}
.bkov-refresh:hover{background:var(--blue);color:#fff;border-color:var(--blue)}

/* ---------- 统计条 ---------- */
.bkov-stat{margin:-4px 2px 14px;font-size:13.5px;color:var(--muted);line-height:1.8}
.bkov-stat b{color:var(--navy);font-size:15px;font-weight:700;font-variant-numeric:tabular-nums;margin:0 1px}

.bkov-msg{padding:34px 20px;text-align:center;color:var(--muted);font-size:14px;
  background:#fff;border:1px solid var(--line);border-radius:var(--r)}
.bkov-msg.bad{color:#b3352f}
.bkov-warn{margin-top:14px;padding:11px 15px;border-radius:10px;font-size:13px;line-height:1.75;
  background:#fff8e8;border:1px solid #f0dcae;color:#8a5b00}

/* ---------- 空态 ---------- */
.bkov-empty{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);padding:44px 28px;
  text-align:center;box-shadow:var(--sh-1)}
.bkov-empty .ic{width:62px;height:62px;margin:0 auto 14px;border-radius:20px;display:grid;place-items:center;
  background:linear-gradient(160deg,var(--blue-100),#dbeaf9);font-size:28px}
.bkov-empty h3{font-size:18px;color:var(--navy);margin-bottom:8px}
.bkov-empty p{color:var(--muted);font-size:14px;line-height:1.9;max-width:430px;margin:0 auto 18px}

/* ---------- 按日期视图 ---------- */
.bkov-days{display:flex;flex-direction:column;gap:11px}
.bkov-day{background:#fff;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;
  box-shadow:var(--sh-1);transition:box-shadow .2s}
.bkov-day:hover{box-shadow:var(--sh-2)}
.bkov-day.today{border-color:#bcd9f5;box-shadow:0 0 0 1px #d9eafb,var(--sh-1)}
.bkov-dayhd{display:flex;align-items:center;gap:10px;padding:12px 17px;cursor:pointer;user-select:none;
  background:linear-gradient(180deg,#fbfdff,#f5f9fd)}
.bkov-day.today .bkov-dayhd{background:linear-gradient(180deg,#f2f8ff,#e8f2fd)}
.bkov-dayhd:hover{background:#eff6fd}
.bkov-dayhd .ar{color:var(--muted);font-size:13px;transition:transform .2s;display:inline-block;flex:0 0 auto}
.bkov-day.open .bkov-dayhd .ar{transform:rotate(90deg)}
.bkov-dayhd b{font-size:16px;color:var(--navy);font-variant-numeric:tabular-nums}
.bkov-dayhd i{font-style:normal;font-size:12.5px;color:var(--muted)}
.bkov-dayhd .tg{font-style:normal;font-size:11.5px;padding:1px 8px;border-radius:20px;
  background:#e2effc;color:#1c5f9e;border:1px solid #c6ddf5}
.bkov-dayhd .tg.we{background:#f4f1fa;color:#6b5b95;border-color:#ddd5ef}
.bkov-dayhd .n{margin-left:auto;font-size:12.5px;color:var(--muted);flex:0 0 auto}
.bkov-dayhd .n.has{color:var(--blue);font-weight:600}

.bkov-list{list-style:none;margin:0;padding:0}
.bkov-day:not(.open) .bkov-list{display:none}
.bkov-free{padding:15px 18px;font-size:13.5px;color:var(--muted);border-top:1px solid var(--line-2);
  background:repeating-linear-gradient(45deg,#fcfdfe 0 10px,#f8fbfe 10px 20px)}
.bkov-row{display:flex;align-items:center;gap:14px;padding:11px 18px;border-top:1px solid var(--line-2);
  font-size:14px;transition:background .16s}
.bkov-row:hover{background:#f7fbff}
.bkov-row.mine{background:#f2f9f4}
.bkov-row.mine:hover{background:#eaf5ee}
.bkov-row.past{opacity:.55}
.bkov-row .tm{flex:0 0 108px;font-size:13px;color:var(--navy);font-weight:600;
  font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.bkov-row .tm .seg{display:inline-block;font-style:normal;font-size:11px;font-weight:600;
  margin-left:6px;padding:1px 8px;border-radius:20px;background:var(--blue-50);
  color:#2b5f96;border:1px solid #d6e8fb;vertical-align:1px;white-space:nowrap}
.bkov-row.past .tm{color:var(--muted);font-weight:500}
.bkov-row .it{flex:1 1 auto;min-width:120px;color:var(--ink);font-weight:500;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bkov-row .it .md{font-style:normal;margin-left:8px;font-size:11.5px;padding:1px 8px;border-radius:20px;
  background:var(--blue-50);color:#2b5f96;border:1px solid #d6e8fb;white-space:nowrap}
.bkov-row .who{flex:0 0 auto;display:inline-flex;align-items:center;gap:7px;font-size:13.5px;color:var(--ink-2)}
.bkov-row .who .av{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;
  background:linear-gradient(160deg,var(--blue-100),#cfe2f7);color:#2b5f96;font-size:12.5px;font-weight:600;flex:0 0 auto}
.bkov-row.mine .who .av{background:linear-gradient(160deg,#d6f0df,#bfe6cd);color:#24683c}
.bkov-row .who .you{font-style:normal;font-size:11px;padding:1px 7px;border-radius:20px;
  background:#d6f0df;color:#24683c;border:1px solid #b7dfc5}
.bkov-row .nt{flex:0 1 200px;font-size:12.5px;color:var(--muted);min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bkov-row .nt:not(:empty){cursor:pointer;border-bottom:1px dashed #cfdbe6}
.bkov-row .nt:not(:empty):hover{color:var(--blue)}
.bkov-row .nt.on{white-space:normal;overflow:visible;text-overflow:clip;flex-basis:auto;color:var(--ink-2)}

/* ---------- 仪器 × 日期 矩阵 ---------- */
.bkov-gbox{background:#fff;border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--sh-1);
  overflow:hidden}
.bkov-gwrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.bkov-grid{border-collapse:separate;border-spacing:0;width:100%;min-width:640px;font-size:13px}
.bkov-grid th,.bkov-grid td{border-bottom:1px solid var(--line-2);border-right:1px solid var(--line-2)}
.bkov-grid thead th{position:sticky;top:0;z-index:2;background:#f5f9fd;color:var(--navy);
  font-size:12.5px;font-weight:600;padding:9px 6px;text-align:center;white-space:nowrap}
.bkov-grid thead th i{display:block;font-style:normal;font-size:11px;color:var(--muted);font-weight:400}
.bkov-grid thead th.today{background:#e6f1fd;color:#1c5f9e}
.bkov-grid thead th.we{color:#6b5b95}
.bkov-grid .corner{position:sticky;left:0;z-index:3;text-align:left;padding-left:14px;min-width:180px}
.bkov-grid thead .corner{z-index:4}
.bkov-grid tbody .rn{position:sticky;left:0;z-index:1;background:#fdfefe;text-align:left;
  padding:9px 14px;min-width:180px;max-width:250px;font-weight:500;vertical-align:middle}
.bkov-grid tbody tr:hover .rn{background:#f5f9fd}
.bkov-grid tbody .rn b{display:block;color:var(--navy);font-size:13.5px;font-weight:600;line-height:1.5}
.bkov-grid tbody .rn em{display:block;font-style:normal;font-size:11.5px;color:#2b5f96;margin-top:3px}
.bkov-grid tbody .rn .adm{display:block;font-size:11.5px;color:var(--muted);margin-top:2px}
.bkov-grid tbody .rn.off b{color:var(--muted)}
.bkov-grid tbody tr:last-child th,.bkov-grid tbody tr:last-child td{border-bottom:0}

.bkov-grid td.c{text-align:center;padding:8px 4px;cursor:default;
  font-variant-numeric:tabular-nums;background:#fff;transition:.16s;min-width:52px}
.bkov-grid td.c .dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#dde5ec}
.bkov-grid td.c.on{background:#e8f2fd;cursor:pointer}
.bkov-grid td.c.on b{font-size:14px;font-weight:700;color:#1c5f9e}
.bkov-grid td.c.on i{font-style:normal;font-size:11px;color:#7ba7d0}
.bkov-grid td.c.on:hover{background:#d3e7fb;box-shadow:inset 0 0 0 1px #9cc6ee}
.bkov-grid td.c.full{background:#fdeee6}
.bkov-grid td.c.full b{color:#b4501f}
.bkov-grid td.c.full i{color:#cf9070}
.bkov-grid td.c.full:hover{background:#fbe1d3;box-shadow:inset 0 0 0 1px #efb99b}
.bkov-grid td.c.off{background:#fafbfc}
.bkov-grid td.c.closed{background:repeating-linear-gradient(45deg,#f7f9fb 0 5px,#f1f4f8 5px 10px)}
.bkov-grid td.c.today{box-shadow:inset 0 0 0 1px #c9e0f7}
.bkov-gtip{margin:0;padding:11px 16px;font-size:12.5px;color:var(--muted);line-height:1.75;
  background:#fbfdff;border-top:1px solid var(--line-2)}

/* 个人中心里的可预约仪器清单 */
.bki-lead{margin:0 0 16px;color:var(--ink-2);font-size:14px;line-height:1.8}
.bki-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:9px}
.bki-search{flex:1 1 230px;min-width:0}
.bki-search input{width:100%;height:40px;padding:0 13px;border:1px solid var(--line);border-radius:10px;
  background:#fff;color:var(--navy);font:inherit;font-size:13px}
.bki-search input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(30,111,196,.12)}
.bki-filters{display:inline-flex;gap:5px;padding:4px;border:1px solid var(--line);border-radius:10px;background:#fff}
.bki-filters button{border:0;border-radius:7px;padding:6px 11px;color:var(--ink-2);background:transparent;cursor:pointer;font:inherit;font-size:12px}
.bki-filters button.on{color:#fff;background:var(--blue);font-weight:700}
.bki-side-link{font-size:13px;white-space:nowrap}
.bki-count{margin:0 0 12px;color:var(--muted);font-size:12px}
.bki-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.bki-card{display:flex;flex-direction:column;min-width:0;overflow:hidden;background:#fff;
  border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:0 3px 12px rgba(14,47,82,.05)}
.bki-card[hidden]{display:none}
.bki-card:hover{border-color:#a9cdec;box-shadow:0 8px 22px rgba(14,47,82,.1)}
.bki-photo{height:176px;background:#edf4fa;overflow:hidden}
.bki-photo img{display:block;width:100%;height:100%;object-fit:cover}
.bki-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;
  width:100%;height:100%;color:#7190ac;font-size:12px;background:linear-gradient(135deg,#eef5fa,#e3edf6)}
.bki-placeholder svg{width:40px;height:40px;fill:none;stroke:currentColor;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}
.bki-info{display:flex;flex:1;flex-direction:column;gap:10px;min-width:0;padding:17px 18px 18px}
.bki-top{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12px}
.bki-top-main{display:flex;align-items:center;gap:6px;min-width:0;flex:1}
.bki-mark{color:var(--blue);font-weight:700;letter-spacing:.08em}
.bki-top .bki-mark{flex:none}
.bki-admin-tag{display:inline-block;min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:3px 9px;border:1px solid #e8c568;border-radius:999px;background:#fff5d8;color:#8a5b09;font-size:11px;font-weight:700;line-height:1.5}
.bki-state{color:var(--muted);white-space:nowrap}
.bki-state.ready{color:#168253}
.bki-card h4{margin:0;color:var(--navy);font-size:17px;line-height:1.5;overflow-wrap:anywhere}
.bki-desc,.bki-meta{margin:0;color:var(--ink-2);font-size:13px;line-height:1.7;overflow-wrap:anywhere}
.bki-meta{color:var(--muted)}
.bki-card .btn{align-self:flex-start;margin-top:auto}
.bki-appoint{margin-top:12px;padding:10px 12px;border:1px solid #d4e5f5;border-radius:9px;background:#f7fbff;font-size:13px}
.bki-appoint summary{cursor:pointer;color:#1765ad;font-weight:700}
.bki-appoint-form{display:grid;gap:9px;margin:11px 0}
.bki-appoint-form label{display:grid;gap:4px;color:#405b73}
.bki-appoint-form select,.bki-appoint-form input{box-sizing:border-box;width:100%;padding:8px;border:1px solid #cdddeb;border-radius:7px;background:#fff}
.bki-appoint-msg{margin:0;min-height:1.2em;color:#1765ad}
.bki-unavailable{margin-top:auto;color:var(--muted);font-size:13px}
.bki-no-results{padding:28px;text-align:center;color:var(--muted);background:#fff;border:1px solid var(--line);border-radius:var(--r)}
.bki-no-results[hidden]{display:none}
@media (max-width:700px){
  .bki-grid{grid-template-columns:1fr}
  .bki-photo{height:190px}
  .bki-side-link{margin-left:auto}
}

@media (max-width:820px){
  .bkov-refresh{margin-left:0}
  .bkov-sel{max-width:100%;flex:1 1 160px}
  .bkov-kw{width:100%;flex:1 1 140px}
  .bkov-row{flex-wrap:wrap;gap:8px 12px}
  .bkov-row .tm{flex:0 0 auto}
  .bkov-row .it{flex:1 1 100%;order:2}
  .bkov-row .nt{flex:1 1 100%;order:3}
}

/* ==========================================================
   预约弹窗
   ========================================================== */
.bkmask{position:fixed;inset:0;background:rgba(14,47,82,.42);backdrop-filter:blur(2px);
  display:none;align-items:center;justify-content:center;z-index:300;padding:20px}
.bkmask.on{display:flex}
.bkdlg{background:#fff;border-radius:16px;width:100%;max-width:400px;padding:24px 24px 20px;
  box-shadow:0 24px 60px rgba(14,47,82,.28);animation:bkpop .18s ease}
@keyframes bkpop{from{opacity:0;transform:translateY(10px) scale(.98)}to{opacity:1;transform:none}}
.bkdlg h4{font-size:17px;margin-bottom:14px}
.bkd{font-size:14px;color:var(--ink-2);line-height:1.8}
.bkd-l{display:flex;gap:10px;padding:5px 0;border-bottom:1px dashed var(--line-2)}
.bkd-l:last-child{border-bottom:0}
.bkd-l span{width:52px;flex:none;color:var(--muted);font-size:13px}
.bkd-l b{font-weight:600;color:var(--navy);font-variant-numeric:tabular-nums}
.bkd-w{margin:12px 0 0;font-size:12.5px;color:var(--muted);line-height:1.7}
/* 拖选多格时的「已选时段清单」 */
.bkd-sec{padding:9px 0 5px;border-bottom:0}
.bkd-sec b{font-weight:600}
.bkr-list{margin:6px 0 0;max-height:180px;overflow-y:auto;border:1px solid var(--line);
  border-radius:10px;background:#fafcfe}
.bkr-list::-webkit-scrollbar{width:8px}
.bkr-list::-webkit-scrollbar-thumb{background:#d3dde7;border-radius:4px}
.bkr-d{display:flex;gap:10px;padding:6px 10px;border-bottom:1px solid var(--line-2);font-size:13px}
.bkr-d:last-child{border-bottom:0}
.bkr-d .d{flex:0 0 88px;color:var(--navy);font-weight:600;font-variant-numeric:tabular-nums}
.bkr-d .s{flex:1 1 auto;color:var(--ink-2);font-variant-numeric:tabular-nums}
.bkf{display:block;margin-top:14px}
.bkf span{display:block;font-size:13px;color:var(--ink-2);margin-bottom:6px;font-weight:500}
.bkf .tip{font-weight:400;color:var(--muted);margin-left:6px;font-size:12px}
.bkf input{width:100%;padding:9px 12px;border:1px solid var(--line);border-radius:9px;font-size:14px;
  font-family:inherit;color:var(--ink);background:#fff}
.bkf input:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(30,111,196,.12)}
.bkops{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}

/* 右下角轻提示 */
.bktoast{position:fixed;right:22px;bottom:22px;z-index:400;max-width:320px;padding:12px 18px;border-radius:12px;
  background:var(--navy);color:#fff;font-size:14px;line-height:1.6;box-shadow:0 12px 32px rgba(14,47,82,.28);
  opacity:0;transform:translateY(12px);pointer-events:none;transition:.24s}
.bktoast.on{opacity:1;transform:none}
.bktoast.bad{background:#b3352f}

@media (max-width:700px){
  .bkbar{padding:11px 14px;gap:9px}
  .bkbar-meta{margin-left:0;width:100%;order:3}
  .bkhelp{padding:11px 14px;font-size:13px}
  .bkprof{padding:16px 16px}
  .bkprof-form input[type=text]{width:100%}
  .bklegend{gap:6px 14px;font-size:12.5px}
  .bkcell{height:24px;min-width:56px;font-size:11.5px}
  .bktable th.h{width:64px;min-width:64px;padding:4px 4px;font-size:11px}
  .bklogin{padding:24px 18px 20px}
  .bklogin-qr{min-height:250px}
  .bkgate{padding:28px 18px}
  .bktoast{right:12px;left:12px;bottom:12px;max-width:none}
}

/* ==========================================================
   成员色块头像
   ----------------------------------------------------------
   每个注册用户一个固定色块 + 名字首字母（惠伟→HW、惠伟伟→HWW），
   开号时发、之后改不了 —— 表格里一眼就能认出是谁。
   颜色由 inc/avatar.php 生成，文字明暗按底色亮度自动取。
   ========================================================== */
.av{
  display:inline-flex;align-items:center;justify-content:center;
  width:30px;height:30px;flex:0 0 30px;border-radius:9px;
  font-size:12px;font-weight:800;letter-spacing:.02em;
  line-height:1;vertical-align:middle;user-select:none;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.14);
}
.av-s{width:24px;height:24px;flex:0 0 24px;border-radius:7px;font-size:11px}
.av-lg{width:52px;height:52px;flex:0 0 52px;border-radius:15px;font-size:17px}
.av-w{display:inline-flex;align-items:center;gap:7px;min-width:0}
.av-w b{font-weight:600;font-size:13.5px;color:var(--ink)}
/* 预约表格里显示全名时，整格用这个人的色块填充 */
.bkcell.avfill,.bkm.avfill{font-weight:700}
.bkcell.avfill{box-shadow:inset 0 0 0 1px rgba(255,255,255,.18)}

/* ==========================================================
   个人中心「我的」（科研设施下的一个页签）
   ========================================================== */
/* 线框小图标：整套统一（原来用 emoji，一块一块花花绿绿不成体系） */
.ic{width:18px;height:18px;flex:0 0 18px;fill:none;stroke:currentColor;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round;display:block}

/* 个人中心两栏布局。类名必须带 pc- 前缀：裸 .mine 会命中预约日程表的
   bkcell mine 格子（display:grid 一上，表格行高直接爆炸——踩过）。 */
.pc-mine{display:grid;grid-template-columns:236px minmax(0,1fr);gap:20px;align-items:start}
.mine-nav{
  background:var(--white);border:1px solid var(--line);border-radius:var(--r);
  padding:10px;box-shadow:var(--sh-1);position:sticky;top:14px;
}
/* 菜单项滚动容器：
   宽屏 `display:contents` —— 这个 div 直接「消失」，菜单项还是 `.mine-nav` 的直接子元素，
   布局与 2026-10-05 之前完全一致（PC 侧栏竖排）。
   窄屏在 @media(max-width:900px) 里才真正变成横向滑动带。 */
.mine-nav-scroll{display:contents}

.mine-me{display:flex;align-items:center;gap:10px;padding:8px 8px 12px;border-bottom:1px solid var(--line-2);margin-bottom:8px}
.mine-me .av{width:38px;height:38px;flex:0 0 38px;border-radius:11px;font-size:13px}
.mine-me b{display:block;font-size:14px;line-height:1.4;color:var(--navy)}
.mine-me .mini{font-size:12px}

/* 预览学生账号：红色横幅 + 学生列表 */
.preview-bar{display:flex;align-items:center;gap:10px;padding:8px 12px;margin-bottom:10px;
  background:#fdecec;border:1px solid #f2c9c4;border-radius:9px;font-size:13px;color:#a33c36;flex-wrap:wrap}
.preview-bar b{font-weight:700}
.preview-exit{margin-left:auto;padding:4px 12px;border:1px solid #c0392b;border-radius:7px;
  background:#c0392b;color:#fff;font-size:12.5px;cursor:pointer}
.preview-exit:hover{background:#a93226}
.pv-list{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}
/* display:flex 会盖掉 hidden 属性的默认 display:none —— 折叠必须显式声明 */
.pv-list[hidden]{display:none}
.pv-grp{font-size:13.5px;font-weight:700;color:var(--navy);margin:16px 0 8px;display:flex;align-items:center;gap:8px;
  cursor:pointer;user-select:none;padding:8px 12px;background:var(--white);border:1px solid var(--line);border-radius:9px}
.pv-grp::before{content:'';width:3px;height:14px;border-radius:2px;background:var(--blue)}
.pv-grp i{font-style:normal;font-size:11.5px;font-weight:500;color:var(--muted);background:var(--blue-50);padding:1px 8px;border-radius:10px}
.pv-grp .pv-caret{margin-left:auto;color:var(--muted);font-size:12px;transition:transform .18s}
.pv-grp.open .pv-caret{transform:rotate(180deg)}
.pv-grp:hover{border-color:#cfe2f7}
.pv-row{display:flex;align-items:center;gap:12px;padding:10px 14px;background:var(--white);
  border:1px solid var(--line);border-radius:10px}
.pv-av{width:38px;height:38px;flex:0 0 38px;border-radius:50%;display:flex;align-items:center;
  justify-content:center;font-size:14px;font-weight:700}
.pv-main{flex:1;min-width:0}
.pv-main b{display:block;font-size:14px;color:var(--navy)}
.pv-main .mini{font-size:12px}

/* 菜单：选中项左侧一条金线 + 浅蓝底 —— 一眼知道自己在哪一页 */
.mn-i{
  position:relative;display:flex;align-items:center;gap:10px;width:100%;
  padding:9px 10px 9px 12px;margin-bottom:2px;border:0;border-radius:10px;
  background:transparent;color:var(--ink-2);font:inherit;font-size:13.5px;
  text-align:left;cursor:pointer;text-decoration:none;
  transition:background .15s,color .15s;
}
.mn-i:hover{background:var(--blue-50);color:var(--navy)}
.mn-i.on{background:var(--blue-100);color:var(--navy);font-weight:600}
.mn-i.on::before{content:"";position:absolute;left:3px;top:9px;bottom:9px;width:3px;
  border-radius:2px;background:var(--gold)}
.mn-ic{width:19px;height:19px;flex:0 0 19px;color:var(--ink-2);opacity:.9}
body.page-lab .mine-nav .mn-ic{fill:none;stroke:currentColor;stroke-width:1.7;
  stroke-linecap:round;stroke-linejoin:round}
.mn-i.on .mn-ic,.mn-i:hover .mn-ic{color:var(--blue);opacity:1}
.mn-sep{height:1px;background:var(--line-2);margin:8px 6px}
/* 菜单折叠组：父项 + 缩进子项（值日/快递/台账/巡查） */
.mn-grp .mn-caret{margin-left:auto;width:0;height:0;border-left:6px solid transparent;
  border-right:6px solid transparent;border-top:8px solid var(--muted);transition:transform .15s}
.mn-grp .mn-caret.open{transform:rotate(180deg)}
.mn-sub{padding-left:26px;font-size:13px}
.mn-sub .mn-ic{width:17px;height:17px;flex:0 0 17px}
.mn-booking-tag{display:inline-flex;align-items:center;flex:0 0 auto;padding:2px 5px;border-radius:5px;background:#e8f3ff;color:#176bc2;font-size:10px;font-weight:700;line-height:1.2}
.mn-bookitems-tag{white-space:nowrap}
.mn-i.on .mn-booking-tag{background:#fff;color:#176bc2}
/* 备忘录 checklist（Apple 备忘录式）：勾选圈 + 完成划线 + 跳转定位闪烁 */
.memo-chk{width:20px;height:20px;flex:0 0 20px;border:2px solid #b9c6d4;border-radius:50%;
  background:#fff;color:#fff;font-size:12px;line-height:1;cursor:pointer;padding:0;
  display:inline-flex;align-items:center;justify-content:center;transition:.15s}
.memo-chk:hover{border-color:var(--blue)}
.memo-chk.on{background:var(--blue);border-color:var(--blue)}
.memo-card.memo-done .mlog-h b{text-decoration:line-through;color:var(--muted)}
.memo-card.memo-done .mlog-b{color:var(--muted);text-decoration:line-through}
.memo-card.memo-done{opacity:.62}
.mlog-go{cursor:pointer;transition:.15s}
.mlog-go:hover{border-color:#cfe2f7;background:var(--blue-50)}
.memo-flash{animation:memoFlash 2.2s ease}
@keyframes memoFlash{0%,60%{background:#fff8dc;box-shadow:0 0 0 2px #f0d69a}100%{background:transparent}}

/* 个人中心备忘录：清晰的记录入口、状态统计与待办卡片 */
body.page-lab .memo-hero{
  display:flex;align-items:center;justify-content:space-between;gap:22px;
  margin:0 0 18px;padding:20px 22px;border:1px solid #d9e8f6;border-radius:16px;
  background:radial-gradient(360px 150px at 100% 0,rgba(98,169,225,.18),transparent 70%),linear-gradient(120deg,#f3f8fd,#fff 68%);
  box-shadow:0 7px 22px rgba(20,58,96,.045)}
body.page-lab .memo-hero-title{display:flex;align-items:center;gap:14px;min-width:0}
body.page-lab .memo-hero-icon{display:grid;place-items:center;flex:0 0 48px;width:48px;height:48px;border-radius:15px;background:linear-gradient(145deg,#3287d3,#1e63aa);color:#fff;font-size:24px;font-weight:800;box-shadow:0 7px 16px rgba(36,112,184,.22)}
body.page-lab .memo-eyebrow{display:block;margin-bottom:3px;color:#4785b9;font-size:10.5px;font-weight:800;letter-spacing:.14em}
body.page-lab .memo-hero h2{margin:0;color:var(--navy);font-size:22px;line-height:1.3}
body.page-lab .memo-hero p{margin:5px 0 0;color:var(--muted);font-size:13px;line-height:1.6}
body.page-lab .memo-stats{display:grid;grid-template-columns:repeat(3,minmax(72px,1fr));gap:8px;flex:0 0 auto}
body.page-lab .memo-stats>div{display:flex;min-width:72px;flex-direction:column;align-items:center;gap:2px;padding:9px 12px;border:1px solid #e1ebf4;border-radius:11px;background:rgba(255,255,255,.8)}
body.page-lab .memo-stats b{color:var(--navy);font-size:19px;line-height:1.1}
body.page-lab .memo-stats span{color:var(--muted);font-size:11.5px;white-space:nowrap}
body.page-lab .memo-compose{margin-bottom:22px;padding:18px 20px;border:1px solid #e0eaf3;border-radius:15px;background:#fff;box-shadow:0 7px 22px rgba(20,58,96,.045)}
body.page-lab .memo-compose-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:13px}
body.page-lab .memo-compose-head h3{margin:0;color:var(--navy);font-size:16px}
body.page-lab .memo-compose-tip{padding:5px 10px;border-radius:20px;background:#f2f7fb;color:#71869a;font-size:11.5px}
body.page-lab .memo-form{display:block;margin:0;padding:16px;border:1px solid #e5edf5;border-radius:12px;background:#f8fbfe}
body.page-lab .memo-compose .memo-form{padding:0;border:0;background:transparent}
body.page-lab .memo-form-grid{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(230px,.8fr);gap:12px 16px}
body.page-lab .memo-form label{display:flex;min-width:0;flex-direction:column;gap:6px;color:#526b83;font-size:12.5px;font-weight:650}
body.page-lab .memo-form .memo-note-field{display:flex;min-width:0;flex-direction:column;gap:6px;color:#526b83;font-size:12.5px;font-weight:650}
body.page-lab .memo-form label>span,body.page-lab .memo-form .memo-note-field>span{display:flex;align-items:center;gap:7px}
body.page-lab .memo-form .memo-time-labelrow{justify-content:space-between;gap:8px;flex-wrap:wrap}
body.page-lab .memo-form .memo-time-labelrow>span{display:flex;align-items:center;gap:7px;white-space:nowrap}
body.page-lab .memo-form .memo-time-labelrow>small{white-space:nowrap}
body.page-lab .memo-form .tip{color:#8a9bad;font-size:11px;font-weight:400}
body.page-lab .memo-form input,body.page-lab .memo-form textarea{box-sizing:border-box;width:100%;min-width:0;min-height:40px;padding:9px 11px;border:1px solid #dce6ef;border-radius:9px;background:#fff;color:var(--ink);font:inherit;font-size:13.5px;outline:none;transition:border-color .15s,box-shadow .15s}
body.page-lab .memo-form textarea{min-height:64px;resize:vertical;line-height:1.6}
body.page-lab .memo-form input:focus,body.page-lab .memo-form textarea:focus{border-color:#8eb8de;box-shadow:0 0 0 3px rgba(46,126,192,.09)}
body.page-lab .memo-form label small,body.page-lab .memo-form .memo-note-field small{color:#8a9bad;font-size:11px;font-weight:400}
body.page-lab .memo-title-field{grid-column:1}
body.page-lab .memo-time-field{grid-column:2;grid-row:1}
body.page-lab .memo-note-field{grid-column:1 / -1}
body.page-lab .memo-note-help{display:block;margin-top:5px;color:#8798a9;font-size:11px;font-weight:400}
body.page-lab .memo-rich{width:100%;box-sizing:border-box}
body.page-lab .memo-rich-e{min-height:96px;max-height:260px}
body.page-lab .memo-rich-e:focus{box-shadow:none}
body.page-lab .memo-form-actions{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-top:13px}
body.page-lab .memo-form .memo-submit{min-height:40px;padding:0 20px;border-radius:9px}
body.page-lab .memo-form-actions .mres{font-size:12px}
body.page-lab .memo-list{margin-top:4px}
body.page-lab .memo-list-head{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin:0 0 11px}
body.page-lab .memo-list-head h3{display:flex;align-items:center;gap:8px;margin:0;color:var(--navy);font-size:17px}
body.page-lab .memo-count{display:inline-flex;align-items:center;justify-content:center;min-width:23px;height:23px;padding:0 7px;border-radius:99px;background:#eaf3fc;color:#2676b8;font-size:12px}
body.page-lab .memo-count.is-done{background:#eaf6ef;color:#278158}
body.page-lab .memo-list-hint{color:#8293a4;font-size:11.5px}
body.page-lab .memo-card{margin:0 0 9px;padding:14px 15px;border:1px solid #e1eaf2;border-radius:13px;background:#fff;box-shadow:0 3px 11px rgba(20,58,96,.035);transition:border-color .15s,box-shadow .15s}
body.page-lab .memo-card:hover{border-color:#c8ddef;box-shadow:0 7px 17px rgba(20,58,96,.07)}
body.page-lab .memo-card-head{display:flex;align-items:flex-start;gap:11px;min-width:0}
body.page-lab .memo-card-head .memo-chk{margin-top:2px}
body.page-lab .memo-card-main{display:flex;flex:1 1 auto;min-width:0;flex-direction:column;align-items:flex-start;gap:7px}
body.page-lab .memo-card-main>b{color:var(--navy);font-size:15px;line-height:1.5;overflow-wrap:anywhere}
body.page-lab .memo-status{display:inline-flex;align-items:center;max-width:100%;padding:3px 9px;border-radius:20px;font-size:11px;line-height:1.45;overflow-wrap:anywhere}
body.page-lab .memo-status.is-pending{background:#fff5e4;color:#a66a12}
body.page-lab .memo-status.is-sent{background:#eaf4fc;color:#3979ae}
body.page-lab .memo-status.is-none{background:#f1f4f7;color:#74869a}
body.page-lab .memo-status.is-done{background:#eaf6ef;color:#278158}
body.page-lab .memo-acts{margin-left:auto;padding-left:6px}
body.page-lab .memo-acts .btn{min-width:42px;justify-content:center}
body.page-lab .memo-card .mlog-b{margin:11px 0 0 31px;padding:9px 11px;border:0;border-left:2px solid #d9e8f5;border-radius:0 8px 8px 0;background:#f7f9fc;color:#5d7286;font-size:13px;line-height:1.65;white-space:pre-wrap;overflow-wrap:anywhere}
body.page-lab .memo-card.memo-done{opacity:.78;background:#fbfcfd}
body.page-lab .memo-done-list{margin-top:20px}
body.page-lab .memo-empty{display:flex;min-height:120px;flex-direction:column;align-items:center;justify-content:center;gap:5px;margin:0 0 12px;padding:20px;border:1px dashed #d6e3ef;border-radius:13px;background:#fbfdff;text-align:center}
body.page-lab .memo-empty>span{display:grid;place-items:center;width:30px;height:30px;margin-bottom:3px;border-radius:50%;background:#eaf4fc;color:#3a83bf;font-size:16px;font-weight:700}
body.page-lab .memo-empty>b{color:#3b5874;font-size:14px}
body.page-lab .memo-empty>p{margin:0;color:#8495a5;font-size:12px}
@media(max-width:700px){
  body.page-lab .memo-hero{align-items:stretch;flex-direction:column;gap:14px;padding:17px}
  body.page-lab .memo-stats{width:100%;grid-template-columns:repeat(3,minmax(0,1fr))}
  body.page-lab .memo-stats>div{min-width:0;padding:8px 5px}
  body.page-lab .memo-compose{padding:15px}
  body.page-lab .memo-form-grid{grid-template-columns:minmax(0,1fr);gap:11px}
  body.page-lab .memo-title-field,body.page-lab .memo-time-field,body.page-lab .memo-note-field{grid-column:1;grid-row:auto}
  body.page-lab .memo-form .memo-submit{flex:1 1 100%;justify-content:center}
  body.page-lab .memo-form-actions .mres{width:100%}
  body.page-lab .memo-list-head{align-items:flex-start}
  body.page-lab .memo-card{padding:12px}
  body.page-lab .memo-card-head{gap:8px}
  body.page-lab .memo-acts{gap:5px;padding-left:0}
  body.page-lab .memo-acts .btn{min-width:36px;padding:5px 8px}
  body.page-lab .memo-card .mlog-b{margin-left:27px}
}
/* 概览备忘列表在等高列内滚动 */
.home-mid{align-items:stretch}
/* 概览页：备忘提醒（左窄）+ 本月日历（右宽）并排。
   align-items 用默认 stretch —— 两列等高，备忘列内部滚动，总高不超过日历 */
.home-mid{display:grid;grid-template-columns:340px 1fr;gap:18px;margin-top:20px}
.home-mid .sec-h{margin-top:0}
.hm-l{display:flex;flex-direction:column;min-height:0;min-width:0}
.hm-l .empty{padding:14px;font-size:13px}
.hm-l .mlogs{flex:1 1 auto;min-height:0;overflow-y:auto;padding-right:2px}
@media(max-width:1000px){.home-mid{grid-template-columns:1fr}}

/* 退出操作保持为可直接点击的链接，侧栏重绘不会影响跳转。 */
.mn-out{position:relative;border-top:1px solid var(--line-2);padding-top:8px;margin-top:8px}
.mn-dot{
  margin-left:auto;min-width:18px;height:18px;padding:0 5px;border-radius:9px;
  background:#d93b3b;color:#fff;font-size:11px;font-style:normal;font-weight:700;
  display:inline-flex;align-items:center;justify-content:center;
}

.mine-main{min-width:0}
.mine-hd{
  display:flex;align-items:center;gap:14px;margin-bottom:14px;
  background:linear-gradient(120deg,var(--navy),#1b4f85);
  border-radius:var(--r);padding:16px 18px;color:#e8f2fc;
}
.mine-hd .av{width:52px;height:52px;flex:0 0 52px;border-radius:15px;font-size:17px}
.mine-hd h3{font-size:19px;margin-bottom:2px;color:#fff}
.mine-hd .mini{color:#a9c9e6}
.mine-hd-t{min-width:0}

.mine-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(188px,1fr));gap:12px;margin-bottom:8px}
.mine-card{
  background:var(--white);border:1px solid var(--line);border-radius:var(--r);
  padding:13px 14px;cursor:pointer;transition:box-shadow .15s,border-color .15s;
}
.mine-card:hover{box-shadow:var(--sh-2);border-color:var(--blue-2)}
.mine-card.on{border-left:3px solid var(--gold)}
.mc-hd{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.mc-hd .ic{color:var(--blue);width:17px;height:17px;flex:0 0 17px}
.mc-t{font-weight:700;color:var(--navy);font-size:14px}
.mc-v{margin-top:2px;font-size:13px;color:var(--ink);line-height:1.6}
.mc-v.muted{color:var(--muted)}
/* 导师概览四张卡里的学生胶囊：头像色块 + 姓名，流式换行 */
.mc-v.mwho{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.mc-v.mwho .mwho-i{padding:3px 10px 3px 3px}
.mc-d{margin-top:4px;font-size:12px;color:var(--muted)}

.mine-items{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}
.mine-item{display:block;background:var(--white);border:1px solid var(--line);border-radius:12px;padding:12px 14px}
.mine-item:hover{border-color:var(--blue-2);box-shadow:var(--sh-1)}
.mine-item b{display:block;font-size:14px;color:var(--navy);margin-bottom:2px}
.mng-intro{margin:0 0 16px;color:var(--ink-2);line-height:1.7}
.mng-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,330px),1fr));gap:16px}
.mng-card{display:flex;flex-direction:column;overflow:hidden;background:#fff;border:1px solid var(--line);border-radius:15px;box-shadow:var(--sh-1)}
.mng-cover{height:170px;flex:0 0 170px;min-height:0;overflow:hidden;background:#edf4fb;display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:13px}
.mng-cover img{display:block;flex:none;width:100%;height:170px;object-fit:cover}
.mng-body{display:flex;flex:1;flex-direction:column;gap:11px;padding:17px}
.mng-body h4{margin:0;color:var(--navy);font-size:17px;line-height:1.45;overflow-wrap:anywhere}
.mng-status{display:flex;align-items:center;justify-content:space-between;gap:8px}
.mng-role,.mng-open{display:inline-flex;align-items:center;border-radius:999px;padding:4px 9px;font-size:11px;font-weight:700;white-space:nowrap}
.mng-role{background:#e9f3ff;color:#1765ad}.mng-open{background:#f1f3f6;color:#718096}.mng-open.on{background:#e8f6ef;color:#268052}
.mng-fact{display:flex;align-items:flex-start;gap:10px;font-size:13px;line-height:1.6}
.mng-fact>b{flex:0 0 82px;color:var(--ink-2);font-weight:600}.mng-fact>span{min-width:0;color:var(--navy)}
.mng-people>span{display:flex;flex-wrap:wrap;gap:5px}
.mng-person{display:inline-flex;align-items:center;border-radius:999px;padding:3px 10px;background:#e9f3ff;border:1px solid #cfe3fa;color:#1765ad;font-size:12px;font-weight:650;font-style:normal;white-space:nowrap}
.mng-none{font-style:normal;color:var(--muted)}
.mng-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:auto;padding-top:5px}
.mng-card .btn{align-self:flex-start}

/* 个人中心 · 仪器列表管理：紧凑子栏目与表单 */
.catalog-page{padding:28px 0 64px;background:#f6f9fd;min-height:65vh;color:var(--navy)}
.catalog-wrap{max-width:980px}
.catalog-top{display:flex;align-items:end;justify-content:space-between;gap:20px;margin-bottom:20px}
.catalog-crumb{display:flex;align-items:center;gap:9px;color:#637f9b;font-size:14.5px;margin-bottom:9px}
.catalog-crumb a{color:#3973aa}
.catalog-top h1{font-size:28px;line-height:1.3;margin:0 0 5px;color:var(--navy)}
.catalog-top p{font-size:14px;color:var(--muted);margin:0}
.catalog-back{font-size:14px;font-weight:600;white-space:nowrap;color:#2369a9;padding:9px 14px;border:1px solid #d7e5f4;border-radius:9px;background:#fff}
.catalog-back:hover{background:#eaf4ff;text-decoration:none}
.catalog-alert{font-size:14px;margin:0 0 12px;padding:10px 12px}
.catalog-grant-note{font-size:14px;color:#246752;background:#e8f7ee;border:1px solid #c9ead6;border-radius:9px;padding:9px 12px;margin-bottom:12px}
.catalog-tabs{display:flex;align-items:center;gap:6px;overflow-x:auto;white-space:nowrap;padding:5px;margin-bottom:14px;background:#eaf1f9;border:1px solid #dbe6f2;border-radius:11px;scrollbar-width:thin}
.catalog-tab{flex:0 0 auto;border:0;border-radius:8px;background:transparent;color:#41617e;padding:10px 17px;cursor:pointer;font-family:inherit;font-size:14.5px;font-weight:600;line-height:1.4;transition:background .16s,color .16s}
.catalog-tab:hover{background:#f9fcff;color:#1765a8}
.catalog-tab.active{background:#2779c9;color:#fff;box-shadow:0 2px 7px rgba(24,98,176,.18)}
.catalog-tab span{display:inline-block;min-width:18px;padding:0 5px;margin-left:3px;border-radius:12px;background:rgba(33,100,165,.1);font-size:11px}
.catalog-tab.active span{background:rgba(255,255,255,.25)}
.catalog-panel{padding:20px 22px 24px;border:1px solid #dfe8f2;border-radius:13px;background:#fff;box-shadow:0 5px 18px rgba(32,77,121,.045)}
.catalog-panel[hidden]{display:none!important}
.catalog-panel-head{display:flex;align-items:start;justify-content:space-between;gap:12px;padding-bottom:15px;margin-bottom:16px;border-bottom:1px solid #edf2f8}
.catalog-panel-head h2{margin:0 0 5px;color:var(--navy);font-size:19px;line-height:1.35}
.catalog-panel-head p{margin:0;color:#6c839b;font-size:14px;line-height:1.6}
.catalog-form{display:grid;grid-template-columns:1fr;gap:13px;max-width:690px}
.catalog-field{display:flex;flex-direction:column;gap:6px;min-width:0}
.catalog-field span{font-size:14px;font-weight:650;color:#47617c}
.catalog-field em{color:#db4c4c;font-style:normal}
.catalog-field input,.catalog-field select,.catalog-field textarea{box-sizing:border-box;width:100%;min-width:0;border:1px solid #d5e1ef;border-radius:8px;background:#fff;color:#173858;font-family:inherit;font-size:14px;line-height:1.5;padding:9px 11px;outline:none}
.catalog-field small{font-size:12.5px;color:#71889f}
.catalog-field input,.catalog-field select{height:36px}
.catalog-field textarea{min-height:66px;resize:vertical}
.catalog-field textarea[name=rules]{min-height:104px}
.catalog-field input:focus,.catalog-field select:focus,.catalog-field textarea:focus{border-color:#4a9ae0;box-shadow:0 0 0 3px rgba(54,141,218,.12)}
.catalog-form-actions{padding-top:2px}
.catalog-page .btn{padding:8px 14px;border-radius:8px;font-size:14px;line-height:1.4;box-shadow:none;white-space:nowrap}
.catalog-grant-form{grid-template-columns:minmax(0,1.4fr) minmax(170px,.8fr) auto;align-items:end;max-width:none}
.catalog-grant-form .catalog-form-actions{padding:0}
.catalog-subhead{font-size:15px;font-weight:700;color:var(--navy);margin:22px 0 9px}
.catalog-grant-list{display:grid;gap:8px}
.catalog-grant-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border:1px solid #e3ebf4;border-radius:9px;background:#fbfdff}
.catalog-grant-row b{display:block;font-size:14px;color:var(--navy)}
.catalog-grant-row small{display:block;margin-top:3px;font-size:12.5px;color:#6f859b}
.catalog-empty{padding:22px 14px;text-align:center;color:#8395a9;font-size:12.5px;border:1px dashed #d8e5f2;border-radius:9px;background:#fbfdff}
.catalog-total{flex:none;padding:3px 9px;border-radius:999px;background:#eaf4ff;color:#236eaf;font-size:12px;font-weight:700}
.catalog-items{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}
.catalog-item{display:flex;align-items:center;justify-content:space-between;gap:14px;min-width:0;padding:12px 13px;border:1px solid #e0eaf4;border-radius:10px;background:#fbfdff}
.catalog-item-name{display:flex;align-items:center;gap:8px;min-width:0;font-size:14px;color:var(--navy)}
.catalog-item-name b{font-weight:650;line-height:1.45;overflow-wrap:anywhere}
.catalog-item-dot{flex:none;width:6px;height:6px;border-radius:50%;background:#2d84cf}
.catalog-item-actions{display:flex;align-items:center;gap:6px;flex:none}
.catalog-danger{color:#c44b4b!important}
@media(max-width:750px){.catalog-wrap{padding:0 16px}.catalog-top{align-items:start;flex-direction:column;gap:10px}.catalog-panel{padding:16px}.catalog-grant-form{grid-template-columns:1fr}.catalog-items{grid-template-columns:1fr}}
@media(max-width:430px){.catalog-item{align-items:start;flex-direction:column}.catalog-item-actions{padding-left:14px}.catalog-top h1{font-size:21px}}

/* 一张「安排表」：区域 + 时间段 + 名单 */
.mgrp{background:var(--white);border:1px solid var(--line);border-radius:var(--r);padding:14px 16px;margin-bottom:12px}
.mgrp-h{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.mgrp-h b{font-size:15px;color:var(--navy)}
/* 组会列表里「下一场」突出：金边 + 淡金底 + 「下一场」角标 */
.mgrp.next{border-color:var(--gold);background:linear-gradient(180deg,#fffdf5,#fff8e8);
  box-shadow:0 0 0 1px var(--gold),0 6px 18px rgba(217,154,60,.14)}
.mg-next-tag{font-style:normal;font-size:11.5px;font-weight:700;color:#fff;background:var(--gold);
  padding:2px 9px;border-radius:20px;letter-spacing:.02em}
.mwho{display:flex;flex-wrap:wrap;gap:8px}
.mwho-i{
  display:inline-flex;align-items:center;gap:7px;padding:5px 11px 5px 5px;
  border:1px solid var(--line);border-radius:22px;background:var(--blue-50);
}
.mwho-i.me{border-color:var(--gold);background:var(--gold-100);box-shadow:0 0 0 2px rgba(217,154,60,.16)}
.mwho-i b{font-weight:600;font-size:13.5px}
.mwho-i i{font-style:normal;font-size:11.5px;color:var(--muted)}
.mnote{margin-top:9px;padding:8px 11px;border-radius:9px;background:var(--blue-50);
  color:var(--ink-2);font-size:12.5px;line-height:1.7}
.mchk{padding:12px 16px;border:1px solid var(--line);border-radius:12px;background:var(--white)}
.mchk ul{margin:0;padding-left:20px;font-size:13.5px;line-height:1.95;color:var(--ink-2)}
.mtpl{white-space:pre-wrap;padding:12px 14px;border:1px dashed var(--line);border-radius:12px;
  background:var(--blue-50);font-size:13px;color:var(--ink-2);line-height:1.85}

/* 组会时间 · 以日期为主（2026-09-30 重新设计） */
.mginfo{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;
  padding:12px 16px;border:1px solid var(--line);border-radius:12px;
  background:linear-gradient(180deg,#f6f0ff,#fbf7ff);font-size:13px;color:var(--ink-2);line-height:1.6}
.mginfo b{font-size:15px;color:var(--navy)}
.mginfo span{color:var(--ink-2)}
.mgl{margin-top:14px;display:flex;flex-direction:column;gap:12px}
.mgrow{background:var(--white);border:1px solid var(--line);border-radius:var(--r);
  padding:14px 18px;display:flex;flex-direction:column;gap:10px}
.mgrow.next{border-color:var(--gold);background:linear-gradient(180deg,#fffdf5,#fff8e8);
  box-shadow:0 0 0 1px var(--gold),0 6px 18px rgba(217,154,60,.14)}
.mgd{display:flex;align-items:center;gap:10px}
.mgd .mg-edit{margin-left:auto}
.mg-form textarea{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:9px;
  font:inherit;font-size:13.5px;line-height:1.7;color:var(--ink);background:var(--white)}
.mg-form textarea:focus{border-color:var(--blue-2);outline:2px solid rgba(26,86,168,.12);outline-offset:0}
.mgd b{font-size:16px;color:var(--navy);letter-spacing:.01em}
.mgwd{font-size:12.5px;color:var(--muted)}
.mgwho{display:flex;flex-wrap:wrap;gap:8px}
.mg-def{display:inline-flex;align-items:center;padding:5px 12px;border-radius:20px;
  background:var(--blue-50);border:1px solid var(--line);font-size:12.5px;color:var(--ink-2)}
.mg-extra{display:inline-flex;align-items:center;padding:5px 12px;border-radius:20px;
  background:var(--gold-100);border:1px solid var(--gold);font-size:12.5px;color:#854f0b}

/* 组会安排编辑表单（被授权导师） */
.mg-form{display:flex;flex-wrap:wrap;gap:12px;margin-top:12px}
.mg-form>label{display:flex;flex-direction:column;gap:5px;font-size:12.5px;color:var(--ink-2);flex:1 1 200px}
.mg-form>label.mg-full{flex:1 1 100%}
.mg-form input[type="text"],.mg-form input[type="date"]{
  padding:8px 11px;border:1px solid var(--line);border-radius:9px;font:inherit;font-size:13.5px;color:var(--ink);background:var(--white)}
.mg-form input:focus{border-color:var(--blue-2);outline:2px solid rgba(26,86,168,.12);outline-offset:0}
.mg-chks{display:flex;flex-wrap:wrap;gap:8px;padding:4px 0}
.mg-chks .chk{margin:0}
.mg-rows{display:flex;flex-direction:column;gap:10px}
.mg-row{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-start;padding:10px 12px;
  border:1px solid var(--line);border-radius:10px;background:var(--white)}
.mg-rd input{width:150px}
.mg-re{flex:1 1 220px}
.mg-re input{width:100%}
.mg-rx{flex:1 1 100%;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.mg-row input[type="text"],.mg-row input[type="date"]{
  padding:7px 10px;border:1px solid var(--line);border-radius:8px;font:inherit;font-size:13px;color:var(--ink);background:var(--white)}

/* 个人中心 · 改密码 */
.mpass{
  background:var(--white);border:1px solid var(--line);border-radius:12px;padding:16px 18px;
}
/* ---- 2026-10-05 重排（老师反馈「界面没对齐」）----
   原来 .mpass 自己就是 grid，三个 label 平铺进去。
   问题：三条提示文字**行数不一样**（最长的会折成 2 行），
        底对齐后 → 三个输入框不在同一水平线上，标签也高低错乱。
   改法：label 全部收进 .mpf-row 网格；
        .mpf-lb 用 `grid-template-rows` 固定**两行高**（标题行 + 提示行），
        没提示的那格用 &nbsp; 占位，于是三列的 input 必然齐平。 */
.mpf-row{
  display:grid;grid-template-columns:repeat(3,1fr);gap:14px 16px;align-items:start;
}
.mpf-cell{display:flex;flex-direction:column;gap:6px;min-width:0}
.mpf-lb{
  display:grid;grid-template-rows:auto auto;gap:2px;
  font-size:12.5px;color:var(--ink-2);line-height:1.35;
}
.mpf-tip{font-style:normal;font-size:11.5px;color:var(--muted);line-height:1.35}
.mpf-act{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:16px}
.mpass input{
  padding:9px 11px;border:1px solid var(--line);border-radius:9px;background:var(--white);
  font:inherit;font-size:13.5px;color:var(--ink);
}
.mpass input:focus{border-color:var(--blue-2);outline:2px solid rgba(26,86,168,.12);outline-offset:0}
.mpass button{justify-self:start}
.mpass .mres{align-self:center}
/* ---- 密码框右侧的小眼睛（2026-10-05 老师要求）----
   结构：<span class="pw-wrap"><input …><button class="pw-eye">👁</button></span>
   按钮绝对定位贴在输入框右侧，input 留出右边距别被压住。 */
.pw-wrap{position:relative;display:block}
.pw-wrap input{padding-right:38px;width:100%}
.pw-wrap .mpf-eye{
  position:absolute;right:4px;top:50%;transform:translateY(-50%);
  width:30px;height:30px;padding:0;border:0;background:transparent;
  font-size:15px;line-height:30px;text-align:center;cursor:pointer;
  color:var(--ink-2);opacity:.55;border-radius:7px;
  transition:opacity .15s,background .15s;
  /* 别让 button 的默认边框/背景样式带进来 */
  box-shadow:none;-webkit-appearance:none;appearance:none;
}
.pw-wrap .mpf-eye:hover{opacity:1;background:var(--blue-50)}
.pw-wrap .mpf-eye:focus-visible{outline:2px solid rgba(26,86,168,.25);outline-offset:1px}
.pw-wrap .mpf-eye:disabled{cursor:progress;opacity:.35}
.mres{font-size:13px;color:var(--muted);line-height:1.6}
.mres.ok{color:var(--green,#16794a);font-weight:600}
.mres.bad{color:var(--red,#c0392b);font-weight:600}
@media(max-width:640px){.mpf-row{grid-template-columns:1fr;gap:12px}}

/* 登记 / 消息 */
.mlog-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;align-items:end;
  background:var(--white);border:1px solid var(--line);border-radius:12px;padding:14px 16px;margin-bottom:14px}
.mlog-form label,.mlog-form .mfield{display:flex;flex-direction:column;gap:4px;font-size:12.5px;color:var(--ink-2)}
.mlog-form label.wide,.mlog-form .mfield.wide{grid-column:1/-1}
.mlog-form input{padding:8px 10px;border:1px solid var(--line);border-radius:9px;font:inherit;font-size:13.5px;background:var(--white)}
.mlog-form button{justify-self:start}
.mlogs{display:flex;flex-direction:column;gap:8px}
.mlog{background:var(--white);border:1px solid var(--line);border-radius:11px;padding:11px 14px}
.mlog.unread{border-left:3px solid var(--gold);background:#fffdf7}
.mlog-h{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.mlog-h b{font-size:14px;color:var(--navy)}
.mlog-b{margin-top:6px;font-size:13.5px;color:var(--ink-2);line-height:1.8;white-space:pre-wrap}
/* 站内消息「删」+ 备忘录「改/删」（2026-09-30） */
.mmsg-del{margin-left:auto;flex:none;border:0;background:transparent;color:var(--muted);
  font:inherit;font-size:12.5px;cursor:pointer;padding:2px 8px;border-radius:7px;transition:.15s}
.mmsg-del:hover{background:#fdecea;color:#c0392b}
/* 导师发的站内消息：金边突出（2026-09-30 起全员可发，导师消息要醒目） */
.mlog.vip{border-left:3px solid var(--gold);background:#fffdf7}

/* ===== 站内消息：批量删除 / 回复 / 撤回 / 我发出的（2026-10-05 老师要求）===== */

/* 顶部工具条：全选 / 已勾选 N 条 / 删除选中 / 全部已读 / 清空收件箱 */
.msgbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 12px;
  padding:9px 12px;background:var(--white);border:1px solid var(--line);border-radius:10px}
.msgbar-n{font-size:12.5px;color:var(--muted);min-width:78px}
.msgbar-tip{font-size:12px;color:var(--muted)}
@media(max-width:560px){ .msgbar{gap:6px} .msgbar-n{min-width:auto} }

/* 每行左边的勾选框（收件箱删 / 我发出的撤回共用） */
.mpick-box{flex:none;display:inline-flex;align-items:center;align-self:center;cursor:pointer;padding:0 2px}
.mpick-box input{width:16px;height:16px;accent-color:var(--blue);cursor:pointer;margin:0}

/* 回复：就地展开的输入框 */
.mmsg-reply{flex:none;margin-top:8px;border:1px solid var(--line);background:var(--blue-50);
  color:var(--blue);font:inherit;font-size:12.5px;cursor:pointer;padding:4px 13px;border-radius:8px;transition:.15s}
.mmsg-reply:hover{background:var(--blue);color:#fff;border-color:var(--blue)}
.mmsg-replybox{margin-top:9px;padding-top:10px;border-top:1px dashed var(--line-2)}
.mmsg-replybox[hidden]{display:none}
.mmsg-rt{width:100%;padding:9px 11px;border:1px solid #d8e1ec;border-radius:9px;background:var(--white);
  font:inherit;font-size:13.5px;color:var(--ink);resize:vertical;min-height:52px;line-height:1.7;outline:none;transition:.16s}
.mmsg-rt:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(26,86,168,.1)}
.mmsg-racts{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:9px}

/* 「回复」消息：左边一道蓝边，跟原始消息区分 */
.mlog.reply{border-left:3px solid var(--blue-2)}
/* 「我发出的」里别人回我的那几条：淡紫底，一眼看出是回信 */
.mlog.back{background:#faf8ff;border-color:#e2dcf5}
.badge.b-back{background:#efeafd;color:#5b48b8;font-size:11px;font-weight:600;
  padding:2px 8px;border-radius:9px;white-space:nowrap}
.mlog-orig{font-size:12px;color:var(--muted);flex:none}
/* 撤回按钮：比「删」更重（影响所有人的收件箱），用橙红 */
.mmsg-recall{margin-left:auto;flex:none;border:1px solid #f0d0c4;background:#fff8f3;color:#c05621;
  font:inherit;font-size:12.5px;cursor:pointer;padding:2px 10px;border-radius:7px;transition:.15s}
.mmsg-recall:hover{background:#c05621;color:#fff;border-color:#c05621}
@media(max-width:560px){
  .mlog-h{gap:7px}
  .mmsg-recall,.mmsg-del{margin-left:0}
}
/* 写消息：选人胶囊 */
.mpick{display:flex;gap:6px;flex-wrap:wrap;padding:8px 10px;border:1px solid var(--line);
  border-radius:9px;background:#fbfdff;min-height:40px}
.mp-item{display:inline-flex;align-items:center;padding:4px 12px;border-radius:15px;cursor:pointer;
  border:1px solid var(--line);background:#fff;font-size:13px;color:var(--ink-2);transition:.15s;user-select:none}
.mp-item:hover{border-color:var(--blue);color:var(--blue)}
.mp-item.on{background:var(--blue);border-color:var(--blue);color:#fff}
.mp-item.boss::after{content:'导';margin-left:5px;font-size:10.5px;background:var(--gold);
  color:#fff;border-radius:50%;width:15px;height:15px;display:inline-flex;align-items:center;justify-content:center}
.memo-card .mlog-h{align-items:center}
.memo-acts{margin-left:auto;display:inline-flex;gap:6px;flex:none}
/* 个人中心「本月日历」：日期下方彩色圆点 = 当天有事，悬停浮层看明细（2026-09-30） */
.mcal{background:var(--white);border:1px solid var(--line);border-radius:16px;padding:14px;margin-bottom:16px}
.mcal-top{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}
.mcal-title{display:flex;flex-direction:column;gap:2px;min-width:0}
.mcal-title .mcal-k{font-size:12px;color:var(--muted);letter-spacing:.08em;text-transform:uppercase}
.mcal-title strong{font-size:19px;color:var(--navy);line-height:1.25}
.mcal-actions{display:inline-flex;align-items:center;gap:5px;flex:none}
.mcal-actions .cal-nav{
  min-width:30px;height:30px;padding:0 9px;border:1px solid #d7e3f1;border-radius:9px;
  background:#fff;color:var(--blue);font:inherit;font-size:13px;font-weight:700;
  cursor:pointer;transition:.14s;
}
.mcal-actions .cal-nav:hover{background:var(--blue-50);border-color:#bcd5f0}
.mcal-actions .cal-nav.today{min-width:44px;color:var(--navy);font-weight:700}
.mcal-summary{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:11px}
.mcal-summary span{
  display:inline-flex;align-items:center;gap:4px;padding:4px 9px;border-radius:999px;
  background:#f3f8fe;border:1px solid #dceaf7;color:var(--ink-2);font-size:12px;
}
.mcal-summary b{color:var(--blue);font-size:13px}
.mcal-w{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;text-align:center;
  font-size:12px;color:#7890aa;margin-bottom:6px;font-weight:700}
.mcal-w span{padding:3px 0}
.mcal-g{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:5px}
.mcal-d{
  position:relative;min-height:50px;border:1px solid #edf3f9;border-radius:12px;
  padding:6px 7px;font-size:13px;background:linear-gradient(180deg,#fff,#fbfdff);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.75);transition:.14s;
}
.mcal-d.empty{background:transparent;border-color:transparent;box-shadow:none}
.mcal-d.today{border-color:var(--blue);background:linear-gradient(180deg,#eef7ff,#f8fcff);box-shadow:0 0 0 2px rgba(26,86,168,.08)}
.mcal-d .n{font-weight:800;color:var(--ink)}
.mcal-d.today .n{color:var(--blue)}
.mcal-num{
  position:absolute;right:5px;top:5px;min-width:17px;height:17px;padding:0 5px;border-radius:999px;
  background:var(--blue);color:#fff;font-size:10.5px;line-height:17px;text-align:center;font-weight:700;
}
.mcal-d .dots{display:flex;gap:3px;margin-top:10px;min-height:7px;flex-wrap:wrap}
.mcal-d .dots i{width:7px;height:7px;border-radius:50%;display:inline-block}
.mcal-d.has{cursor:default}
.mcal-d.has:hover{border-color:#cfe2f7;transform:translateY(-1px);box-shadow:0 6px 14px rgba(16,58,102,.08)}
/* 类别色 */
.mcal .d-duty{background:#2f7bd9}.mcal .d-parcel{background:#2e9e63}
.mcal .d-ledger{background:#e08a1e}.mcal .d-safety{background:#c0392b}
.mcal .d-meeting{background:#7d4bd1}.mcal .d-booking{background:#1187a8}
.mcal .d-memo{background:#d1a018}
.mcal .d-holiday{background:#e45868}
.mcal .d-workday{background:#f08b32}
.mcal .d-vacation{background:#1aa4a5}
.mcal-daytag{position:absolute;right:5px;top:5px;min-width:16px;height:16px;padding:0 2px;border-radius:4px;color:#fff;font-size:10px;line-height:16px;text-align:center;font-weight:700}
.mcal-daytag.rest{background:#e45868}.mcal-daytag.work{background:#f08b32}
.mcal-d.has-cal-tag .mcal-num{top:auto;bottom:4px}
.mine-weather{position:relative;z-index:3;margin:0 0 18px;padding:10px 15px;border:1px solid #dce8f5;border-radius:12px;background:#f2f8ff;color:#315470;line-height:1.5;outline:none}
.mine-weather:focus-visible{box-shadow:0 0 0 3px #bfdcff}
.mine-weather-line{display:flex;align-items:center;gap:8px;min-width:0;white-space:nowrap}
.mine-weather-line strong{flex:none;color:#175b96}
.mine-weather-summary{min-width:0;overflow:hidden;text-overflow:ellipsis}
.mine-weather-more{flex:none;margin-left:auto;color:#2475b7;font-size:12px}
.mine-weather-pop{display:none;position:absolute;top:calc(100% + 8px);left:0;z-index:60;width:min(560px,calc(100vw - 32px));max-height:min(70vh,580px);overflow:auto;padding:18px 20px;border:1px solid #cfdff0;border-radius:14px;background:#fff;box-shadow:0 16px 42px rgba(22,56,93,.19);color:#2d4660}
.mine-weather:hover .mine-weather-pop,.mine-weather:focus-within .mine-weather-pop{display:block}
.mine-weather-pop-title{margin-bottom:12px;padding-bottom:9px;border-bottom:1px solid #e6eef7;color:#175b96;font-weight:800}
.mine-weather-pop-body{white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.75}
/* 悬浮明细 */
.mcal-pop{display:none;position:absolute;z-index:30;left:0;top:calc(100% + 6px);min-width:230px;max-width:320px;
  background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:var(--sh-2,0 8px 24px rgba(20,60,120,.16));
  padding:10px 12px;font-size:12.5px;color:var(--ink);text-align:left}
.mcal-pop b{display:block;margin-bottom:6px;color:var(--navy)}
.mcal-d:hover .mcal-pop{display:block}
.mp-row{display:flex;gap:6px;align-items:flex-start;margin:3px 0;line-height:1.5}
.mp-row i{width:8px;height:8px;border-radius:50%;flex:none;margin-top:5px}
/* 图例 */
.mcal-lg{display:flex;gap:14px;flex-wrap:wrap;margin-top:10px;font-size:12px;color:var(--ink-2)}
.mcal-lg span{display:inline-flex;align-items:center;gap:5px}
.mcal-lg i{width:8px;height:8px;border-radius:50%;display:inline-block}

/* 个人中心概览：备忘提醒 + 日历重新排版（2026-10-06）
   老师要求：别上下乱跳，电脑上保持一行，左右像一组整齐的工作台。 */
.home-mid{
  display:grid;
  grid-template-columns:minmax(300px,.9fr) minmax(460px,1.35fr);
  gap:14px;
  align-items:stretch;
  margin-top:18px;
}
.hm-l,
#mcalBox .mcal{
  background:var(--white);
  border:1px solid var(--line);
  border-radius:14px;
  box-shadow:0 6px 18px rgba(16,58,102,.045);
}
.hm-l{
  padding:12px;
  max-height:438px;
  overflow:hidden;
}
.hm-l .sec-h{
  margin:0 0 10px;
  padding:0 2px 10px;
  border-bottom:1px solid var(--line-2);
}
.hm-l .sec-h{display:grid;grid-template-columns:4px minmax(0,1fr) auto;grid-template-rows:auto auto;column-gap:10px;row-gap:3px;align-items:center}
.hm-l .sec-h:before{grid-column:1;grid-row:1 / 3;align-self:center}
.hm-l .sec-h h3{grid-column:2;grid-row:1;font-size:16px;white-space:nowrap;min-width:0}
.hm-l .sec-h .cnt{grid-column:2;grid-row:2;justify-self:start;white-space:nowrap}
.hm-l .sec-h .btn{grid-column:3;grid-row:1 / 3;margin-left:0;white-space:nowrap}
.hm-l .empty{
  flex:1;
  display:flex;
  align-items:center;
  justify-content:center;
  min-height:150px;
  border:1px dashed var(--line);
  border-radius:12px;
  background:#fbfdff;
  color:var(--muted);
  text-align:center;
}
.hm-l .mlogs{
  flex:1 1 auto;
  min-height:0;
  overflow-y:auto;
  padding:0 2px 2px 0;
  gap:8px;
}
.hm-l .mlog{
  padding:10px 12px;
  border-radius:10px;
}
.hm-l .mlog-h{
  align-items:center;
  flex-wrap:nowrap;
}
.hm-l .mlog-h b{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.hm-l .mlog-h .mini{
  margin-left:auto;
  white-space:nowrap;
}
#mcalBox .mcal{
  margin:0;
  padding:14px;
}
#mcalBox .mcal-d{
  min-height:50px;
  padding:6px 7px;
}
#mcalBox .mcal-lg{
  margin-top:9px;
  gap:10px 14px;
}
@media(max-width:820px){
  .home-mid{grid-template-columns:1fr}
  .hm-l{max-height:none}
}
.loading{padding:40px 0;text-align:center;color:var(--muted);font-size:13.5px}
/* 窄屏：侧栏改成一条能左右滑的胶囊导航。
   以前是 flex-wrap 换行 —— 9 个菜单项堆成三行，还带 emoji，非常乱。
   现在强制一行、超出横向滑动，高度固定，看上去像一条导航带。 */
/* 窄屏：侧栏改成「一条能左右滑的胶囊导航 + 下方常驻的退出区」。
   2026-10-05 老师手机端截图：「退出」按钮排在滑动条第 1405px 处
   （scrollWidth 1487 / clientWidth 344），不横滑根本看不到，
   「拿谁能想到啊」——所以退出区必须移出滚动容器，窄屏直接平铺两个按钮。 */
@media (max-width:900px){
  /* 🔴 `1fr` 等于 `minmax(auto,1fr)`，auto 的最小值是 min-content。
     退出区移出滚动容器后 `.mine-nav` 变成 overflow:visible，
     grid item 的 min-content 会被那条超宽的菜单带撑开 → 整页横向溢出，
     手机上 `window.innerWidth` 从 390 变成 1413（页面被迫整体缩小），
     表现就是「东西被盖住、按钮要点半天」——
     2026-10-05 手机端退出按钮点不到的真凶之一。
     必须写 `minmax(0,1fr)`，并且给 item 补 `min-width:0`。 */
  .pc-mine{grid-template-columns:minmax(0,1fr);gap:14px}
  .mine-nav{position:static;padding:8px;z-index:auto;min-width:0}
  /* 菜单项本体：横向滑动带（退出区不在这里面） */
  .mine-nav-scroll{
    display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;overflow-y:hidden;
    padding:2px;margin:0;scrollbar-width:none;-webkit-overflow-scrolling:touch;
  }
  .mine-nav-scroll::-webkit-scrollbar{display:none}
  /* 退出区不参与横向滚动，两个链接始终可见。 */
  .mn-out{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .mn-out .mn-i{background:var(--blue-50);padding:12px 10px;border-radius:9px;
    margin-bottom:0;justify-content:center}
  .mine-me{display:none}            /* 身份条在内容区顶部已经有了，这里不重复 */
  .mn-i{
    width:auto;flex:0 0 auto;padding:8px 13px;border-radius:20px;
    background:var(--blue-50);white-space:nowrap;margin:0;gap:7px;
  }
  .mn-i.on::before{display:none}
  .mn-i.on{background:var(--blue);color:#fff}
  .mn-i.on .ic{color:#fff}
  .mn-sep{display:none}
  .mn-dot{margin-left:2px}
  .mine-cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  .mine-hd{padding:14px}
  .mine-hd .av{width:44px;height:44px;flex:0 0 44px;font-size:15px}
}
@media (max-width:420px){
  .mine-cards{grid-template-columns:1fr}
}

/* ==========================================================
   组内邮件（「组内管理 → 组内邮件」）
   ========================================================== */
.lm-who{
  display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  background:linear-gradient(110deg,#fff 0%,#f5f9fe 100%);border:0;border-left:4px solid var(--blue-2);border-radius:13px;
  padding:14px 17px;box-shadow:0 5px 18px rgba(28,65,105,.055);margin-bottom:12px;
}
.lm-who .av{width:44px;height:44px;flex:0 0 44px;border-radius:13px;font-size:15px}
.lm-who-t{min-width:0;display:flex;flex-direction:column;gap:1px}
.lm-who-t b{font-size:15px;color:var(--navy)}
.lm-from{font-size:12.5px;color:var(--ink-2)}
.lm-from em{font-style:normal;font-weight:600;color:var(--blue)}
.lm-how{font-size:12px;color:var(--muted)}
.lm-left{
  margin-left:auto;font-size:12.5px;font-weight:600;color:var(--navy);
  background:#e9f3fd;border:0;border-radius:20px;padding:6px 12px;
}
.lm-tip{
  font-size:12.5px;line-height:1.7;color:#5d6f83;
  background:#f1f6fb;border:0;border-left:3px solid #9bbbd9;border-radius:0 8px 8px 0;
  padding:8px 12px;margin-bottom:14px;
}
.lm-grid{display:grid;grid-template-columns:minmax(285px,330px) minmax(0,1fr);gap:18px;align-items:stretch}

/* 收件人 */
.lm-pick{background:var(--white);border:0;border-radius:14px;padding:19px;box-shadow:0 7px 25px rgba(21,57,93,.065)}
.lm-pick-h{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.lm-pick-h b{font-size:15px;color:var(--navy);letter-spacing:.01em}
.lm-pick-h .n{margin-left:auto;font-size:12px;color:#2d70b6;font-weight:600}
.lm-pick-ops{display:flex;gap:8px;margin:11px 0 12px}
.lm-find{display:flex;align-items:center;gap:8px;height:39px;padding:0 11px;margin:0 0 7px;
  border:1px solid #e6edf5;border-radius:9px;background:#f8fafc;color:#7c91a6;transition:border-color .15s,background .15s}
.lm-find:focus-within{border-color:#9abfe2;background:#fff;box-shadow:0 0 0 3px rgba(26,86,168,.07)}
.lm-find>span{font-size:18px;line-height:1}
.lm-find input{width:100%;min-width:0;border:0;outline:0;background:transparent;color:var(--ink);font:inherit;font-size:13px}
.lm-find input::placeholder{color:var(--muted)}
.lm-groups{max-height:380px;overflow:auto;border:0;border-top:1px solid #edf1f5;border-radius:0}
.lm-grp[hidden],.lm-p[hidden],.lm-no-match[hidden]{display:none}
.lm-no-match{padding:13px 5px;color:var(--muted);font-size:12.5px;line-height:1.7;text-align:center}
.lm-selected{margin-top:9px;padding:11px 0 0;border:0;border-top:1px solid #edf1f5;border-radius:0;background:transparent}
.lm-selected>b{display:block;margin-bottom:7px;color:#657b90;font-size:11.5px;font-weight:600}
.lm-selected-list{display:flex;flex-wrap:wrap;gap:5px;align-items:center;max-height:76px;overflow:auto}
.lm-selected-empty,.lm-chip-more{color:var(--muted);font-size:12px}
.lm-chip{display:inline-flex;align-items:center;gap:5px;max-width:100%;padding:3px 8px;border:0;border-radius:15px;background:#f0f6fc;color:#426987;font:inherit;font-size:12px;cursor:pointer}
.lm-chip span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lm-chip i{font-style:normal;font-size:14px;line-height:1;color:#849bb0}
.lm-chip:hover{background:#e4eff9;color:#245b8e}
.lm-grp{border-bottom:1px solid #edf1f5}
.lm-grp:last-child{border-bottom:0}
.lm-grp>summary{
  display:flex;align-items:center;gap:9px;padding:10px 8px;cursor:pointer;
  list-style:none;background:transparent;border-radius:7px;font-size:13px;transition:background .15s;
}
.lm-grp>summary:hover{background:#f6f9fc}
.lm-grp>summary::-webkit-details-marker{display:none}
.lm-grp>summary::after{content:"▾";margin-left:6px;color:var(--muted);font-size:11px}
.lm-grp[open]>summary::after{content:"▴"}
.lm-grp>summary b{color:var(--navy);font-size:13px}
.lm-grp>summary .n{margin-left:auto;color:var(--muted);font-size:11.5px}
.lm-grp-t{display:flex;align-items:center;gap:8px;cursor:pointer}
.lm-grp-t input{width:15px;height:15px;accent-color:var(--blue)}
.lm-people{display:flex;flex-direction:column;padding:2px 0 7px}
.lm-p{display:flex;align-items:baseline;gap:8px;padding:7px 9px;margin:1px 0;border-radius:7px;cursor:pointer;font-size:13px}
.lm-p:hover{background:#f6f9fc}
.lm-p input{width:15px;height:15px;flex:0 0 15px;accent-color:var(--blue);transform:translateY(2px)}
.lm-p span{color:var(--ink)}
.lm-p i{font-style:normal;color:var(--muted);font-size:11.5px;margin-left:auto}
.lm-p input:checked+span{font-weight:600;color:var(--navy)}
.lm-extra{display:block;margin-top:12px;padding-top:11px;border-top:1px solid #edf1f5}
.lm-extra>span{display:block;font-size:12.5px;color:var(--ink-2);margin-bottom:5px}
.lm-extra em{font-style:normal;color:var(--muted);margin-left:6px}
.lm-extra textarea{
  width:100%;padding:9px 10px;border:1px solid #e6edf5;border-radius:8px;
  font:inherit;font-size:13px;color:var(--ink);resize:vertical;background:#fbfcfe;
}

/* 写信 */
.lm-write{display:flex;flex-direction:column;min-width:0;background:var(--white);border:0;border-radius:14px;padding:21px 23px;box-shadow:0 7px 25px rgba(21,57,93,.065)}
.lm-write .lm-body-field{display:flex;flex:1;flex-direction:column;min-height:0}
.lm-write .lm-body-field textarea{flex:1;min-height:230px}
.lm-smtp{margin-top:20px;border:1px solid #dce7f4;border-radius:12px;background:#fff;box-shadow:0 4px 16px rgba(21,57,93,.04)}
.lm-smtp>summary{cursor:pointer;list-style:none;padding:14px 17px;color:#17395f;font-weight:700;display:flex;align-items:center;gap:10px}
.lm-smtp>summary::-webkit-details-marker{display:none}.lm-smtp>summary:after{content:'＋';margin-left:auto;color:#4386cb;font-size:18px}.lm-smtp[open]>summary:after{content:'−'}
.lm-smtp>summary span{font-size:12px;font-weight:400;color:#7188a4;background:#f1f6fc;border-radius:20px;padding:4px 9px}
.lm-smtp-body{padding:0 17px 17px;border-top:1px solid #edf2f8}.lm-smtp-body>p{font-size:13px;color:#647c98;line-height:1.7;margin:12px 0}
.lm-smtp-body .lm-scan-login{color:#c24136;font-weight:800;text-decoration:underline;text-decoration-thickness:1.5px;text-underline-offset:3px}
.lm-smtp-body .lm-scan-login:hover{color:#9f2d25}
.lm-smtp-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.lm-smtp-grid .lm-f{min-width:0}.lm-smtp-grid input,.lm-smtp-grid select{width:100%;box-sizing:border-box;height:40px}.lm-smtp-grid select{padding:0 12px;line-height:1.2;vertical-align:top}
.lm-smtp-actions{display:flex;align-items:center;gap:12px;margin-top:13px}.lm-smtp-actions .lm-res{margin:0}
.lm-personal{margin:0 0 20px;padding:18px;border:1px solid #dce7f4;border-radius:16px;background:linear-gradient(135deg,#fff,#f7fbff);box-shadow:0 8px 28px rgba(21,57,93,.06)}
.lm-personal-head{display:flex;align-items:center;justify-content:space-between;gap:16px}.lm-personal-head h3{margin:3px 0 4px;color:#17395f}.lm-personal-head p{margin:0;color:#7188a4;font-size:13px}.lm-eyebrow{font-size:10px;letter-spacing:.14em;color:#3984ce;font-weight:700}.lm-personal-meta{display:flex;gap:8px;flex-wrap:wrap}.lm-personal-meta span{padding:7px 10px;border-radius:99px;background:#edf5ff;color:#2c659f;font-size:12px}
.lm-personal-tabs{display:flex;align-items:center;gap:7px;margin:14px 0 8px;padding:7px;border-radius:11px;background:#eef4fb}.lm-personal-tabs button,.lm-inbox-pages button{border:0;background:transparent;color:#536d8d;border-radius:8px;padding:8px 13px;cursor:pointer}.lm-personal-tabs button.on{background:#2c83d4;color:#fff;font-weight:700;box-shadow:0 3px 10px #2c83d433}.lm-personal-tabs .lm-p-sync{margin-left:auto;background:#fff;border:1px solid #dce7f4;color:#2c659f}
.lm-p-status{font-size:12px;color:#8395ab;padding:0 3px 10px}.lm-inbox-tools{display:flex;justify-content:space-between;align-items:center;padding:8px 2px;color:#7188a4;font-size:12px}.lm-inbox-list{border:1px solid #e2eaf4;border-radius:11px;overflow:hidden;background:#fff}.lm-inbox-row{display:flex;align-items:center;border-bottom:1px solid #edf2f8}.lm-inbox-row:last-child{border-bottom:0}.lm-inbox-row.unread{background:#f4f9ff}.lm-mail-open{flex:1;min-width:0;border:0;background:transparent;padding:12px;display:grid;grid-template-columns:minmax(130px,1fr) minmax(120px,2fr) auto;gap:12px;text-align:left;align-items:center;cursor:pointer;color:#264466}.lm-mail-open b,.lm-mail-open span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lm-mail-open span,.lm-mail-open time{font-size:12px;color:#7b8fa8}.lm-mail-del{margin:0 10px;border:0;background:transparent;color:#9a6a6a;cursor:pointer}.lm-inbox-empty{padding:24px;text-align:center;color:#8496ac;background:#fff;border-radius:10px}.lm-mail-detail{margin-top:12px;border:1px solid #dce7f4;border-radius:12px;background:#fff;overflow:hidden}.lm-mail-detail header{display:grid;gap:7px;padding:14px;background:#f5f8fc;border-bottom:1px solid #e5edf6;color:#36516e}.lm-mail-detail header span,.lm-mail-detail time{font-size:12px;color:#8294a8}.lm-mail-detail pre{white-space:pre-wrap;overflow-wrap:anywhere;font:14px/1.8 inherit;padding:16px;margin:0;color:#334d6b;max-height:55vh;overflow:auto}.lm-personal-compose{display:grid;grid-template-columns:1fr 1fr;gap:12px;background:#fff;padding:14px;border:1px solid #e2eaf4;border-radius:12px}.lm-personal-compose .lm-f:nth-child(n+3){grid-column:1/-1}.lm-personal-compose textarea{width:100%;box-sizing:border-box}
.lm-compose-head{display:flex;align-items:center;gap:11px;margin:0 0 17px;padding:0 0 14px;border-bottom:1px solid #edf1f5}
.lm-compose-ic{display:grid;place-items:center;width:38px;height:38px;border-radius:12px;background:#edf5fc;color:#3377b8;font-size:18px}
.lm-compose-head h3{margin:0;color:var(--navy);font-size:16px;line-height:1.4}
.lm-compose-head p{margin:3px 0 0;color:var(--muted);font-size:12px}
.lm-f{display:block;margin-bottom:12px}
.lm-f>span{display:block;font-size:12.5px;color:#536b82;font-weight:600;margin-bottom:6px}
.lm-f em{font-style:normal;color:var(--muted);margin-left:6px}
.lm-f input,.lm-f textarea{
  width:100%;padding:10px 12px;border:1px solid #e4ebf2;border-radius:8px;
  font:inherit;font-size:13.5px;color:var(--ink);background:#fbfcfe;resize:vertical;transition:border-color .15s,background .15s;
}
.lm-f input:focus,.lm-f textarea:focus{border-color:#91b9df;background:#fff;outline:2px solid rgba(26,86,168,.08)}
.lm-f textarea{min-height:230px;line-height:1.75}
.lm-send{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:4px}
.lm-res{font-size:13px;line-height:1.6;color:var(--muted)}
.lm-res.ok{color:#16794a;font-weight:600}
.lm-res.bad{color:#c0392b;font-weight:600}
.lm-logs{margin-top:20px;padding-top:16px;border-top:1px solid #edf1f5}
.lm-logs-h{font-size:13px;font-weight:700;color:var(--navy);margin-bottom:8px}
.lm-bad{color:#c0392b}

/* 没权限 */
.lm-gate{
  background:var(--white);border:1px solid var(--line);border-radius:var(--r);
  padding:36px 28px;text-align:center;box-shadow:var(--sh-1);
}
.lm-gate-ic{font-size:34px;line-height:1;margin-bottom:10px;color:var(--blue-2)}
.lm-gate h3{font-size:17px;color:var(--navy);margin-bottom:10px}
.lm-gate p{max-width:560px;margin:0 auto 8px;font-size:13.5px;line-height:1.85;color:var(--ink-2)}

@media (max-width:900px){
  .lm-grid{grid-template-columns:1fr}
  .lm-groups{max-height:300px}
}
@media (max-width:600px){
  .lm-pick,.lm-write{padding:15px;border-radius:12px}
  .lm-write{padding:17px 15px}
  .lm-smtp-grid{grid-template-columns:1fr}
  .lm-who{gap:9px;padding:12px 13px}
  .lm-left{margin-left:53px}
  .lm-p{align-items:flex-start;flex-wrap:wrap}
  .lm-p i{width:calc(100% - 24px);margin:0 0 0 23px;overflow-wrap:anywhere}
  .lm-f textarea{min-height:190px}
  .lm-personal{padding:13px;border-radius:12px}.lm-personal-head{align-items:flex-start;flex-direction:column}.lm-personal-tabs{flex-wrap:wrap}.lm-personal-tabs .lm-p-sync{margin-left:0}.lm-mail-open{grid-template-columns:1fr;gap:4px}.lm-mail-open time{white-space:nowrap}.lm-personal-compose{grid-template-columns:1fr}.lm-personal-compose .lm-f:nth-child(n+3){grid-column:auto}
}
/* 站内消息写消息：收件人按身份/届分组 */
.mp-group{margin-bottom:10px}
.mp-ghead{display:flex;align-items:center;gap:7px;margin-bottom:5px;cursor:pointer;font-size:13px;color:var(--navy)}
.mp-ghead input{width:auto}
.mp-group .mpick{min-height:34px}
/* 站内消息：收件人一行化 —— 「选收件人」按钮展开分组面板 */
.mwrap{position:relative;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.mpicked{font-size:12.5px;color:var(--blue);font-weight:600}
.mpanel{position:absolute;z-index:40;top:calc(100% + 6px);left:0;width:520px;max-width:90vw;
  max-height:420px;overflow:auto;background:#fff;border:1px solid var(--line);border-radius:12px;
  box-shadow:0 10px 30px rgba(20,60,120,.18);padding:12px 14px}
/* 收件人胶囊里的仪器管理员小标（金色，紧跟名字后） */
.mp-item .mi-roles{font-style:normal;font-size:10.5px;color:#9a6200;background:#fff1d6;
  border-radius:6px;padding:1px 5px;margin-left:5px}
/* 已选收件人姓名标签 */
.picked-tag{display:inline-flex;align-items:center;gap:4px;background:var(--blue-50);color:var(--blue);
  border:1px solid #cfe2f7;border-radius:14px;padding:3px 10px;font-size:12.5px;margin:2px 4px 2px 0}
.picked-tag .pt-x{font-style:normal;cursor:pointer;font-weight:700;color:var(--blue);padding:0 2px}
.picked-tag .pt-x:hover{color:var(--err)}
/* 身份标识徽章（导师授予的标签）：统一胶囊圆角，圆弧形不要方角 */
.badge{border-radius:20px}
.mine-hd .badge,.mpf-b .badge{display:inline-block;margin:2px 4px 2px 0;padding:3px 12px;
  border-radius:20px;font-size:12px;font-weight:600;border:1px solid transparent}
/* 概览：姓名旁的身份标识胶囊（自适应长度，两端留白） */
.mine-hd-t .mtags{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.mine-hd .badge{padding:3px 16px;border-radius:20px;font-size:12px;font-weight:600;
  letter-spacing:.05em;line-height:1.6}

/* ==========================================================
   组内论坛
   ========================================================== */
/* 组内论坛版块网格。
   ⚠️ 类名原来叫 .fgrid，和「科研设施卡片」的 .fgrid 撞车了 ——
   同一个类名被两处不同用途复用，后定义的那条 auto-fill 规则把设施页的
   3 列压成了「按宽度自动填」（1440px 下变成 4 列），
   后台「每行个数」对科研设施就怎么设都不生效（2026-10-04 修）。
   论坛自己用 .fbgrid（forum board grid），与设施的 .fgrid 彻底分开。 */
.fbgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:18px}
.fboard{display:block;background:#fff;border:1px solid var(--line);border-radius:12px;padding:18px 18px 14px;
  transition:.22s;box-shadow:var(--sh-1)}
.fboard:hover{transform:translateY(-3px);box-shadow:var(--sh-2);border-color:#cfe2f7;text-decoration:none}
.fboard .fb-name{font-size:16.5px;font-weight:700;color:var(--navy);margin-bottom:6px}
.fboard .fb-intro{font-size:13px;color:var(--ink-2);line-height:1.6;min-height:40px}
.fboard .fb-meta{font-size:12px;color:var(--muted);margin-top:10px;padding-top:10px;border-top:1px solid var(--line-2)}
/* 有子版块的版块卡片：子版块收进卡内（2026-10-04） */
.fboard .fb-subs{margin-top:12px;display:flex;flex-direction:column;gap:6px}
.fboard .fb-sub{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:9px 12px;border:1px solid var(--line);border-radius:9px;background:#f8fafe;
  text-decoration:none;transition:.18s}
.fboard .fb-sub:hover{border-color:var(--blue);background:var(--blue-50, #e8f2fc)}
.fboard .fb-sub-nm{font-size:13.5px;font-weight:600;color:var(--navy)}
.fboard .fb-sub:hover .fb-sub-nm{color:var(--blue)}
.fboard .fb-sub-n{font-size:12px;color:var(--muted)}
/* 论坛翻页（.apager 也用于后台，这里给前台也加上蓝色按钮样式） */
.apager{margin:18px auto;display:flex;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap}
/* 所有直接子元素统一归零 margin —— 内容页 .pnav 等同名类有margin:34px 0 6px，
   不归零会把按钮顶下去（同class 撞车，2026-10-04 修） */
.apager > *{height:32px !important;display:inline-flex !important;align-items:center !important;justify-content:center !important;box-sizing:border-box !important;margin:0 !important}
.apager a,.apager b{min-width:34px;padding:0 10px;border-radius:8px;font-size:13.5px}
.apager a{color:var(--blue);text-decoration:none;border:1px solid var(--blue);background:#fff;transition:.18s}
.apager a:hover{background:var(--blue);color:#fff}
.apager b.on{background:var(--blue);color:#fff;font-weight:600;border:1px solid var(--blue)}
.apager a.ap-nav{padding:0 16px;font-weight:500}
.apager .pinfo{padding:0 6px;white-space:nowrap;color:var(--muted);font-size:13.5px}
.apager .gap{color:var(--muted);border:none !important;background:none !important}
.fboard-h{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}
.fboard-h h1{font-size:22px;margin:0 0 4px}
.fboard-h p{color:var(--muted);font-size:14px;margin:0}
.fnew{background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px;margin-bottom:18px}
.acts{display:flex;gap:10px;align-items:center;margin-top:12px;flex-wrap:wrap}
.fnew input[type=text],.fnew textarea,.freply textarea{width:100%;padding:10px 12px;border:1px solid var(--line);
  border-radius:9px;font-size:14px;font-family:inherit;margin-bottom:10px;box-sizing:border-box}
.flist{display:flex;flex-direction:column;gap:10px}
.frow{display:flex;align-items:center;gap:14px;background:#fff;border:1px solid var(--line);border-radius:11px;
  padding:14px 16px;transition:.18s;box-shadow:var(--sh-1)}
.frow:hover{transform:translateY(-2px);box-shadow:var(--sh-2);border-color:#cfe2f7;text-decoration:none}
.frow .fr-main{flex:1;min-width:0}
.frow .fr-title{font-size:15px;font-weight:600;color:var(--navy);line-height:1.5}
.frow .fr-meta{font-size:12.5px;color:var(--muted);margin-top:5px}
.frow .fr-side{text-align:right;font-size:12.5px;color:var(--muted);white-space:nowrap}
.frow .fr-side span{display:block;margin:2px 0}
.fchp{display:inline-block;font-size:12px;font-weight:700;padding:2px 9px;border-radius:5px;margin-right:7px;
  background:#fdecec;color:#c0392b;vertical-align:2px;white-space:nowrap}
.fchp.d{background:#fdf3e3;color:#b8860b}
.ftopic,.fpost{display:flex;gap:18px;background:#fff;border:1px solid var(--line);border-radius:12px;
  padding:18px;margin-bottom:14px;box-shadow:var(--sh-1)}
.ftopic.digest{border-color:#f0d69a;background:#fffdf6}
.ftopic .ft-main,.fpost .ft-main{flex:1;min-width:0}
.ftopic h1{font-size:20px;margin:0 0 12px;line-height:1.5}
.ft-body{font-size:15px;line-height:1.9;color:var(--ink);word-break:break-word}
.ft-body img{max-width:100%;border-radius:8px}
.ft-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:16px;
  padding-top:12px;border-top:1px solid var(--line-2);flex-wrap:wrap}
.ft-acts{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
/* 论坛操作按钮（赞/编辑/置顶/加精/删帖）——胶囊轻按钮，比裸文字链接醒目 */
.ft-acts .fact{display:inline-flex;align-items:center;gap:4px;padding:4px 13px;border:1px solid var(--line);
  border-radius:999px;background:#fff;font-size:12.5px;font-weight:500;color:#3d4f61;
  text-decoration:none;white-space:nowrap;transition:.15s}
.ft-acts .fact:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-50);text-decoration:none}
.ft-acts .fact.on{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:600}
.ft-acts .fact.danger{color:#c0392b;border-color:#efc7c2}
.ft-acts .fact.danger:hover{background:#fdecec;border-color:#c0392b;color:#c0392b}
.ft-side{flex:0 0 180px}
.fpost-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.freply{background:#fff;border:1px solid var(--line);border-radius:12px;padding:18px;margin-top:8px}
.freply h3{margin:0 0 12px;font-size:16px}
/* 用户卡片（作者信息） */
.fu{font-size:13px;color:var(--ink-2);line-height:1.6}
.fu img,.fu-av{width:56px;height:56px;border-radius:50%;object-fit:cover;display:block;margin-bottom:8px}
.fu-av{display:flex;align-items:center;justify-content:center;color:#fff;font-size:22px;font-weight:700}
.fu-nm{font-size:15px;font-weight:700;color:var(--navy);margin-bottom:4px}
.fu-tags{display:flex;flex-wrap:wrap;gap:4px;margin:6px 0}
.fut{font-size:11px;padding:1px 7px;border-radius:20px;border:1px solid}
.fu-meta{font-size:12px;color:var(--muted);margin-top:6px}
.flv{display:inline-block;font-size:11.5px;font-weight:700;padding:1px 8px;border-radius:20px;border:1px solid}
@media (max-width:700px){.ftopic,.fpost{flex-direction:column}.ft-side{flex:1 1 auto}}

/* 个人中心菜单里的「组内论坛」入口：别的颜色 + 加粗，突出新功能 */
.mn-i.accent{color:var(--blue);font-weight:700}
.mn-i.accent:hover{background:var(--blue-50);color:var(--blue)}

/* 论坛编辑器 */
.fed{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff}
.fed-tb{display:flex;flex-wrap:wrap;gap:4px;padding:8px 10px;background:var(--blue-50);border-bottom:1px solid var(--line)}
.fed-tb button,.fed-sel{min-width:30px;height:28px;padding:0 8px;border:1px solid var(--line);border-radius:7px;
  background:#fff;color:var(--ink);font-size:12.5px;cursor:pointer;font-family:inherit}
.fed-tb button:hover,.fed-sel:hover{background:var(--blue-100);color:var(--blue);border-color:#cfe2f7}
.fed-cbtn{position:relative;display:inline-flex;align-items:center;gap:2px;height:28px;padding:0 8px;
  border:1px solid var(--line);border-radius:7px;background:#fff;font-size:12.5px;cursor:pointer}
.fed-cbtn input[type=color]{width:16px;height:16px;border:0;padding:0;background:none;cursor:pointer}
.fed-body{min-height:140px;padding:12px 14px;font-size:14.5px;line-height:1.85;color:var(--ink);
  outline:none;word-break:break-word}
.fed-body:empty::before{content:attr(data-ph);color:var(--muted)}
.fed-body img{max-width:100%;border-radius:8px}
.fed-emoji{display:flex;flex-wrap:wrap;gap:2px;padding:8px 10px;background:#f8fafc;border-bottom:1px solid var(--line)}
.fed-emo{width:32px;height:32px;border:0;background:none;font-size:20px;cursor:pointer;border-radius:6px}
.fed-emo:hover{background:var(--blue-50)}
.fed-attach-bar{display:flex;align-items:center;gap:10px;padding:8px 10px;background:#f8fafc;border-top:1px solid var(--line)}
.fed-attbtn{padding:5px 12px;border:1px solid var(--line);border-radius:7px;background:#fff;font-size:13px;cursor:pointer}
.fed-attbtn:hover{background:var(--blue-50);color:var(--blue)}
.fed-attach-list{padding:6px 10px 10px}
.fa-row{display:flex;align-items:center;gap:8px;padding:5px 8px;border-radius:7px;font-size:13px}
.fa-row:hover{background:var(--blue-50)}
.fa-row .fatt-nm{flex:0 1 auto;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:420px}
.fa-row .fa-del{border:0;background:none;color:#c0392b;cursor:pointer;font-size:13px}
/* 帖子/回复里的附件列表 */
.fatts{display:flex;flex-direction:column;gap:6px;margin-top:12px}
.fatt{display:flex;align-items:center;gap:8px;padding:7px 12px;border:1px solid var(--line);border-radius:9px;
  background:#f8fafc;text-decoration:none;font-size:13.5px}
.fatt:hover{border-color:#cfe2f7;background:var(--blue-50)}
/* 2026-10-04：.fatt 从 <a> 改成 <span> 容器（内含查看+下载两个链接） */
.fatt-open{display:flex;align-items:center;gap:8px;flex:1 1 auto;min-width:0;color:inherit;text-decoration:none}
.fatt-open:hover .fatt-nm{text-decoration:underline}
.fatt-nm{color:var(--blue);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fatt-sz{color:var(--muted);font-size:12px;flex:0 0 auto}
.fatt-dl{flex:0 0 auto;padding:2px 10px;border:1px solid var(--line);border-radius:7px;
  background:#fff;color:var(--navy);font-size:12.5px;text-decoration:none;line-height:1.7}
.fatt-dl:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-50)}

/* 附件查看页（act=file） */
.ffileview .ft-main{width:100%}
.ffv-title{font-size:20px;margin:0 0 6px;word-break:break-all}
.ffv-meta{display:flex;gap:14px;flex-wrap:wrap;color:var(--muted);font-size:13px;margin-bottom:14px}
.ffv-box{background:#f4f6f9;border:1px solid var(--line);border-radius:12px;overflow:hidden}
.ffv-frame{display:block;width:100%;height:78vh;min-height:520px;border:0;background:#525659}
.ffv-img{display:block;max-width:100%;margin:0 auto}
.ffv-none{padding:40px 20px;text-align:center;color:var(--muted);margin:0}
.ffv-acts{display:flex;gap:10px;margin-top:16px;flex-wrap:wrap}
.ffv-acts .btn{display:inline-block;padding:9px 18px;border:1px solid var(--blue);border-radius:9px;
  background:var(--blue);color:#fff;text-decoration:none;font-size:14px}
.ffv-acts .btn.ghost{background:#fff;color:var(--blue)}

/* 本帖附件被查看/下载汇总（导师可见）
   跟上方头像列表之间留够间距并加浅底，否则和头像挤成一团看不出层级 */
.ffvsum{margin-top:14px;padding:12px 14px;border:1px solid var(--blue-50);border-radius:10px;background:#fff}
.ffvsum-lb{display:block;font-size:13px;color:var(--ink-2);font-weight:600;margin-bottom:6px}
.ffvsum-r{display:flex;gap:12px;align-items:baseline;padding:6px 0;font-size:13px;
  border-bottom:1px solid var(--blue-50)}
.ffvsum-r:last-child{border-bottom:0}
.ffvsum-nm{flex:0 1 46%;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ffvsum-v{flex:1 1 auto;color:var(--muted);line-height:1.65}
/* 弹窗里「看过的附件」小标题 */
.fv-pop-sub{margin-top:10px;padding-top:10px;border-top:1px dashed var(--line);
  font-size:13px;color:var(--muted);font-weight:600}

/* 学术资源 */
.res-sub{margin:20px 0 10px;display:flex;align-items:center;gap:8px;
  font-size:15px;font-weight:700;color:var(--navy)}
.res-sub::before{content:"";width:4px;height:15px;border-radius:2px;background:var(--blue)}
.res-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
.res-card{display:block;padding:14px 16px;border:1px solid var(--line);border-radius:12px;
  background:#fff;text-decoration:none;transition:.18s}
.res-card:hover{border-color:#cfe2f7;background:var(--blue-50);transform:translateY(-2px);
  box-shadow:0 4px 12px rgba(16,47,82,.1)}
.res-card b{display:block;font-size:14.5px;color:var(--navy)}
.res-card:hover b{color:var(--blue)}

/* 论坛浏览记录（头像） */
.fviewers{margin:16px 0 4px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:#fbfdff}
.fviewers-lb{display:block;font-size:13px;color:var(--ink-2);margin-bottom:10px}
.fviewers-list{display:flex;flex-wrap:wrap;gap:6px}
.fviewers-list .fv{width:34px;height:34px;border-radius:50%;overflow:hidden;display:inline-flex;
  align-items:center;justify-content:center;border:2px solid #fff;box-shadow:0 1px 3px rgba(16,47,82,.18);
  background:#eef3f9;cursor:default}
.fviewers-list .fv img{width:100%;height:100%;object-fit:cover;display:block}
.fviewers-list .fv .ini{width:100%;height:100%;display:flex;align-items:center;justify-content:center;
  color:#fff;font-size:13px;font-weight:600}
.fviewers-list .fv.fv-click{cursor:pointer;transition:transform .15s}
.fviewers-list .fv.fv-click:hover{transform:translateY(-2px);border-color:#cfe2f7}
.fviewers-tip{display:inline-block;margin-top:8px;font-size:12px;color:var(--muted)}
/* 导师点头像弹窗 */
.fv-pop-mask{position:fixed;inset:0;z-index:999;background:rgba(10,30,50,.45);display:flex;
  align-items:center;justify-content:center;padding:20px}
.fv-pop{background:#fff;border-radius:14px;padding:20px 22px;width:320px;max-width:92vw;
  box-shadow:0 20px 60px rgba(10,30,50,.35)}
.fv-pop-h{font-size:16px;font-weight:700;color:var(--navy);margin-bottom:14px;padding-bottom:10px;
  border-bottom:1px solid var(--line)}
.fv-pop-r{display:flex;justify-content:space-between;gap:12px;padding:7px 0;font-size:14px}
.fv-pop-r span{color:var(--muted)}
.fv-pop-r b{color:var(--ink);font-weight:600;text-align:right;word-break:break-all}
.fv-pop .btn{width:100%;margin-top:14px}

/* 论坛上传进度 */
.fed-prog{padding:8px 14px;font-size:13px;color:var(--blue);background:var(--blue-50)}
.fa-row.uploading{opacity:.75}
.fa-row .fa-prog{color:var(--blue);font-size:12.5px;white-space:nowrap}
.fa-row .fa-bar{flex:1 1 auto;max-width:220px;height:6px;border-radius:4px;background:#e6edf5;overflow:hidden}
.fa-row .fa-bar i{display:block;width:0;height:100%;border-radius:4px;background:var(--blue);transition:width .15s ease}
.fa-row.fa-err{background:#fdecec}
.fa-row.fa-err .fa-prog{color:#c0392b}

/* ==========================================================================
   📱 移动端优化（2026-10-05）
   --------------------------------------------------------------------------
   不是重做版式，是拿 Playwright 在 375/360/390/430 四种真机宽度实测后，
   针对量出来的具体问题逐条补的：

   ① 面包屑「首页」27×18 —— 手指头点不准，8 个页面都有
   ② DOI 角标 21×21、轮播小圆点 9×9 —— 同上，属于「看着像按钮的东西必须能点」
   ③ 正文里的 9.9px 上标（期刊卷期）—— 手机上根本读不出来
   ④ 英文名/重点推荐/英文小标题 11~11.5px —— 偏小
   ⑤ 邮箱标签 141×31 —— 高度不够
   ⑥ 表单控件、按钮在窄屏下贴边

   原则：**只放大点击热区和字号，不改布局** —— 布局一改，桌面端跟着跑偏。
   触摸目标用「伪元素扩大热区」而不是加 padding，避免视觉上被撑开。
   ========================================================================== */
@media (max-width:820px){
  /* ---- ① 面包屑：热区上下各扩 11px，视觉不变 ---- */
  .pb .crumb a,
  .pb .crumb span{
    display:inline-block;position:relative;
  }
  .pb .crumb a::after,
  .pb .crumb span::after{
    content:'';position:absolute;left:-8px;right:-8px;top:-11px;bottom:-11px;
  }

  /* ---- ② 小圆点：圆点本身不动，用伪元素把可点区域撑到 44px ---- */
  .hb-dots{gap:4px;bottom:14px}
  .hb-dots button{position:relative}
  .hb-dots button::after{
    content:'';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
    width:44px;height:44px;border-radius:50%;
  }
  .hb-dots button.on{width:26px}

  /* ---- ② DOI / 外链角标：热区扩到 40×40 ---- */
  .tcard .ft a.dv,
  .pub .meta a.dv,
  .dlinks a.dv{
    display:inline-flex;align-items:center;justify-content:center;
    min-width:40px;min-height:34px;position:relative;
  }
  .tcard .ft a.dv::before,
  .pub .meta a.dv::before,
  .dlinks a.dv::before{
    content:'';position:absolute;inset:-8px -4px;
  }

  /* ---- ③ 期刊卷期上标：9.9px → 12px，别再是"装饰性小字" ---- */
  .bd .jr sub,
  .pub .jr sub,
  .jr sub{font-size:12px;line-height:1.2}

  /* ---- ④ 偏小字号统一抬到 12px 以上 ---- */
  .pi-name span{font-size:12.5px}
  .stkc{font-size:12px}
  .eyebrow{font-size:11.5px}
  .tag.tag-link{min-height:34px;display:inline-flex;align-items:center}

  /* ---- ⑤ 邮箱/标签类小链接：热区扩高 ---- */
  .pi-field .tags a.tag,
  .pi-field a.tag{
    display:inline-flex;align-items:center;min-height:34px;padding-top:2px;padding-bottom:2px;
  }

  /* ---- ⑥ 「全部方向 →」这类右对齐链接：热区扩高 ---- */
  .sec-h a.right,
  .sec-h>a:last-child{
    display:inline-flex;align-items:center;min-height:40px;position:relative;
  }
  .sec-h a.right::after{content:'';position:absolute;left:-6px;right:-6px;top:-6px;bottom:-6px}

  /* ---- 表单控件：窄屏下最小 44px 高，iOS 会自动缩放 <40px 的输入框 ---- */
  input[type=text],input[type=password],input[type=email],input[type=tel],
  input[type=number],input[type=date],input[type=search],select,textarea{
    min-height:44px;font-size:16px;   /* 16px 是关键：小于它 iOS Safari 会自动放大页面 */
  }
  textarea{min-height:110px}
  /* iOS 输入框默认有内阴影和圆角，去掉才跟安卓一致 */
  input[type=text],input[type=password],input[type=email],input[type=tel],
  input[type=number],input[type=date],input[type=search],select,textarea{
    -webkit-appearance:none;appearance:none;
  }
  select{
    /* 补一个下拉箭头：去掉 appearance 后原生箭头会消失 */
    background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath fill='%236b7c93' d='M6 8 0 0h12z'/%3E%3C/svg%3E");
    background-repeat:no-repeat;background-position:right 12px center;background-size:10px 7px;
    padding-right:34px;
  }

  /* ---- 按钮：手机上至少 44px 高 ---- */
  .btn{min-height:44px;padding:12px 22px;justify-content:center}
  .btn.s{min-height:38px;padding:9px 16px}
  button[type=submit]{min-height:44px}

  /* ---- 表格：宽表格在手机上要能横向滑，而不是把整页撑破 ---- */
  .tbl-wrap,.table-wrap,.tw{overflow-x:auto;-webkit-overflow-scrolling:touch}
  table.tbl,table.data,.tbl table{width:100%;min-width:520px}

  /* ---- 长串（专利号/DOI/邮箱）在窄屏断行，别横向溢出 ---- */
  .mono,.code,.doi,.patent-no{overflow-wrap:anywhere;word-break:break-word}

  /* ---- 弹窗：窄屏下贴满宽度更好读 ---- */
  .fv-pop{width:auto;max-width:100%;padding:18px 16px}
  .modal,.dlg{width:auto;max-width:100%;margin:12px}

  /* ---- 图片别超出 ---- */
  img{max-width:100%;height:auto}
}

/* ==========================================================================
   🔐 组内管理 · 登录页改版（2026-10-05）
   --------------------------------------------------------------------------
   老师原话：「设计的太简约了」。
   改之前的实测（Playwright 1440×900 截图）：整页 1440px 宽，
   中间只放了一块 max-width:520px 的白卡片，两侧各空掉 400 多像素，
   卡片上下还空着一大片 —— 信息密度低，看着像"没做完"。

   改法：**左右分栏**（不是加花边）。
     左栏 = 品牌 + 课题组信息 + 能干什么（把左边的空白填成有用的信息）
     右栏 = 原来的登录表单，一行代码没动
   桌面两栏 1.05fr / 1fr；≤900px 叠成单栏，左栏收成紧凑横条。
   ⚠️ 左栏文案只放「别处已经公开」的东西，不写任何未授权入口
      （沿用 MEMORY.md 第 6 节「前台文案不许泄露」铁律）。
   ========================================================================== */
.login2col{
  display:grid;grid-template-columns:1.05fr 1fr;gap:0;
  max-width:1060px;margin:0 auto;
  background:#fff;border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:0 18px 50px rgba(16,58,102,.10);overflow:hidden;
}

/* ---------- 左：品牌栏 ---------- */
.login-brand{
  position:relative;padding:44px 40px;
  background:
    radial-gradient(900px 420px at -10% -8%,rgba(255,255,255,.16),transparent 62%),
    linear-gradient(158deg,#0d4f92 0%,#1273c4 48%,#1b8ad9 100%);
  color:#eaf4ff;display:flex;align-items:center;
  overflow:hidden;
}
/* 背景水印：六边形晶格 + 分子点阵，呼应课题组的离子液体/材料背景。
   用纯 CSS 画，不引图片（引图片会多一次请求，登录页要快）。 */
.login-brand::before{
  content:'';position:absolute;inset:0;opacity:.16;pointer-events:none;
  background-image:
    radial-gradient(circle at center,rgba(255,255,255,.9) 1.4px,transparent 1.6px),
    linear-gradient(60deg,rgba(255,255,255,.28) 1px,transparent 1px),
    linear-gradient(-60deg,rgba(255,255,255,.28) 1px,transparent 1px),
    linear-gradient(0deg,rgba(255,255,255,.18) 1px,transparent 1px);
  background-size:34px 34px,68px 39px,68px 39px,68px 68px;
  background-position:0 0,0 0,0 0,0 0;
}
.login-brand::after{           /* 底部渐隐，压住水印不让它抢正文 */
  content:'';position:absolute;left:0;right:0;bottom:0;height:180px;pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(9,64,120,.55));
}
.login-brand-in{position:relative;z-index:2;width:100%}

.login-badge{display:inline-flex;flex-direction:column;gap:2px;margin-bottom:22px}
.login-badge-cn{
  display:inline-block;align-self:flex-start;
  font-size:19px;font-weight:800;letter-spacing:.06em;color:#fff;
  padding:7px 15px;border-radius:999px;
  background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.34);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.28);
}
.login-badge-en{
  font-size:10.5px;letter-spacing:.30em;color:rgba(233,244,255,.80);
  padding-left:3px;font-weight:700;
}
.login-h1{
  font-size:33px;line-height:1.2;color:#fff;margin:0 0 12px;font-weight:800;
  letter-spacing:.02em;text-shadow:0 2px 14px rgba(4,40,78,.32);
}
.login-lead{
  margin:0 0 26px;font-size:14.5px;line-height:1.95;color:rgba(228,241,255,.90);
  max-width:34em;
}

.login-feats{list-style:none;margin:0 0 24px;padding:0;display:grid;gap:11px}
.login-feats li{
  display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:baseline;
  padding:12px 15px;border-radius:12px;
  background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.18);
}
.login-feats b{
  font-size:14px;color:#fff;font-weight:700;white-space:nowrap;
  display:flex;align-items:center;gap:7px;
}
.login-feats b::before{
  content:'';width:6px;height:6px;border-radius:50%;flex:none;
  background:#9fe0ff;box-shadow:0 0 0 3px rgba(159,224,255,.24);
}
.login-feats span{font-size:13px;line-height:1.7;color:rgba(226,239,255,.84)}

.login-note{
  font-size:12.5px;line-height:1.85;color:rgba(224,238,255,.80);
  padding:13px 15px;border-radius:12px;
  background:rgba(4,38,74,.26);border:1px solid rgba(255,255,255,.14);
}
.login-note b{color:#fff;font-weight:700}

/* ---------- 右：表单栏 ---------- */
.login-form-col{display:flex;flex-direction:column;justify-content:center;padding:34px 38px 30px;min-width:0}
/* 表单卡片本身在这个布局里不再需要外框（外框已由 .login2col 提供） */
.login-form-col .bklogin{
  max-width:none;margin:0;border:0;border-radius:0;box-shadow:none;background:transparent;
  padding:0;
}
.login-form-col .bklogin-back{margin-top:18px;padding-top:14px}

/* ---------- 平板 ---------- */
@media (max-width:1000px){
  .login2col{max-width:760px;grid-template-columns:1fr}
  .login-brand{padding:30px 28px 26px}
  .login-h1{font-size:27px;margin-bottom:9px}
  .login-lead{margin-bottom:18px;font-size:13.5px;line-height:1.8}
  .login-feats{grid-template-columns:repeat(3,1fr);gap:9px;margin-bottom:0}
  .login-feats li{grid-template-columns:1fr;gap:5px;padding:11px 13px}
  .login-feats b{font-size:13px}
  .login-feats span{font-size:12px;line-height:1.6}
  .login-note{display:none}          /* 手机上省掉，避免首屏被说明文字占满 */
  .login-form-col{padding:26px 24px 24px}
}

/* ---------- 手机 ---------- */
@media (max-width:640px){
  .login2col{border-radius:16px;box-shadow:0 12px 34px rgba(16,58,102,.12)}
  .login-brand{padding:24px 20px 22px}
  .login-badge{margin-bottom:16px}
  .login-badge-cn{font-size:16px;padding:6px 13px}
  .login-badge-en{font-size:9.5px;letter-spacing:.24em}
  .login-h1{font-size:23px;margin-bottom:8px}
  .login-lead{font-size:13px;line-height:1.75;margin-bottom:16px}
  .login-feats{grid-template-columns:1fr;gap:8px;margin-bottom:0}
  .login-feats li{grid-template-columns:auto 1fr;gap:11px;padding:10px 13px;align-items:center}
  .login-feats b{font-size:13.5px}
  .login-feats span{font-size:12.5px;line-height:1.55}
  .login-form-col{padding:20px 18px 18px}
  .login-form-col .bklogin-head h2{font-size:18px}
}

/* ===== 站内消息：富文本编辑器 / 正文折叠 / 长文本换行（2026-10-05 老师要求）===== */

/* ① 富文本编辑器：工具条 + textarea */
.mrich{border:1px solid #d8e1ec;border-radius:9px;background:var(--white);overflow:hidden}
.mrich:focus-within{border-color:var(--blue);box-shadow:0 0 0 3px rgba(26,86,168,.1)}
.mrich-bar{display:flex;align-items:center;gap:3px;flex-wrap:wrap;padding:5px 6px;
  border-bottom:1px solid var(--line-2);background:#fafcfe}
.mrich-b{border:1px solid transparent;background:transparent;color:var(--ink-2);cursor:pointer;
  font:inherit;font-size:12.5px;padding:3px 9px;border-radius:6px;transition:.14s;line-height:1.5}
.mrich-b:hover{background:var(--blue-50);color:var(--blue);border-color:#cfe2f7}
.mrich-b:active{background:var(--blue);color:#fff}
.mrich-b.is-on{background:#e7f1fb;border-color:#c8ddf2;color:#176eb1;box-shadow:inset 0 0 0 1px rgba(23,110,177,.05)}
.mrich-sep{width:1px;height:16px;background:var(--line);margin:0 3px}
/* 2026-10-05：从 textarea 改成 contenteditable。
   contenteditable 没有 placeholder 属性，用 data-ph + :empty:before 模拟；
   也没有 resize:vertical（那是 textarea 才有的），改用 contenteditable 专用的
   resize 属性（Chrome 114+ 支持；老浏览器忽略即可，用户可用工具条外的拖拽）。 */
.mrich-e{display:block;width:100%;border:0;background:transparent;padding:10px 12px;
  font:inherit;font-size:13.5px;color:var(--ink);line-height:1.85;min-height:210px;outline:none;
  resize:vertical;overflow:auto;word-break:break-word;white-space:pre-wrap;cursor:text;
  user-select:text;-webkit-user-select:text;caret-color:var(--ink)}
/* 占位符：只有真正空（连 <br> 都没有）时才显示 */
.mrich-e:empty:before{content:attr(data-ph);color:var(--muted);pointer-events:none}
.mrich-e:empty{white-space:pre-wrap}
/* 编辑区里跟正文同一套排版：列表要有缩进、加粗要真的加粗 */
.mrich-e ul,.mrich-e ol{margin:6px 0;padding-left:24px}
.mrich-e li{margin:2px 0}
.mrich-e b,.mrich-e strong{font-weight:700}
.mrich-e a{color:var(--blue);text-decoration:underline}
/* 窄屏工具条按钮小一点，避免换行成三排 */
@media(max-width:560px){ .mrich-b{padding:3px 7px;font-size:12px} .mrich-sep{margin:0 1px} }

/* ② 正文折叠：默认收起，只显示标题行 */
.mlog-t{display:inline-flex;align-items:center;gap:6px;border:0;background:transparent;
  font:inherit;color:inherit;cursor:pointer;padding:0;margin:0;text-align:left;min-width:0}
.mlog-t b{font-size:14px;color:var(--navy);word-break:break-word}
/* 标题行 hover 给个「可点」的暗示 */
.mlog-t:hover b{color:var(--blue);text-decoration:underline;text-underline-offset:3px}
.mlog-caret{width:0;height:0;flex:none;border-left:5px solid transparent;
  border-right:5px solid transparent;border-top:6px solid var(--blue);transition:transform .18s;margin-top:2px}
.mlog-t[aria-expanded=true] .mlog-caret{transform:rotate(180deg);margin-top:-4px}
.mmsg-open{flex:none;border:1px solid var(--line);background:var(--white);color:var(--blue);
  font:inherit;font-size:12px;cursor:pointer;padding:1px 9px;border-radius:7px;transition:.14s}
.mmsg-open:hover{background:var(--blue-50);border-color:#cfe2f7}

/* ③ 正文本体：
   ⚠️ `overflow-wrap:anywhere` + `word-break:break-word` 是关键 ——
   原来没有这两条，一长串不换行的字符（截图里 200 多个 3）就把卡片撑破、
   横向溢出到卡片外面去了（老师图2 的现象）。 */
.mlog-b{margin-top:8px;padding:9px 11px;border-radius:8px;background:#fafcfe;
  border:1px solid var(--line-2);
  font-size:13.5px;color:var(--ink-2);line-height:1.85;
  white-space:normal;overflow-wrap:anywhere;word-break:break-word;max-width:100%}
.mlog-b[hidden]{display:none}
.mlog-b b,.mlog-b strong{color:var(--navy)}
.mlog-b a{color:var(--blue);text-decoration:underline;word-break:break-all}
.mlog-b ul,.mlog-b ol{margin:5px 0;padding-left:22px}
.mlog-b li{margin:2px 0}
.mlog-b blockquote{margin:6px 0;padding:5px 10px;border-left:3px solid var(--line);color:var(--muted)}
.mlog-b pre{white-space:pre-wrap;margin:6px 0;padding:7px 9px;background:#f2f6fa;border-radius:6px;
  font-size:12.5px;overflow-wrap:anywhere}
/* 标题行本身也可能被超长内容撑破，同样要能断行 */
.mlog-h{min-width:0}
.mlog-h b{overflow-wrap:anywhere;word-break:break-word}
.mlog-orig{overflow-wrap:anywhere}
.mlog{min-width:0;max-width:100%;overflow:hidden}
.mlog-h .mini{overflow-wrap:anywhere}

/* ④ 回复框里的迷你编辑器 */
.mrich-sm{margin-bottom:8px}
/* 回复框（.mrt-e 是 textarea，不需要 contenteditable 的那些规则） */
.mrt-e{display:block;width:100%;border:1px solid var(--line);border-radius:9px;
  background:var(--white);padding:8px 10px;font:inherit;font-size:13.5px;color:var(--ink);
  line-height:1.8;resize:vertical;min-height:56px;outline:none}
.mrt-e:focus{border-color:var(--blue);box-shadow:0 0 0 3px rgba(26,86,168,.1)}
.mrich-sm .mrt-e{min-height:56px}
@media(max-width:560px){
  .mlog{padding:10px 11px}
  .mlog-h{gap:6px}
  .mmsg-recall,.mmsg-del,.mmsg-open{margin-left:0}
}

/* ===== 站内消息分页（2026-10-05 老师要求：一页最多 5 条）===== */
.mpg{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
  margin:12px 0 4px;padding:9px 4px;border-top:1px solid var(--line-2)}
.mpg-info{color:var(--muted);font-size:12.5px}
.mpg-btns{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.mpg-b{min-width:32px;height:32px;padding:0 10px;border:1px solid var(--line);
  background:var(--white);color:var(--ink-2);border-radius:8px;cursor:pointer;
  font:inherit;font-size:13px;line-height:1;transition:.14s}
.mpg-b:hover:not(:disabled){border-color:var(--blue);color:var(--blue);background:var(--blue-50)}
.mpg-b.on{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:600}
/* 首/末页的「上一页/下一页」：置灰且真的点不动 */
.mpg-b.dis{opacity:.42;cursor:default;background:#f5f7fa}
.mpg-gap{padding:0 2px;color:var(--muted);font-size:12px}
/* 窄屏：信息与按钮分两行，按钮居中 */
@media(max-width:560px){
  .mpg{justify-content:center;text-align:center}
  .mpg-info{width:100%}
  .mpg-b{min-width:30px;height:30px;padding:0 8px;font-size:12.5px}
}

/* ===== 组内论坛互动标注（2026-10-05 老师要求）===== */
/* 帖子页顶部「这条帖子有新互动」条 */
.fnotice{margin:0 0 12px;padding:10px 13px;border:1px solid #cfe2f7;border-radius:10px;
  background:var(--blue-50);font-size:13px;color:var(--navy);line-height:1.9}
.fnotice>b{display:block;margin-bottom:3px;font-size:13px}
.fnotice-i{display:inline-block;margin:0 10px 0 0;padding:1px 8px;border-radius:9px;
  background:#fff;border:1px solid var(--line);color:var(--ink-2);font-size:12.5px}
.fnotice-i.unread{background:#fff;border-color:var(--blue);color:var(--blue);font-weight:600}
/* 列表页：标题旁的未读计数 + 下方「XX 互动过这条」 */
.fnew-dot{display:inline-block;min-width:17px;height:17px;margin-left:7px;padding:0 5px;
  border-radius:9px;background:#e74c3c;color:#fff;font-size:11.5px;line-height:17px;
  text-align:center;font-weight:700;vertical-align:1px}
.frow-mk{margin-top:3px;color:var(--muted);font-size:12px}
.frow.has-new .fr-title{color:var(--navy);font-weight:600}
/* 窄屏：标注条别撑破 */
@media(max-width:560px){
  .fnotice{font-size:12.5px;padding:9px 11px}
  .fnotice-i{margin:0 8px 3px 0}
}

/* ===== 组内论坛 · 新版前台界面（2026-10-06）=====
   保留原功能：版块、发帖、回帖、点赞、附件、置顶/精华/版主操作。只重做视觉和易用性。 */
.fbgrid{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(260px,1fr));
  gap:16px;
}
.fboard{
  position:relative;display:block;min-height:138px;padding:18px 18px 16px 20px;
  border:1px solid #dce9f6;border-radius:18px;background:
    radial-gradient(280px 120px at 100% 0,rgba(45,125,188,.10),transparent 62%),
    linear-gradient(180deg,#fff,#fbfdff);
  box-shadow:0 8px 24px rgba(16,58,102,.06);text-decoration:none;overflow:hidden;
  transition:transform .16s,box-shadow .16s,border-color .16s;
}
.fboard::before{
  content:"";position:absolute;left:0;top:18px;bottom:18px;width:4px;border-radius:4px;
  background:linear-gradient(180deg,var(--blue),#6bb6ef);
}
.fboard:hover{transform:translateY(-3px);box-shadow:0 14px 34px rgba(16,58,102,.12);border-color:#bfd8f1;text-decoration:none}
.fboard .fb-name{font-size:18px;font-weight:800;color:var(--navy);margin-bottom:7px;line-height:1.35}
.fboard .fb-intro{font-size:13.5px;color:var(--ink-2);line-height:1.75;min-height:0}
.fboard .fb-meta{
  display:inline-flex;align-items:center;gap:6px;margin-top:13px;padding:5px 10px;
  border:1px solid #dce9f6;border-radius:999px;background:#f4f9ff;
  font-size:12px;color:var(--blue);font-weight:600;
}
.fboard.fgroup{display:flex;flex-direction:column;gap:10px}
.fb-subs{display:grid;gap:8px;margin-top:2px}
.fb-sub{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:8px 10px;border:1px solid #e1edf8;border-radius:12px;background:#fff;color:var(--ink-2);
  text-decoration:none;transition:.14s;
}
.fb-sub:hover{background:var(--blue-50);border-color:#cfe2f7;color:var(--blue);text-decoration:none}
.fb-sub-nm{font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fb-sub-n{flex:none;font-size:12px;color:var(--muted)}

.fboard-h{
  display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;
  margin:6px 0 16px;padding:18px 20px;border:1px solid #dce9f6;border-radius:18px;
  background:linear-gradient(135deg,#f7fbff,#fff);box-shadow:0 8px 24px rgba(16,58,102,.06);
}
.fboard-h h1{margin:0;font-size:26px;color:var(--navy);line-height:1.25}
.fboard-h p{margin:6px 0 0;color:var(--ink-2);font-size:14px;line-height:1.7}
.fboard-h .btn.p{border-radius:999px;padding-left:20px;padding-right:20px}

.flist{display:flex;flex-direction:column;gap:10px}
.frow{
  position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:16px;
  padding:15px 16px 15px 18px;border:1px solid #dce9f6;border-radius:15px;background:#fff;
  box-shadow:0 5px 16px rgba(16,58,102,.045);text-decoration:none;transition:.15s;
}
.frow::before{
  content:"";position:absolute;left:0;top:12px;bottom:12px;width:3px;border-radius:3px;background:#dce9f6;
}
.frow:hover{transform:translateY(-2px);box-shadow:0 12px 26px rgba(16,58,102,.10);border-color:#c4dcf3;text-decoration:none}
.frow.has-new{border-color:#f0cf91;background:linear-gradient(180deg,#fffdf7,#fff)}
.frow.has-new::before{background:var(--gold)}
.frow .fr-main{min-width:0}
.frow .fr-title{font-size:16px;font-weight:800;color:var(--navy);line-height:1.5;word-break:break-word}
.frow:hover .fr-title{color:var(--blue)}
.frow .fr-meta{margin-top:6px;font-size:12.5px;color:var(--muted)}
.frow .fr-side{
  min-width:86px;text-align:center;font-size:12.5px;color:var(--ink-2);white-space:nowrap;
  display:grid;grid-template-columns:1fr;gap:5px;
}
.frow .fr-side span{
  display:block;margin:0;padding:4px 9px;border-radius:999px;background:#f4f9ff;border:1px solid #e1edf8;
}
.fchp{
  display:inline-flex;align-items:center;vertical-align:2px;margin-right:7px;padding:2px 8px;
  border-radius:999px;background:#eaf4ff;color:var(--blue);font-size:11.5px;font-weight:800;
}
.fchp.d{background:#fff3df;color:#b36b00}
.fnew-dot{vertical-align:2px;box-shadow:0 2px 6px rgba(231,76,60,.22)}
.frow-mk{margin-top:5px;color:#9b6b18;font-size:12px}

.ftopic,.fpost{
  display:grid;grid-template-columns:minmax(0,1fr) 190px;gap:16px;align-items:start;
  border:1px solid #dce9f6;border-radius:18px;background:#fff;padding:18px;
  box-shadow:0 8px 24px rgba(16,58,102,.055);margin-bottom:14px;
}
.ftopic{background:linear-gradient(180deg,#fff,#fbfdff)}
.ftopic.digest{border-color:#f0cf91;background:linear-gradient(180deg,#fffdf7,#fff)}
.ftopic .ft-main,.fpost .ft-main{min-width:0}
.ftopic h1{margin:0 0 10px;font-size:27px;line-height:1.38;color:var(--navy);word-break:break-word}
.ft-meta{
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;color:var(--muted);font-size:12.5px;margin-bottom:12px;
}
.ft-body{
  color:var(--ink);font-size:14.5px;line-height:1.95;word-break:break-word;overflow-wrap:anywhere;
}
.ft-body img{max-width:100%;border-radius:12px}
.ft-acts{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:12px}
.ft-acts .fact{
  display:inline-flex;align-items:center;gap:4px;padding:5px 12px;border:1px solid #dce9f6;
  border-radius:999px;background:#fff;color:var(--ink-2);font-size:12.5px;text-decoration:none;transition:.14s;
}
.ft-acts .fact:hover{border-color:#bcd5f0;background:var(--blue-50);color:var(--blue);text-decoration:none}
.ft-acts .fact.on{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:700}
.ft-acts .fact.danger{color:#c0392b;border-color:#efc7c2}
.ft-acts .fact.danger:hover{background:#fdecec;color:#c0392b;border-color:#c0392b}
.ft-side{grid-column:2;grid-row:1;min-width:0}
.fu{
  border:1px solid #e1edf8;border-radius:16px;background:#f8fbff;padding:13px;text-align:center;
}
.fu img,.fu-av{width:54px;height:54px;border-radius:16px;margin:0 auto 8px;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800;overflow:hidden}
.fu img{object-fit:cover}
.fu-nm{font-size:15px;font-weight:800;color:var(--navy);margin-bottom:5px}
.fu-tags{display:flex;justify-content:center;gap:4px;flex-wrap:wrap;margin:7px 0}
.fut{font-size:11px;border:1px solid currentColor;border-radius:999px;padding:1px 7px;background:#fff}
.fu-meta{margin-top:8px;font-size:11.8px;color:var(--muted);line-height:1.75;text-align:left;word-break:break-all}

.fpost{grid-template-columns:170px minmax(0,1fr);padding:14px}
/* 附件查看页（.ffileview）没有作者卡片 .ft-side，必须让它退化成单列 ——
   否则正文会被塞进上面那 170px 的第一列，PDF 预览被挤成一条窄缝。 */
.fpost.ffileview{grid-template-columns:minmax(0,1fr)}
.fpost .ft-side{grid-column:1;grid-row:1}
.fpost-head{
  display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
  margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid var(--line-2);
}
.freply,.fnew{
  border:1px solid #dce9f6;border-radius:18px;background:#fff;padding:18px;
  box-shadow:0 8px 24px rgba(16,58,102,.055);margin:14px 0;
}
.freply h3{margin:0 0 12px;font-size:18px;color:var(--navy)}

.fed{border:1px solid #dce9f6;border-radius:15px;background:#fff;overflow:hidden}
.fed-tb{
  display:flex;align-items:center;gap:5px;flex-wrap:wrap;padding:8px;
  border-bottom:1px solid #e7f0f8;background:#f8fbff;
}
.fed-tb button,.fed-cbtn,.fed-sel{
  min-height:32px;border:1px solid #dce9f6;border-radius:9px;background:#fff;color:var(--ink-2);
  font:inherit;font-size:12.5px;padding:5px 9px;cursor:pointer;
}
.fed-tb button:hover,.fed-cbtn:hover{background:var(--blue-50);color:var(--blue);border-color:#cfe2f7}
.fed-body{
  min-height:150px;padding:13px 14px;outline:none;font-size:14px;line-height:1.9;color:var(--ink);
}
.fed-body:empty:before{content:attr(data-ph);color:var(--muted)}
.fed-attach-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:9px 12px;border-top:1px solid #e7f0f8;background:#fbfdff}
.fed-attbtn{border:1px solid #dce9f6;border-radius:999px;background:#fff;color:var(--blue);padding:6px 12px;cursor:pointer}
.fatts,.fed-attach-list{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.fatt,.fa-row{
  display:inline-flex;align-items:center;gap:6px;max-width:100%;padding:6px 10px;
  border:1px solid #dce9f6;border-radius:999px;background:#f8fbff;font-size:12.5px;color:var(--ink-2);
}
.fatt a{color:var(--blue);text-decoration:none}
.fatt-nm{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* 2026-10-06：论坛附件名要完整显示。
   之前为了做胶囊标签把文件名限制为 220px 单行省略，长 PDF 名称会看不全。 */
.fatt,.fa-row{align-items:flex-start;border-radius:12px}
.fatt-open{align-items:flex-start;min-width:0;white-space:normal}
.fatt-nm{
  max-width:none;
  white-space:normal;
  overflow:visible;
  text-overflow:clip;
  overflow-wrap:anywhere;
  word-break:break-word;
  line-height:1.55;
}
.fatt-sz,.fatt-dl{margin-top:1px}
.ffv-title{overflow-wrap:anywhere;word-break:break-word}

@media(max-width:760px){
  .fboard-h{align-items:flex-start}
  .fboard-h .btn.p{width:100%;justify-content:center}
  .frow{grid-template-columns:1fr;gap:10px}
  .frow .fr-side{grid-template-columns:repeat(2,max-content);justify-content:start;text-align:left}
  .ftopic,.fpost{grid-template-columns:1fr;padding:14px}
  .ft-side,.fpost .ft-side{grid-column:auto;grid-row:auto}
  .fu{text-align:left;display:grid;grid-template-columns:54px minmax(0,1fr);gap:8px 10px;align-items:center}
  .fu img,.fu-av{grid-row:1/4;margin:0}
  .fu-tags,.fu-meta{grid-column:2;justify-content:flex-start;text-align:left;margin:0}
  .ftopic h1{font-size:22px}
}


/* ===== 组内管理工作台：仅顶部与侧栏 2026-10-06 ===== */
body.page-lab{
  --lab-line:#dbe8f5;
  --lab-soft:#f4f8fd;
  --lab-shadow:0 10px 30px rgba(16,58,102,.07);
}
body.page-lab .pb{
  padding:36px 0 8px;
  background:linear-gradient(180deg,#fbfdff 0%,#f5f9fe 100%);
  border-bottom:1px solid #e6eef7;
}
body.page-lab .pb h1{font-size:34px}
body.page-lab .tabs.lab-tabs{
  gap:6px;padding:7px;margin:4px 0 18px;
  border:1px solid rgba(210,226,241,.96);border-radius:16px;
  background:#fff;box-shadow:0 10px 28px rgba(16,58,102,.08);
}
body.page-lab .tabs.lab-tabs .tab{
  min-height:42px;padding:0 18px;border-radius:11px;
  border-color:transparent;background:transparent;font-size:14px;
}
body.page-lab .tabs.lab-tabs .tab:hover:not(.on){background:#eef5fc;color:var(--blue);border-color:transparent}
body.page-lab .tabs.lab-tabs .tab.tab-mine:not(.on){color:var(--blue);font-weight:700;border-color:#cfe2f7;background:var(--blue-50)}
body.page-lab .tabs.lab-tabs .tab.on{
  background:linear-gradient(135deg,var(--blue),var(--blue-2));color:#fff;
  border-color:transparent;font-weight:700;box-shadow:0 7px 18px rgba(30,111,196,.24)}
body.page-lab .lab-user-tools{
  margin-left:auto;padding:7px 12px;border:1px solid #dce8f4;border-radius:12px;
  background:#f4f9fe;color:#395875;
}
body.page-lab .lab-user-tools b{color:var(--navy)}
body.page-lab .lab-content{min-width:0}
body.page-lab .lab-member-nav{padding:7px;margin-bottom:18px;border-radius:16px;border-color:#dce8f4;background:#fff}
body.page-lab .lab-member-link{min-height:40px;padding:0 18px;border-radius:11px;font-size:14px}
body.page-lab .pc-mine{grid-template-columns:260px minmax(0,1fr);gap:22px}
body.page-lab .mine-nav{
  top:104px;padding:12px;border-radius:16px;border-color:#dbe7f3;
  background:linear-gradient(180deg,#fff,#fbfdff);box-shadow:0 10px 30px rgba(16,58,102,.065);
}
body.page-lab .mine-me{padding:6px 6px 12px;margin-bottom:10px;border-bottom-color:#e7eff7}
body.page-lab .mine-me .av{width:42px;height:42px;flex-basis:42px}
body.page-lab .mn-i{border-radius:11px;padding:10px 11px 10px 13px}
body.page-lab .mn-i.on{background:linear-gradient(135deg,#edf5fd,#f8fbff);box-shadow:inset 0 0 0 1px #d9e9f8}
body.page-lab .mn-i.on::before{background:linear-gradient(180deg,var(--blue),var(--blue-2))}
body.page-lab .mine-hd{
  position:relative;overflow:visible;margin-bottom:16px;padding:20px 22px;
  border-radius:16px;box-shadow:0 12px 30px rgba(14,47,82,.16);
  background:radial-gradient(520px 180px at 94% 0,rgba(99,179,237,.30),transparent 60%),linear-gradient(125deg,#0f3157 0%,#174f83 56%,#1f6fae 100%);
}
body.page-lab .mine-hd::after{
  content:"";position:absolute;right:-44px;top:-62px;width:220px;height:220px;
  border-radius:50%;border:1px solid rgba(255,255,255,.16);
  box-shadow:0 0 0 34px rgba(255,255,255,.035);
}
body.page-lab .mine-hd>*{position:relative;z-index:1}
body.page-lab .mine-hd .mini{color:#c5def3}
@media(max-width:900px){
  body.page-lab .pc-mine{grid-template-columns:minmax(0,1fr);gap:14px}
  body.page-lab .mine-nav{top:auto;padding:8px}
  body.page-lab .mine-hd{padding:17px 18px;border-radius:14px}
}

/* ===== 写消息 · 收件人选择器新版 2026-10-06 ===== */
body.page-lab .mto-field{display:block}
body.page-lab .mto-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}
body.page-lab .mto-label{font-size:12.5px;font-weight:700;color:var(--ink-2)}
body.page-lab .mto-label .tip{display:inline;font-weight:400;color:var(--muted);margin-left:6px}
body.page-lab .mto-count{
  display:inline-flex;align-items:center;padding:2px 9px;border:1px solid #d4e6f8;
  border-radius:999px;background:#eef6fd;color:#22609a;font-size:12px;font-weight:700;line-height:1.7}
body.page-lab .mwrap{position:relative;display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap}
body.page-lab .mto-btn{
  display:inline-flex;align-items:center;gap:8px;height:40px;padding:0 14px;
  border:1px solid #cfe2f7;border-radius:11px;background:var(--blue-50);
  color:#2367a6;font:inherit;font-size:13.5px;font-weight:700;cursor:pointer;transition:.18s}
body.page-lab .mto-btn:hover{border-color:var(--blue-2);background:#eaf4fd}
body.page-lab .mto-btn.on{
  background:linear-gradient(135deg,var(--blue),var(--blue-2));
  border-color:transparent;color:#fff;box-shadow:var(--sh-blue)}
body.page-lab .mto-btn-plus{
  width:20px;height:20px;border-radius:6px;background:rgba(30,111,196,.12);
  display:inline-flex;align-items:center;justify-content:center;font-size:15px;line-height:1}
body.page-lab .mto-btn.on .mto-btn-plus{background:rgba(255,255,255,.20)}
body.page-lab .mto-caret{
  width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;
  border-top:6px solid currentColor;transition:transform .18s;opacity:.85}
body.page-lab .mto-btn.on .mto-caret{transform:rotate(180deg)}
body.page-lab .mpicked{
  flex:1 1 260px;display:flex;align-items:center;flex-wrap:wrap;gap:6px;
  min-height:40px;padding:4px 0}
body.page-lab .mpicked .mini{padding:0 4px}
body.page-lab .picked-tag{
  display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 8px 0 11px;
  border:1px solid #cfe2f7;border-radius:999px;background:#eef6fd;color:#2367a6;
  font-size:12.5px;font-weight:600;margin:0}
body.page-lab .picked-tag .pt-x{
  width:19px;height:19px;display:inline-flex;align-items:center;justify-content:center;
  border-radius:50%;color:#2367a6;padding:0;font-size:15px;line-height:1}
body.page-lab .picked-tag .pt-x:hover{background:#d8eaf9;color:var(--err)}
body.page-lab .mpanel{
  position:absolute;left:0;right:0;top:calc(100% + 10px);z-index:90;
  width:min(100%,760px);max-height:min(68vh,560px);
  display:flex;flex-direction:column;padding:0;overflow:hidden;
  border:1px solid #d4e3f2;border-radius:16px;background:#fff;
  box-shadow:0 18px 48px rgba(14,47,82,.18)}
body.page-lab .mpanel[hidden]{display:none!important}
body.page-lab .mpanel-head{
  display:flex;align-items:center;gap:12px;padding:13px 15px;
  border-bottom:1px solid #e2ebf4;background:linear-gradient(180deg,#fbfdff,#f5f9fd)}
body.page-lab .mpanel-title{display:flex;flex-direction:column;gap:2px;min-width:170px}
body.page-lab .mpanel-title b{color:var(--navy);font-size:14.5px}
body.page-lab .mpanel-title .mini{font-size:11.5px;color:var(--muted)}
body.page-lab .mpanel-search{
  flex:1 1 220px;min-width:180px;height:38px;padding:0 12px;
  border:1px solid #d8e4ef;border-radius:10px;background:#fff;font-size:13px}
body.page-lab .mpanel-actions{
  display:flex;align-items:center;gap:8px;padding:10px 15px;
  border-bottom:1px solid #e6edf5;background:#fbfdff}
body.page-lab .mpanel-now{margin-left:auto;color:#5d7188;font-size:12.5px;white-space:nowrap}
body.page-lab .mpanel-list{max-height:420px;overflow-y:auto;padding:10px 15px 15px;background:#f8fbfe}
body.page-lab .mp-group{
  margin-bottom:11px;border:1px solid #e0e9f3;border-radius:13px;
  background:#fff;overflow:hidden}
body.page-lab .mp-group[hidden],body.page-lab .mp-item[hidden]{display:none!important}
body.page-lab .mp-ghead{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin:0;padding:10px 12px;border:0;border-bottom:1px solid #e5edf5;
  background:#f4f8fc;cursor:pointer}
body.page-lab .mp-ghead label{display:flex;align-items:center;gap:8px;cursor:pointer;color:var(--navy)}
body.page-lab .mp-ghead input{width:16px;height:16px;accent-color:var(--blue);cursor:pointer}
body.page-lab .mp-ghead b{font-size:13.5px}
body.page-lab .mp-ghead .mini{font-size:11.5px;color:#72869b}
body.page-lab .mp-gcount{
  padding:2px 8px;border:1px solid #d4e6f8;border-radius:999px;
  background:#eaf4fd;color:#2367a6;font-size:11.5px;white-space:nowrap}
body.page-lab .mpick{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));
  gap:7px;min-height:0;padding:10px;border:0;border-radius:0;background:#fff}
body.page-lab .mp-item{
  display:flex;align-items:center;justify-content:center;width:100%;min-height:36px;
  padding:7px 9px;border:1px solid #dbe7f3;border-radius:10px;background:#fff;
  color:var(--ink-2);font:inherit;font-size:13px;cursor:pointer;transition:.16s}
body.page-lab .mp-item:hover{border-color:var(--blue-2);background:var(--blue-50);color:var(--blue)}
body.page-lab .mp-item.on{
  background:linear-gradient(135deg,var(--blue),var(--blue-2));
  border-color:transparent;color:#fff;font-weight:600;
  box-shadow:0 5px 14px rgba(30,111,196,.18)}
body.page-lab .mp-item.on::after{content:"✓";margin-left:6px;font-size:12px}
body.page-lab .mp-item-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:800px){
  body.page-lab .mpanel{
    position:fixed;top:72px;left:12px;right:12px;width:auto;
    max-height:calc(100vh - 88px)}
  body.page-lab .mpanel-head{align-items:stretch;flex-direction:column;gap:8px}
  body.page-lab .mpanel-title{min-width:0}
  body.page-lab .mpanel-actions{flex-wrap:wrap}
  body.page-lab .mpanel-now{order:4;width:100%;margin-left:0}
  body.page-lab .mpanel-list{max-height:none}
  body.page-lab .mpick{grid-template-columns:repeat(2,minmax(0,1fr))}
  body.page-lab .mpicked{flex-basis:100%}
}


/* ===== 收件人选择器：紧凑版 2026-10-06 ===== */
body.page-lab .mpanel-head{padding:10px 13px}
body.page-lab .mpanel-actions{padding:8px 13px}
body.page-lab .mpanel-list{padding:8px 12px 12px}
body.page-lab .mp-group{margin-bottom:8px}
body.page-lab .mp-ghead{
  display:flex!important;flex-direction:row!important;align-items:center!important;
  justify-content:space-between!important;flex-wrap:nowrap!important;
  min-height:38px;margin:0!important;padding:8px 10px!important;gap:8px}
body.page-lab .mp-ghead label{
  display:inline-flex!important;flex-direction:row!important;align-items:center!important;
  flex-wrap:nowrap!important;gap:7px!important;width:auto!important;margin:0!important;
  padding:0!important;line-height:1.25!important}
body.page-lab .mp-ghead input{flex:0 0 16px!important;width:16px!important;height:16px!important}
body.page-lab .mp-ghead b{font-size:13px;white-space:nowrap}
body.page-lab .mp-ghead .mini{font-size:11.5px;color:#72869b;white-space:nowrap}
body.page-lab .mp-gcount{padding:2px 7px;font-size:11px}
body.page-lab .mpick{gap:6px;padding:8px}
body.page-lab .mp-item{min-height:32px;padding:5px 8px;font-size:12.5px}
body.page-lab .mpanel-search{height:34px}
body.page-lab .mpanel-title b{font-size:14px}
body.page-lab .mpanel-title .mini{display:none}
@media(max-width:800px){
  body.page-lab .mp-ghead{min-height:36px;padding:7px 9px!important}
  body.page-lab .mp-ghead label{gap:6px!important}
  body.page-lab .mp-item{min-height:34px;font-size:13px}
}


/* ===== 站内消息发送提醒弹窗 2026-10-06 ===== */
body.page-lab .lab-notice-mask{
  position:fixed;inset:0;z-index:1200;display:flex;align-items:center;justify-content:center;
  padding:20px;background:rgba(12,31,52,.32);backdrop-filter:blur(4px);
  opacity:0;transition:opacity .18s}
body.page-lab .lab-notice-mask.show{opacity:1}
body.page-lab .lab-notice-mask.out{opacity:0}
body.page-lab .lab-notice-card{
  position:relative;width:min(380px,94vw);padding:26px 24px 20px;
  border:1px solid rgba(211,225,239,.96);border-radius:20px;background:#fff;
  box-shadow:0 24px 70px rgba(9,30,56,.25);text-align:center;overflow:hidden;
  transform:translateY(10px) scale(.97);transition:transform .2s,opacity .18s}
body.page-lab .lab-notice-mask.show .lab-notice-card{transform:translateY(0) scale(1)}
body.page-lab .lab-notice-mask.out .lab-notice-card{transform:translateY(6px) scale(.98);opacity:.35}
body.page-lab .lab-notice-card::before{
  content:"";position:absolute;left:0;right:0;top:0;height:4px;
  background:linear-gradient(90deg,var(--blue),var(--blue-2))}
body.page-lab .lab-notice-card.bad::before{
  background:linear-gradient(90deg,#e2a33b,#d97706)}
body.page-lab .lab-notice-ic{
  width:56px;height:56px;margin:0 auto 14px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  font-size:28px;font-weight:800;line-height:1}
body.page-lab .lab-notice-card.ok .lab-notice-ic{
  background:#e8f8f0;border:1px solid #bfe7d3;color:#16865a;
  box-shadow:0 8px 22px rgba(22,134,90,.12)}
body.page-lab .lab-notice-card.bad .lab-notice-ic{
  background:#fff4e5;border:1px solid #f2d3a0;color:#c47b13;
  box-shadow:0 8px 22px rgba(196,123,19,.12)}
body.page-lab .lab-notice-t{
  color:var(--navy);font-size:19px;font-weight:800;line-height:1.35;margin-bottom:8px}
body.page-lab .lab-notice-b{
  color:var(--ink-2);font-size:14px;line-height:1.8;word-break:break-word}
body.page-lab .lab-notice-ok{
  width:100%;justify-content:center;margin-top:18px;height:40px;border-radius:11px}
@media(max-width:480px){
  body.page-lab .lab-notice-mask{padding:14px}
  body.page-lab .lab-notice-card{padding:22px 18px 17px;border-radius:17px}
  body.page-lab .lab-notice-ic{width:50px;height:50px;font-size:25px;margin-bottom:12px}
  body.page-lab .lab-notice-t{font-size:18px}
}


/* ===== 组内论坛首页门户版 2026-10-06 ===== */
body.page-lab .forum-crumb{margin:2px 0 10px;color:#63778d}
body.page-lab .forum-crumb a{color:#395872}
body.page-lab .forum-hero{
  position:relative;overflow:visible;display:grid;grid-template-columns:minmax(0,1fr) 220px;
  gap:22px;align-items:center;margin:4px 0 18px;padding:28px 30px;
  border:1px solid rgba(199,220,240,.82);border-radius:22px;color:#fff;
  background:
    radial-gradient(520px 220px at 90% 0,rgba(88,174,239,.34),transparent 64%),
    linear-gradient(126deg,#0e3157 0%,#174f83 56%,#2575b4 100%);
  box-shadow:0 18px 44px rgba(13,48,84,.16)}
body.page-lab .forum-hero::before{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:.28;
  background-image:radial-gradient(circle at center,rgba(255,255,255,.7) 1px,transparent 1.5px);
  background-size:26px 26px}
body.page-lab .forum-hero-copy{position:relative;z-index:1;max-width:760px}
body.page-lab .forum-kicker{
  display:inline-flex;align-items:center;gap:7px;margin-bottom:9px;
  color:#bcdcf5;font-size:11px;font-weight:800;letter-spacing:.18em}
body.page-lab .forum-kicker::before{content:"";width:20px;height:2px;border-radius:2px;background:#76c6f4}
body.page-lab .forum-hero h2{
  margin:0;color:#fff;font-size:34px;line-height:1.2;letter-spacing:-.02em}
body.page-lab .forum-hero p{
  max-width:650px;margin:10px 0 0;color:#d6e9f7;font-size:14px;line-height:1.85}
body.page-lab .forum-hero-stats{display:flex;flex-wrap:wrap;gap:8px;margin-top:17px}
body.page-lab .forum-hero-stats span{
  display:inline-flex;align-items:baseline;gap:5px;padding:6px 11px;border-radius:999px;
  border:1px solid rgba(255,255,255,.20);background:rgba(255,255,255,.10);
  color:#e7f4fd;font-size:12px}
body.page-lab .forum-hero-stats b{color:#fff;font-size:16px;font-weight:800}
body.page-lab .forum-hero-art{position:relative;height:150px}
body.page-lab .forum-hero-art i{
  position:absolute;display:block;border-radius:50%;border:1px solid rgba(255,255,255,.22);
  box-shadow:0 0 0 18px rgba(255,255,255,.035)}
body.page-lab .forum-hero-art i:nth-child(1){width:120px;height:120px;right:30px;top:2px}
body.page-lab .forum-hero-art i:nth-child(2){width:78px;height:78px;right:8px;top:56px;background:rgba(255,255,255,.08)}
body.page-lab .forum-hero-art i:nth-child(3){width:26px;height:26px;right:104px;top:88px;background:#70c7f3;border-color:transparent}
body.page-lab .forum-section-head{
  display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin:22px 0 12px}
body.page-lab .forum-section-head>div{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap}
body.page-lab .forum-section-head b{color:var(--navy);font-size:17px}
body.page-lab .forum-section-head span{color:var(--muted);font-size:12.5px}
body.page-lab .forum-post-shortcut{
  display:inline-flex;align-items:center;padding:8px 14px;border:1px solid #cfe2f7;border-radius:999px;
  background:#fff;color:var(--blue);font-size:13px;font-weight:700;text-decoration:none;transition:.16s}
body.page-lab .forum-post-shortcut:hover{background:var(--blue-50);border-color:var(--blue);text-decoration:none}
body.page-lab .forum-board-grid{counter-reset:forumBoard;gap:14px}
body.page-lab .forum-board-grid>.fboard{
  counter-increment:forumBoard;min-height:158px;padding:20px 20px 17px;border-radius:18px;
  border-color:#d9e8f5;background:
    radial-gradient(260px 120px at 100% 0,rgba(45,125,188,.11),transparent 64%),
    linear-gradient(180deg,#fff,#f9fcff)}
body.page-lab .forum-board-grid>.fboard::after{
  content:counter(forumBoard,decimal-leading-zero);position:absolute;right:17px;top:15px;
  color:#a5bfd6;font-size:12px;font-weight:800;letter-spacing:.12em}
body.page-lab .forum-board-grid>.fboard .fb-name{
  padding-right:34px;font-size:18.5px;letter-spacing:-.01em}
body.page-lab .forum-board-grid>.fboard .fb-name a{color:inherit}
body.page-lab .forum-board-grid>.fboard .fb-intro{color:#536b82;line-height:1.75}
body.page-lab .forum-board-grid>.fboard .fb-meta{
  border-color:#d9e9f7;background:#f4f9ff;color:#286ca8}
body.page-lab .forum-board-grid>.fboard.fgroup .fb-subs{margin-top:10px}
body.page-lab .forum-board-grid .fb-sub{border-radius:11px;background:#fbfdff}
body.page-lab .forum-board-grid .fb-sub:hover{background:var(--blue-50)}
@media(max-width:760px){
  body.page-lab .forum-hero{grid-template-columns:1fr;padding:22px 19px;border-radius:17px}
  body.page-lab .forum-hero h2{font-size:28px}
  body.page-lab .forum-hero-art{display:none}
  body.page-lab .forum-section-head{align-items:flex-start;flex-direction:column}
  body.page-lab .forum-post-shortcut{width:100%;justify-content:center}
}


/* ===== 个人中心右侧论坛常住入口 + 导航遮挡修正 2026-10-06 ===== */
body.page-lab .tabs.lab-tabs{
  background:#fff;backdrop-filter:none;
  border-color:#d7e5f2;border-radius:0 0 16px 16px;
  box-shadow:0 1px 0 #e2ecf6,0 8px 20px rgba(16,58,102,.10)}
body.page-lab .mine-forum-dock{
  position:fixed;right:18px;top:calc(50% + 38px);z-index:65;
  display:flex;flex-direction:column;align-items:center;gap:6px;width:76px;
  padding:12px 8px 10px;border:1px solid #cfe2f7;border-radius:18px;
  background:linear-gradient(180deg,#fff,#f3f9ff);color:#2367a6;
  box-shadow:0 12px 30px rgba(16,58,102,.15);text-decoration:none;
  transform:translateY(-50%);transition:.18s}
body.page-lab .mine-forum-dock:hover{
  color:var(--blue);border-color:#9fc8ed;background:#f1f8ff;
  box-shadow:0 16px 36px rgba(16,58,102,.20);transform:translateY(-50%) translateX(-2px);
  text-decoration:none}
body.page-lab .mfd-ic{
  width:38px;height:38px;border-radius:12px;display:flex;align-items:center;justify-content:center;
  background:#eaf4fd;border:1px solid #d2e7f9;color:#2367a6}
body.page-lab .mfd-svg{width:21px;height:21px}
body.page-lab .mfd-tx{font-size:12px;font-weight:800;white-space:nowrap}
body.page-lab .mfd-dot{
  position:absolute;right:7px;top:6px;min-width:18px;height:18px;padding:0 5px;
  border-radius:9px;background:#d93b3b;color:#fff;font-size:11px;font-weight:800;font-style:normal;
  display:inline-flex;align-items:center;justify-content:center;box-shadow:0 2px 6px rgba(217,59,59,.32)}
body.page-lab .mfd-dot[hidden]{display:none!important}
@media(min-width:1000px){body.page-lab .pc-mine{padding-right:70px}}
@media(max-width:900px){
  body.page-lab .mine-forum-dock{
    right:12px;bottom:16px;top:auto;width:52px;height:52px;padding:0;
    border-radius:16px;justify-content:center;transform:none}
  body.page-lab .mine-forum-dock:hover{transform:translateY(-2px)}
  body.page-lab .mfd-ic{width:34px;height:34px;border:0;background:transparent}
  body.page-lab .mfd-tx{display:none}
}


/* ===== 组内管理：非遮挡布局最终版 2026-10-06 ===== */
/* 顶部页签不再吸顶，只随页面正常滚动，避免滚动时压在论坛内容上。 */
body.page-lab .tabs.lab-tabs{
  position:static;top:auto;z-index:auto;margin:0 0 18px;
  background:#fff;border-color:#d9e7f4;border-radius:15px;
  box-shadow:0 7px 20px rgba(16,58,102,.07);backdrop-filter:none}
body.page-lab .lab-member-nav{
  position:static;top:auto;z-index:auto;
  box-shadow:0 6px 18px rgba(16,58,102,.055)}
/* 个人中心第三列常驻论坛入口：占用自己的网格列，不悬浮覆盖正文。 */
body.page-lab .pc-mine{
  grid-template-columns:260px minmax(0,1fr) 76px;
  gap:18px;padding-right:0}
body.page-lab .mine-forum-dock{
  position:sticky;right:auto;top:96px;transform:none;
  grid-column:3;grid-row:1;align-self:start;
  width:76px;margin:0;padding:12px 8px 10px;
  border-radius:18px;background:linear-gradient(180deg,#fff,#f3f9ff);
  box-shadow:0 12px 30px rgba(16,58,102,.15)}
body.page-lab .mine-forum-dock:hover{transform:translateY(-2px)}
body.page-lab .mfd-tx{display:block;text-align:center;line-height:1.25}
@media(max-width:1100px){
  body.page-lab .pc-mine{grid-template-columns:236px minmax(0,1fr)}
  body.page-lab .mine-forum-dock{
    grid-column:1/-1;grid-row:1;order:-1;position:static;top:auto;
    width:auto;min-height:48px;flex-direction:row;justify-content:center;gap:9px;
    padding:9px 13px;border-radius:13px}
  body.page-lab .mfd-ic{width:32px;height:32px}
  body.page-lab .mfd-tx{display:inline;text-align:left}
}
@media(max-width:900px){
  body.page-lab .pc-mine{grid-template-columns:minmax(0,1fr)}
  body.page-lab .mine-forum-dock{grid-column:1;width:auto}
}


/* ===== 论坛左侧常驻个人中心导航 2026-10-06 ===== */
body.page-lab .forum-page-wrap{position:relative;max-width:1400px}
body.page-lab .forum-mine-rail{
  width:190px;padding:10px;border:1px solid #dce8f4;border-radius:17px;
  background:linear-gradient(180deg,#fff,#fbfdff);
  box-shadow:0 10px 28px rgba(16,58,102,.075)}
body.page-lab .fmr-user{display:flex;align-items:center;gap:9px;padding:6px 6px 11px}
body.page-lab .fmr-av{
  width:38px;height:38px;flex:0 0 38px;border-radius:12px;display:flex;align-items:center;justify-content:center;
  color:#fff;font-size:15px;font-weight:800;box-shadow:0 6px 14px rgba(16,58,102,.14)}
body.page-lab .fmr-user b{display:block;color:var(--navy);font-size:14px;line-height:1.35}
body.page-lab .fmr-user span{display:block;color:var(--muted);font-size:11.5px;margin-top:2px}
body.page-lab .fmr-sep{height:1px;margin:2px 4px 8px;background:var(--line-2)}
body.page-lab .fmr-i{
  position:relative;display:flex;align-items:center;gap:9px;width:100%;padding:9px 10px;
  border-radius:11px;color:var(--ink-2);font-size:13.5px;text-decoration:none;transition:.15s}
body.page-lab .fmr-i:hover{background:var(--blue-50);color:var(--navy);text-decoration:none}
body.page-lab .fmr-i.on{
  background:linear-gradient(135deg,var(--blue),var(--blue-2));color:#fff;font-weight:700;
  box-shadow:0 6px 16px rgba(30,111,196,.20)}
body.page-lab .fmr-i svg{width:18px;height:18px;flex:0 0 18px;fill:none;stroke:currentColor;
  stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
body.page-lab .fmr-dot{
  margin-left:auto;min-width:18px;height:18px;padding:0 5px;border-radius:9px;
  background:#d93b3b;color:#fff;font-size:11px;font-weight:800;font-style:normal;
  display:inline-flex;align-items:center;justify-content:center}
body.page-lab .forum-page-wrap>.lab-member-nav{display:none}
@media(min-width:1180px){
  body.page-lab .forum-page-wrap{
    display:grid;grid-template-columns:190px minmax(0,1fr);gap:18px;
    align-items:start;padding-left:0}
  body.page-lab .forum-page-wrap>:not(.forum-mine-rail){grid-column:2;min-width:0}
  body.page-lab .forum-mine-rail{
    position:sticky;top:96px;grid-column:1;grid-row:1 / span 50;align-self:start;z-index:20;
    width:190px;max-height:calc(100vh - 120px);overflow-y:auto}
}
@media(max-width:1179px){
  body.page-lab .forum-page-wrap{display:block;padding-left:0}
  body.page-lab .forum-mine-rail{
    display:flex;align-items:center;gap:7px;width:100%;max-width:100%;padding:7px;margin-bottom:14px;
    overflow-x:auto;overflow-y:hidden;border-radius:13px;white-space:nowrap}
  body.page-lab .forum-mine-rail::-webkit-scrollbar{height:6px}
  body.page-lab .fmr-user,body.page-lab .fmr-sep{display:none}
  body.page-lab .fmr-i{width:auto;flex:0 0 auto;padding:8px 11px;border-radius:999px;background:#f4f9fe}
  body.page-lab .fmr-i.on{background:var(--blue)}
}


/* ===== 论坛复用个人中心侧栏最终版 2026-10-06 ===== */
body.page-lab .forum-page-wrap{display:block;max-width:var(--max);padding-left:0}
body.page-lab .forum-mine-rail{display:none!important}
body.page-lab .forum-pc-mine{
  grid-template-columns:260px minmax(0,1fr);gap:22px;padding-right:0}
body.page-lab .forum-mine-nav{
  position:sticky;top:104px;padding:12px;border-radius:16px;border-color:#dbe7f3;
  background:linear-gradient(180deg,#fff,#fbfdff);
  box-shadow:0 10px 30px rgba(16,58,102,.065)}
body.page-lab .forum-mine-main{min-width:0}
@media(max-width:1100px){
  body.page-lab .forum-pc-mine{grid-template-columns:minmax(0,1fr);gap:14px}
  body.page-lab .forum-mine-nav{position:static;top:auto;padding:8px;border-radius:14px}
  body.page-lab .forum-mine-nav .mine-nav-scroll{display:flex;flex-wrap:nowrap;overflow-x:auto;gap:6px;padding:2px}
  body.page-lab .forum-mine-nav .mn-i{width:auto;flex:0 0 auto;padding:8px 12px;border-radius:999px;white-space:nowrap}
  body.page-lab .forum-mine-nav .mn-sep{display:none}
  body.page-lab .forum-mine-nav .mn-out{display:flex;margin-top:8px;padding-top:8px;border-top:1px solid var(--line-2)}
}


/* ===== 面包屑当前栏目胶囊 2026-10-06 ===== */
body .crumb-current{
  display:inline-flex;align-items:center;min-height:26px;padding:2px 11px;margin:0 0 0 2px;
  border:1px solid transparent;border-radius:999px;color:#fff;font-weight:800;line-height:1.35;
  background:linear-gradient(135deg,var(--blue),var(--blue-2));
  box-shadow:0 4px 12px rgba(30,111,196,.20);text-decoration:none}
@media(max-width:600px){
  body .crumb-current{min-height:24px;padding:1px 9px;font-size:12.5px}
}


/* ===== 页头英文名固定跟在中文标题右侧 2026-10-06 ===== */
body .pb h1 .pb-en{
  display:inline!important;margin:0 0 0 14px!important;vertical-align:middle;
  white-space:nowrap}
@media(max-width:600px){
  body .pb h1 .pb-en{margin-left:9px!important;font-size:12.5px}
}


/* ===== 个人中心顶部用户概览卡 2026-10-06 ===== */
body.page-lab .mine-hd{
  display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:24px;
  padding:20px 22px}
body.page-lab .mine-hd-main{display:flex;align-items:center;gap:16px;min-width:0}
body.page-lab .mine-hd .av{
  width:58px;height:58px;flex:0 0 58px;border-radius:17px;font-size:19px;
  box-shadow:0 10px 24px rgba(0,0,0,.16)}
body.page-lab .mine-hd-t{min-width:0}
body.page-lab .mine-hd h3{font-size:22px;margin:0 0 3px}
body.page-lab .mine-hd .mini{font-size:13px;color:#c5def3}
body.page-lab .mine-hd-stats{
  display:flex;align-items:stretch;gap:8px;position:relative;z-index:1}
body.page-lab .mine-hd-stats>span,
body.page-lab .mine-hd-stats>a{
  min-width:82px;padding:9px 11px;border-radius:12px;text-align:center;text-decoration:none;
  border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.10)}
body.page-lab .mine-hd-stats>a{color:#fff;transition:.16s}
body.page-lab .mine-hd-stats>a:hover{background:rgba(255,255,255,.18);transform:translateY(-1px)}
body.page-lab .mine-hd-stats b{
  display:block;color:#fff;font-size:20px;line-height:1.15;font-weight:800}
body.page-lab .mine-hd-stats small{
  display:block;margin-top:2px;color:#c7e1f5;font-size:11.5px;white-space:nowrap}
@media(max-width:700px){
  body.page-lab .mine-hd{grid-template-columns:1fr;gap:14px;padding:17px 18px}
  body.page-lab .mine-hd-stats{width:100%;overflow-x:auto;padding-bottom:1px}
  body.page-lab .mine-hd-stats>span{flex:1 0 84px}
}


/* ===== 个人中心侧栏标题标签 2026-10-06 ===== */
.mine-me-title{
  margin-left:auto;padding:3px 9px;border:1px solid #dbeafe;border-radius:999px;
  background:var(--blue-50);color:var(--blue);font-size:11.5px;font-weight:700;white-space:nowrap}


/* ===== 我的资料新版 2026-10-06 ===== */
body.page-lab .mprof-shell{
  display:grid;grid-template-columns:minmax(0,1fr) 230px;gap:16px;align-items:start}
body.page-lab .mprof-card{
  background:#fff;border:1px solid #dce9f6;border-radius:16px;
  box-shadow:0 8px 24px rgba(16,58,102,.055)}
body.page-lab .mprof-main{padding:20px 22px}
body.page-lab .mprof-head{
  display:flex;align-items:flex-start;justify-content:space-between;gap:14px;
  padding-bottom:14px;border-bottom:1px solid var(--line-2)}
body.page-lab .mprof-kicker{
  display:block;color:var(--blue);font-size:10.5px;font-weight:800;letter-spacing:.18em;margin-bottom:4px}
body.page-lab .mprof-head h4{margin:0;color:var(--navy);font-size:20px}
body.page-lab .mprof-head p{margin:6px 0 0;color:var(--muted);font-size:12.5px}
body.page-lab .mprof-status{
  flex:none;padding:4px 11px;border:1px solid #dbe8f5;border-radius:999px;
  background:#f4f8fd;color:#58728d;font-size:11.5px;font-weight:700;white-space:nowrap}
body.page-lab .mprof-status.ok{background:#eaf8f1;border-color:#c9e9da;color:#177b53}
body.page-lab .mprof-fields{margin-top:2px}
body.page-lab .mprof-field{
  display:grid;grid-template-columns:92px minmax(0,1fr);gap:14px;align-items:center;
  min-height:58px;padding:10px 0;border-bottom:1px solid var(--line-2)}
body.page-lab .mprof-field:last-child{border-bottom:0}
body.page-lab .mprof-field .k{color:var(--muted);font-size:13px}
body.page-lab .mprof-field .v{color:var(--ink);font-size:14.5px;min-width:0}
body.page-lab .mprof-field .v>b{color:var(--navy);font-size:15px}
body.page-lab .mprof-tags{display:inline-flex;gap:5px;flex-wrap:wrap;margin-left:9px;vertical-align:middle}
body.page-lab .mprof-phone input{
  width:100%;max-width:320px;height:40px;padding:0 12px;border:1px solid #d8e4ef;
  border-radius:10px;background:#fbfdff;font-size:14px;color:var(--ink)}
body.page-lab .mprof-phone input:focus{
  outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(30,111,196,.10)}
body.page-lab .mprof-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:16px}
body.page-lab .mprof-actions .btn{min-width:112px;justify-content:center}
body.page-lab .mprof-note{margin:13px 0 0;color:var(--muted);font-size:12.5px;line-height:1.7}
body.page-lab .mprof-side{
  padding:18px;border:1px solid #dce9f6;border-radius:16px;
  background:linear-gradient(180deg,#f8fbff,#fff);
  box-shadow:0 8px 24px rgba(16,58,102,.045)}
body.page-lab .mprof-side-ic{
  width:36px;height:36px;margin-bottom:11px;border-radius:11px;display:flex;align-items:center;justify-content:center;
  background:#e8f8f0;border:1px solid #bfe7d3;color:#16865a;font-size:19px;font-weight:800}
body.page-lab .mprof-side>b{display:block;color:var(--navy);font-size:15px;margin-bottom:7px}
body.page-lab .mprof-side>p{margin:0 0 14px;color:var(--ink-2);font-size:12.5px;line-height:1.75}
body.page-lab .mprof-side-row{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:8px 0;border-top:1px solid var(--line-2);font-size:12.5px}
body.page-lab .mprof-side-row span{color:var(--muted)}
body.page-lab .mprof-side-row b{color:var(--ink-2);font-weight:600}
body.page-lab .mprof-side-row b.on{color:var(--blue)}
@media(max-width:860px){
  body.page-lab .mprof-shell{grid-template-columns:1fr}
  body.page-lab .mprof-main{padding:16px}
  body.page-lab .mprof-field{grid-template-columns:76px minmax(0,1fr);gap:10px}
}


/* ===== 我的资料信息扩展与标签修复 2026-10-06 ===== */
body.page-lab .mprof-shell{display:block}
body.page-lab .mprof-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 22px}
body.page-lab .mprof-id{display:flex;align-items:center;gap:12px;min-width:0}
body.page-lab .mprof-av{
  width:48px;height:48px;flex:0 0 48px;border-radius:15px;display:flex;align-items:center;justify-content:center;
  color:#fff;font-size:17px;font-weight:800;box-shadow:0 8px 20px rgba(16,58,102,.14)}
body.page-lab .mprof-head h4{font-size:19px}
body.page-lab .mprof-head p{margin-top:2px}
body.page-lab .mprof-field .v{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
body.page-lab .mprof-tags{margin-left:0}
body.page-lab .mine-hd .badge,
body.page-lab .mprof-tags .badge,
body.page-lab .mpf-tags .badge{
  display:inline-flex!important;align-items:center!important;justify-content:center!important;
  width:auto!important;height:auto!important;min-width:0!important;padding:3px 12px!important;
  border-radius:999px!important;line-height:1.35!important;white-space:nowrap!important;vertical-align:middle!important}
@media(max-width:860px){
  body.page-lab .mprof-fields{grid-template-columns:1fr;gap:0}
  body.page-lab .mprof-field{grid-template-columns:82px minmax(0,1fr)}
}


/* ===== 论坛头图数据胶囊右下布局 2026-10-06 ===== */
body.page-lab .forum-hero{padding:22px 26px;gap:16px}
body.page-lab .forum-hero-art{height:132px}
body.page-lab .forum-hero-copy{padding-bottom:34px}
body.page-lab .forum-hero-stats{
  grid-column:1/-1;grid-row:1;justify-self:end;align-self:end;justify-content:flex-end;
  margin:0;position:relative;z-index:3}
@media(max-width:760px){
  body.page-lab .forum-hero-copy{padding-bottom:0}
  body.page-lab .forum-hero-stats{
    grid-column:auto;grid-row:auto;justify-self:start;align-self:auto;justify-content:flex-start;margin-top:2px}
}


/* ===== 论坛未读提醒下拉 2026-10-06 ===== */
body.page-lab .forum-unread-wrap{position:relative;display:inline-flex;z-index:5}
body.page-lab .forum-unread-btn{
  display:inline-flex;align-items:center;gap:5px;min-height:32px;padding:5px 11px;
  border:1px solid rgba(255,255,255,.24);border-radius:999px;
  background:rgba(255,255,255,.10);color:#e7f4fd;font:inherit;font-size:12px;cursor:pointer}
body.page-lab .forum-unread-btn:hover{background:rgba(255,255,255,.17)}
body.page-lab .forum-unread-btn>b{color:#fff;font-size:16px;font-weight:800}
body.page-lab .forum-unread-caret{
  width:0;height:0;margin-left:2px;border-left:4px solid transparent;border-right:4px solid transparent;
  border-top:5px solid currentColor;transition:transform .16s}
body.page-lab .forum-unread-btn[aria-expanded=true] .forum-unread-caret{transform:rotate(180deg)}
body.page-lab .forum-unread-pop{
  position:absolute;right:0;top:calc(100% + 8px);bottom:auto;z-index:40;width:290px;max-width:calc(100vw - 32px);max-height:180px;overflow-y:auto;
  padding:7px;border:1px solid rgba(208,224,240,.95);border-radius:12px;background:#fff;
  box-shadow:0 14px 34px rgba(8,31,58,.24)}
body.page-lab .forum-unread-pop[hidden]{display:none!important}
body.page-lab .forum-unread-pop-h{
  padding:6px 8px 7px;color:#58728d;font-size:11.5px;font-weight:700;border-bottom:1px solid #e6eef7;margin-bottom:4px}
body.page-lab .forum-unread-pop>a{
  display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px;
  border-radius:8px;color:var(--navy);font-size:12.5px;text-decoration:none}
body.page-lab .forum-unread-pop>a:hover{background:var(--blue-50);color:var(--blue);text-decoration:none}
body.page-lab .forum-unread-pop>a b{flex:none;color:var(--blue);font-size:12px}
body.page-lab .forum-unread-empty{padding:12px 8px;text-align:center;color:var(--muted);font-size:12.5px}
@media(max-width:760px){
  body.page-lab .forum-unread-wrap{display:block;width:100%}
  body.page-lab .forum-unread-pop{
    position:static;width:100%;max-height:180px;margin-top:7px;box-shadow:0 8px 20px rgba(8,31,58,.14)}
}


/* ===== 未读提醒下拉文字对比度修正 2026-10-06 ===== */
body.page-lab .forum-unread-pop>a{color:#244563!important}
body.page-lab .forum-unread-pop>a span{color:#244563!important;font-weight:700}
body.page-lab .forum-unread-pop>a b{color:#1e6fc4!important}
body.page-lab .forum-unread-pop>a:hover{background:#eef6fd}
body.page-lab .forum-unread-pop>a:hover span{color:#155f9e!important}
body.page-lab .forum-unread-pop-h{color:#3f5973!important}
body.page-lab .forum-unread-empty{color:#60748a!important}


/* ===== 未读提醒版块明细布局 2026-10-06 ===== */
body.page-lab .forum-unread-pop>a{
  display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 8px;align-items:center}
body.page-lab .forum-unread-pop>a .forum-unread-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
body.page-lab .forum-unread-pop>a .forum-unread-count{justify-self:end}
body.page-lab .forum-unread-pop>a .forum-unread-meta{
  grid-column:1/-1;color:#60748a!important;font-size:11.5px;font-weight:600!important;line-height:1.55;
  white-space:normal;word-break:keep-all}


/* ===== 论坛手机端顶部入口 2026-10-06 ===== */
body.page-lab .forum-mobile-entry{display:none}
@media(max-width:900px){
  body.page-lab .forum-mobile-entry{
    display:flex;align-items:center;justify-content:center;gap:8px;width:100%;
    padding:11px 14px;margin-bottom:8px;border:1px solid #d8e6f3;border-radius:13px;
    background:#fff;color:#2367a6;font-size:14px;font-weight:800;text-decoration:none;
    box-shadow:0 5px 16px rgba(16,58,102,.06)}
  body.page-lab .forum-mobile-entry svg{
    width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.8;
    stroke-linecap:round;stroke-linejoin:round}
}


/* ===== 手机端个人中心菜单选中态对比度修正 2026-10-06 ===== */
body.page-lab .mn-i.on{color:var(--navy)}
body.page-lab .mn-i.on .mn-ic{color:var(--blue)}
@media(max-width:900px){
  body.page-lab .mn-i.on{background:var(--blue)!important;color:#fff!important}
  body.page-lab .mn-i.on .mn-ic{color:#fff!important}
}


/* ===== 论坛手机端菜单自适应长度 2026-10-06 ===== */
@media(max-width:900px){
  body.page-lab .forum-mine-nav{width:100%;min-width:0;overflow:visible}
  body.page-lab .forum-mine-nav .mine-nav-scroll{
    display:flex!important;flex-direction:row!important;flex-wrap:nowrap!important;
    width:100%!important;max-width:100%!important;min-width:0;
    overflow-x:auto!important;overflow-y:hidden!important;padding:2px}
  body.page-lab .forum-mine-nav .mine-nav-scroll>.mn-i{
    width:auto!important;flex:0 0 auto!important;white-space:nowrap!important}
  body.page-lab .forum-mine-nav .mn-sep{display:none!important}
  body.page-lab .forum-mine-nav .mn-out{
    display:block;margin-top:8px;padding-top:8px;border-top:1px solid var(--line-2)}
  body.page-lab .forum-mine-nav .mn-out{display:grid!important;grid-template-columns:1fr 1fr;gap:8px}
  body.page-lab .forum-mine-nav .mn-out .mn-i{
    display:flex!important;justify-content:center;margin:0;padding:11px 10px;border-radius:10px}
}


/* ===== 页头英文栏目名统一放大 2026-10-06 ===== */
body .pb h1 .pb-en{
  font-size:calc(21px * var(--fz-all,1) * var(--fz-sub,1))!important;
  font-weight:500!important}
@media(max-width:600px){
  body .pb h1 .pb-en{font-size:17px!important}
}


/* ===== 个人中心工作台概览布局 2026-10-06 ===== */
body.page-lab .mine-hd-summary{
  background:
    radial-gradient(520px 180px at 94% 0,rgba(99,179,237,.28),transparent 60%),
    linear-gradient(120deg,#0f3157 0%,#174f83 58%,#1f6fae 100%)}
body.page-lab .mine-hd-kicker{
  display:block;margin-bottom:5px;color:#9fc8e8;font-size:10.5px;font-weight:800;letter-spacing:.18em}
body.page-lab .mine-hd-summary h3{margin:0 0 5px;font-size:22px}
body.page-lab .mine-hd-sub{margin:0;color:#c5def3;font-size:13px;line-height:1.65}
@media(max-width:700px){
  body.page-lab .mine-hd-summary{padding:17px 18px}
  body.page-lab .mine-hd-summary h3{font-size:20px}
}


/* ===== 个人中心身份+工作台组合布局 2026-10-06 ===== */
body.page-lab .mine-hd-dashboard{
  grid-template-columns:minmax(280px,360px) minmax(0,1fr);gap:24px;align-items:center}
body.page-lab .mine-hd-identity{
  display:flex;align-items:center;gap:14px;min-width:0;padding-right:22px;
  border-right:1px solid rgba(255,255,255,.16)}
body.page-lab .mine-hd-user{min-width:0}
body.page-lab .mine-hd-user h3{margin:0 0 3px;color:#fff;font-size:21px}
body.page-lab .mine-hd-user>span{display:block;color:#c5def3;font-size:13px}
body.page-lab .mine-hd-user-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
body.page-lab .mine-hd-user-tags .badge{
  display:inline-flex!important;align-items:center!important;justify-content:center!important;
  width:auto!important;height:auto!important;padding:3px 11px!important;
  border-radius:999px!important;line-height:1.35!important;white-space:nowrap!important}
body.page-lab .mine-hd-workbench{min-width:0}
body.page-lab .mine-hd-work-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px}
body.page-lab .mine-hd-work-head h4{margin:0 0 4px;color:#fff;font-size:19px}
body.page-lab .mine-hd-stats{justify-content:flex-start;flex-wrap:wrap}
@media(max-width:900px){
  body.page-lab .mine-hd-dashboard{grid-template-columns:1fr;gap:16px}
  body.page-lab .mine-hd-identity{
    padding-right:0;padding-bottom:14px;border-right:0;border-bottom:1px solid rgba(255,255,255,.16)}
}


/* ===== 个人中心 · 学术资源（2026-10-06 重新设计） =====
   改版前是一排白底方块，太素。现在：顶部浅蓝横幅（图标+说明+入口数+搜索框）、
   卡片带彩色首字母徽标和域名/出版社副标题、悬停轻轻抬起。
   注意：样式都挂在 .ares-* 上，老前台页面的 .res-* 样式原样保留、互不影响。 */
.ares-hero{
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  margin:0 0 18px;padding:16px 18px;border-radius:16px;
  background:linear-gradient(120deg,#eef6ff,#f7fbff 55%,#eefaf6);
  border:1px solid #d9e9f8;box-shadow:0 8px 22px rgba(16,58,102,.05)}
.ares-hero-l{display:flex;align-items:center;gap:12px;min-width:0}
.ares-hero-ic{
  width:42px;height:42px;flex:0 0 42px;border-radius:13px;color:#fff;
  display:inline-flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#2f6fd0,#1b4f85);box-shadow:0 6px 16px rgba(30,111,196,.28)}
.ares-hero-ic .ic{width:22px;height:22px}
.ares-hero h3{margin:0 0 2px;font-size:19px;color:var(--navy)}
.ares-hero p{margin:0;font-size:12.5px;color:var(--muted)}
.ares-hero-r{margin-left:auto;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ares-count{
  font-size:12.5px;font-weight:700;color:#2b5f96;background:#fff;
  border:1px solid #d9e9f8;border-radius:999px;padding:3px 11px;white-space:nowrap}
.ares-search{
  display:flex;align-items:center;gap:7px;background:#fff;border:1px solid #d9e9f8;
  border-radius:999px;padding:5px 13px;min-width:230px;transition:border-color .15s,box-shadow .15s}
.ares-search:focus-within{border-color:#9ec8ef;box-shadow:0 0 0 3px rgba(47,111,208,.12)}
.ares-search>span{font-size:13px;opacity:.6}
.ares-search input{border:0;outline:0;background:transparent;width:100%;
  font-size:13px;color:var(--ink);font-family:inherit}

.ares-sec{margin-bottom:22px}
.ares-sec h4{display:flex;align-items:center;gap:8px;margin:0 0 12px;font-size:15px;color:var(--navy)}
.ares-sec h4::before{content:"";width:4px;height:15px;border-radius:2px;
  background:linear-gradient(180deg,var(--blue),var(--blue-2))}
.ares-num{font-size:11.5px;font-weight:700;color:#2b5f96;background:var(--blue-50);
  border-radius:999px;padding:1px 9px}

.ares-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:12px}
.ares-card{
  display:flex;align-items:center;gap:11px;padding:12px 14px;
  border:1px solid var(--line);border-radius:13px;background:#fff;text-decoration:none;
  transition:transform .16s,box-shadow .16s,border-color .16s}
.ares-card:hover{border-color:#bcd9f5;box-shadow:0 8px 20px rgba(16,58,102,.1);transform:translateY(-2px)}
.ares-badge{
  width:34px;height:34px;flex:0 0 34px;border-radius:10px;color:#fff;
  font-size:14px;font-weight:800;letter-spacing:.02em;
  display:inline-flex;align-items:center;justify-content:center;
  background:var(--tone,#2f6fd0);box-shadow:0 4px 10px rgba(16,58,102,.16)}
.ares-main{min-width:0;flex:1 1 auto;display:flex;flex-direction:column;gap:2px}
.ares-main b{font-size:14px;font-weight:700;color:var(--navy);line-height:1.35;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 常用链接没有副标题，卡片里就一行名字，垂直居中 */
.ares-card.is-plain .ares-main{justify-content:center}
.ares-main em{font-style:normal;font-size:11.5px;color:var(--muted);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ares-card:hover .ares-main b{color:var(--blue)}
.ares-none{padding:20px;text-align:center;color:var(--muted)}
@media (max-width:700px){
  .ares-hero{padding:14px;gap:10px}
  .ares-hero-r{margin-left:0;width:100%}
  .ares-search{min-width:0;width:100%}
  .ares-grid{grid-template-columns:1fr}
}


/* ===== 次级按钮统一改色（2026-10-06）=====
   老师反馈「去记一笔备忘」这种按钮「灰不拉几的」。
   根因：.btn 只写了 border:1px solid transparent，**从没写过背景色**，
   于是浏览器套用系统默认的灰底（buttonface）+ 深灰字 —— 全站 30 多处
   不带 .p / .ghost 的次级按钮（取消 / 全选 / 清空 / 返回 / 翻页…）都是这个灰。
   这里统一补成「白底 + 浅蓝描边 + 蓝字」，悬停淡淡泛蓝；
   顺手给 .btn.d（删除 / 撤回 / 清空这类危险操作）配一套红框样式，
   之前 .btn.d 压根没有样式，同样是灰的。
   .p（实心蓝）和 .ghost（白底）各自有更具体的规则，不受影响。 */
.btn{background:#eef6ff;border-color:#c9e0f8;color:#1c5da5}
.btn:hover{background:#e8f3ff;border-color:#8fc0ea;color:#144a7c}
.btn.d{background:#fff5f3;border-color:#f3cfcb;color:#b3342c}
.btn.d:hover{background:#ffe9e6;border-color:#e6a29b;color:#93261f}


/* ===== 站内消息：标题行一行到底 + 操作按钮不单独占行（2026-10-06） =====
   老师反馈：①「删」被挤到单独一行，很难看；②点开正文后想看原帖。
   这里：标题行不换行（标题过长省略，全文展开后能看到），
   展开 / 删除 / 撤回 收进一个 nowrap 的 .mlog-acts 小组，
   标题里的《帖子名》做成链接，展开的正文底部再给一个「去组内论坛看这条帖子」。 */
.mlogs .mlog-h{flex-wrap:nowrap;align-items:center}
.mlogs .mlog-h .mlog-t{min-width:0;flex:0 1 auto}
.mlogs .mlog-h .mlog-t b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mlogs .mlog-h>b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mlog-acts{margin-left:0;display:inline-flex;align-items:center;gap:6px;flex:none;white-space:nowrap}
.mlogs .mlog-h .mini{flex:none;white-space:nowrap}
/* 「删」→「删除」，并做成小按钮（原来是行内纯文字，容易被挤成单独一行） */
.mmsg-del{margin-left:0;flex:none;
  border:1px solid #f3cfcb;background:#fff5f3;color:#b3342c;
  font:inherit;font-size:12px;line-height:1.75;cursor:pointer;
  padding:1px 10px;border-radius:7px;transition:.15s}
.mmsg-del:hover{background:#ffe9e6;border-color:#e6a29b;color:#93261f}
/* 标题里的《帖子名》= 直达那条帖子的链接 */
.mlog-tlink{color:var(--blue);text-decoration:none;
  border-bottom:1px dashed rgba(47,111,208,.55);white-space:nowrap}
.mlog-tlink:hover{color:#18456f;border-bottom-style:solid}
/* 展开后正文底部的「去看这条帖子」 */
.mlog-bgo{margin-top:9px;padding-top:8px;border-top:1px dashed var(--line-2)}
.mlog-bgo a{display:inline-flex;align-items:center;gap:4px;font-size:12.5px;font-weight:700;
  color:var(--blue);text-decoration:none}
.mlog-bgo a:hover{text-decoration:underline}
/* 窄屏：允许标题换行，但展开/删除这一组永远整体走，不会被拆开 */
@media (max-width:600px){
  .mlogs .mlog-h{flex-wrap:wrap}
  .mlogs .mlog-h .mlog-t b{white-space:normal}
  .mlog-acts{margin-left:auto}
}


/* ===== 写消息：超链接小弹窗 + 内容框加长（2026-10-06） =====
   老师要求：① 写消息能加超链接；② 加错了能就地改（弹在文字旁边）；
   ③ 内容框太短，加长一些。 */
.mlinkpop{
  position:fixed;z-index:220;display:flex;align-items:center;gap:6px;
  padding:8px 10px;background:#fff;border:1px solid var(--line);
  border-radius:11px;box-shadow:0 12px 30px rgba(16,58,102,.16)}
.mlinkpop[hidden]{display:none}
/* ⚠️ .btn 自带 display:inline-flex，会盖掉浏览器 [hidden] 的 display:none ——
   「取消链接」按钮因此一直露在外面。这里显式按 hidden 藏起来。 */
.mlinkpop .btn[hidden]{display:none}
.mlinkpop-ic{font-size:13px;opacity:.7}
.mlinkpop input{
  width:250px;height:31px;padding:0 10px;border:1px solid var(--line);
  border-radius:8px;font:inherit;font-size:13px;color:var(--ink);background:#fff;outline:none}
.mlinkpop input:focus{border-color:#9ec8ef;box-shadow:0 0 0 3px rgba(47,111,208,.12)}
.mlinkpop .btn.s{line-height:1.6}

/* 字号与排版后台：全站小字默认稍加大，并按文字用途提供可调比例。 */
body .crumb,body .pb .crumb{font-size:calc(16px * var(--fz-all,1) * var(--fz-crumb,1))}
body .crumb-current{font-size:inherit}
body .pb h1 .pb-en{font-size:calc(17px * var(--fz-all,1) * var(--fz-en,1))!important}
body .sec-h .cnt{font-size:calc(14px * var(--fz-all,1) * var(--fz-count,1))}
body .sec-h .en,body .pi-main .role{font-size:calc(15px * var(--fz-all,1) * var(--fz-en,1))}
body .sec-h .right{font-size:calc(14px * var(--fz-all,1) * var(--fz-button,1))}
body .pi-name span,body .card-h .en{font-size:calc(13.5px * var(--fz-all,1) * var(--fz-en,1))}
body .subnav a,body .tabs .tab{font-size:calc(15px * var(--fz-all,1) * var(--fz-tabs,1))}
body .tabs .tab .n,body .tabs .tab .cnt{font-size:calc(13px * var(--fz-all,1) * var(--fz-count,1))}
body .tag{font-size:calc(14.5px * var(--fz-all,1) * var(--fz-count,1))}
body .btn,body .btn.s,body .btn.ghost,body .more-btn,body .fcard .more,body .filter-btn,body .dir-all{font-size:calc(14px * var(--fz-all,1) * var(--fz-button,1))}
body .subnav .lb{font-size:calc(13.5px * var(--fz-all,1) * var(--fz-count,1))}
body .pcard .sub,body .dcard .en,body .card-h .en{font-size:calc(13.5px * var(--fz-all,1) * var(--fz-en,1))}
body.page-lab .lab-member-link,body.page-lab .tabs.lab-tabs .tab,
body.page-lab .mine-nav a,body.page-lab .forum-mine-rail .fmr-i,
body.page-lab .mto-btn,body.page-lab .mine-forum-dock .mfd-tx{
  font-size:calc(14.5px * var(--fz-all,1) * var(--fz-lab,1))
}
@media(max-width:680px){
  body .pb h1 .pb-en{font-size:calc(16px * var(--fz-all,1) * var(--fz-en,1))!important}
  body .crumb,body .pb .crumb{font-size:calc(15px * var(--fz-all,1) * var(--fz-crumb,1))}
  body .subnav a,body .tabs .tab{font-size:calc(14px * var(--fz-all,1) * var(--fz-tabs,1))}
}
@media (max-width:600px){
  .mlinkpop{left:8px !important;right:8px;gap:5px;padding:7px 8px}
  .mlinkpop input{width:100%;min-width:0;flex:1 1 auto}
}
/* 正文里的链接（含自动识别的裸网址）：蓝色下划线，一眼看出能点 */
.mlog-b a{color:var(--blue);text-decoration:underline;text-underline-offset:2px}
.mlog-b a:hover{color:#18456f}


/* ===== 日历悬浮明细修一修（2026-10-06 老师反馈「内容悬浮到日历下方了」）=====
   原来两个毛病：
     ① 悬浮格和后面的日期格是同一个层叠层级 —— 弹层是格子的子元素，
        被**后面 DOM 顺序的格子**盖住，看起来像一块白斑卡在日历里；
     ② 靠右边两列的弹层以左边缘展开，直接拱出日历卡片外面。
   现在：悬浮格抬到最上层；靠右两列改成往左展开；最后一行的弹层往上弹
   （免得贴着卡片底边甚至跑到卡片外）。 */
.mcal-g>.mcal-d{position:relative}
.mcal-g>.mcal-d:hover{z-index:40}          /* 悬停格抬到最上层，弹层不再被后面的格子盖住 */
/* 位置（左右夹在日历内、最后一行往上弹）由 mine.js 的 bindCalPop() 精确计算，
   纯 CSS 算不出 7 列网格里「这一格在第几列」，靠右的格子会拱出卡片。 */
/* Instrument guide lives on the booking detail page, not the legacy post page. */
.bkguide{margin:22px 0 26px;padding:24px;border:1px solid #d9e6f3;border-radius:18px;background:#fff;box-shadow:0 8px 28px rgba(25,70,112,.06);scroll-margin-top:100px}
.bkguide-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}
.bkguide-kicker{font-size:12px;color:#2577be;font-weight:700;letter-spacing:.08em}
.bkguide-head h2{font-size:22px;line-height:1.4;margin:5px 0 4px;color:#12365d}
.bkguide-head p,.bkguide-empty{margin:0;color:#667e97}
.bkguide-body{margin-top:18px;line-height:1.85;overflow-wrap:anywhere;color:#283f59}
.bkguide-body p{margin:0 0 12px}.bkguide-body ul,.bkguide-body ol{padding-left:1.6em}
.bkguide-body a{color:#176dc1;text-decoration:underline}
.bkguide-files{border-top:1px solid #e5edf5;margin-top:18px;padding-top:18px;color:#173b62}
.bkguide-filelist{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:9px;margin-top:10px}
.bkguide-filelist a{display:flex;justify-content:space-between;gap:12px;align-items:center;border:1px solid #dce9f7;border-radius:10px;background:#f7fbff;padding:11px 13px;color:#154b80;overflow-wrap:anywhere;text-decoration:none}
.bkguide-filelist a:hover{border-color:#4690d3;background:#edf7ff}.bkguide-filelist span{font-size:12px;white-space:nowrap;color:#327ab8}
.bkguide-edit{border-top:1px solid #e5edf5;margin-top:20px;padding-top:16px;scroll-margin-top:100px}
.bkguide-edit>summary{cursor:pointer;color:#176bc0;font-weight:700}.bkguide-edit form{margin-top:16px}
.bkguide-toolbar{display:flex;flex-wrap:wrap;gap:7px;align-items:center;background:#f1f6fb;padding:9px;border:1px solid #d7e4f2;border-radius:10px 10px 0 0}
.bkguide-toolbar button,.bkguide-toolbar select{border:1px solid #c9dbec;border-radius:7px;background:#fff;color:#173b62;min-height:34px;padding:4px 10px;cursor:pointer}
.bkguide-toolbar label{font-size:13px;color:#48637d}.bkguide-editor{min-height:180px;padding:15px;border:1px solid #d7e4f2;border-top:0;border-radius:0 0 10px 10px;outline:none;line-height:1.8;overflow-wrap:anywhere}
.bkguide-editor:focus{border-color:#3287d3;box-shadow:0 0 0 3px rgba(50,135,211,.1)}
.bkguide-keep{display:grid;gap:7px;margin:14px 0}.bkguide-keep label{display:block}.bkguide-upload{display:flex;flex-wrap:wrap;gap:12px;align-items:center;font-weight:700;margin:15px 0 6px}
@media(max-width:600px){.bkguide{padding:17px}.bkguide-head{flex-direction:column}.bkguide-filelist{grid-template-columns:1fr}}
.bki-booked{display:flex;gap:5px;margin:8px 0;color:#47637e;font-size:13px;line-height:1.5}
.bki-booked>b{flex:none;color:#244767}
.bki-booked-names{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden;overflow-wrap:anywhere;min-width:0}
.bkcard-edit{margin:14px 0 20px;scroll-margin-top:95px}
.bkcard-edit .bkadm-f{padding-top:12px}
.bkcard-edit textarea{resize:vertical}

/* 附件阅读页：始终让“返回组内论坛”在正文上方清晰可见。 */
.ffileview .ft-main{width:100%;min-width:0}
.ffv-nav{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 18px;padding:10px 12px;border:1px solid #dce9f6;border-radius:13px;background:linear-gradient(135deg,#f4f9ff,#fff)}
.ffv-back,.ffv-topic{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:42px;padding:0 16px;border-radius:10px;text-decoration:none;font-weight:700}
.ffv-back{background:linear-gradient(135deg,#2579c9,#398fdc);color:#fff;box-shadow:0 5px 14px rgba(37,121,201,.20)}
.ffv-back:hover{background:#1768b4;color:#fff;text-decoration:none;transform:translateY(-1px)}
.ffv-topic{border:1px solid #cfe1f3;background:#fff;color:#27679f}
.ffv-topic:hover{border-color:#77afe0;background:#f5faff;text-decoration:none}
.ffv-trail{margin-left:auto;color:#7188a0;font-size:13px}
.ffv-title{font-size:22px;line-height:1.45;color:var(--navy);overflow-wrap:anywhere;word-break:break-word}
.ffv-meta{font-size:14px}
.ffv-box{background:#eef2f6;border-color:#d9e3ed;box-shadow:0 5px 18px rgba(20,48,78,.08)}
.ffv-frame{height:calc(100vh - 250px);min-height:560px;max-height:1100px}
@media(max-width:700px){
  .fpost.ffileview{padding:12px}
  .ffv-nav{gap:7px;padding:9px}
  .ffv-back,.ffv-topic{min-height:40px;padding:0 12px}
  .ffv-trail{flex-basis:100%;margin-left:2px}
  .ffv-title{font-size:18px}
  .ffv-frame{height:76vh;min-height:480px}
}

/* 简历编辑页：只保留名字左侧的个人中心入口，沿用组内小导航胶囊样式。 */
.cv-edit-page .cv-return-link{min-height:36px;padding:0 12px;border:1px solid #cfe2f7;border-radius:10px;background:#f1f7fd;color:var(--blue);font-weight:700;gap:6px}
.cv-edit-page .cv-return-link:hover{background:#e7f2fc;border-color:#b8d5f0;text-decoration:none}
.cv-edit-page .cv-return-link .ic{width:15px;height:15px;flex:none}
.cv-edit-page .bkbar{margin-bottom:22px}
.cv-edit-page .cv-ops{gap:12px;margin-top:22px;padding-top:16px;border-top:1px solid var(--line-2)}
@media(max-width:600px){
  .cv-edit-page .cv-return-link{min-height:34px;padding:0 10px}
  .cv-edit-page .bkbar{margin-bottom:18px}
  .cv-edit-page .cv-ops{margin-top:18px;padding-top:14px}
}

/* 内容详情页：相关人物姓名居中，底部返回操作统一成轻量导航按钮 */
.dwrap #relGrid .tcard .jr{text-align:center}
.dwrap .dbody>:last-child{margin-bottom:0}
.dwrap .pnav{margin:20px 0 6px}
.dwrap .actbar{align-items:center;gap:12px;margin:18px 0 6px}
.dwrap .related-block{margin-top:24px}
.dwrap .related-block .sec-h{align-items:center}
.dwrap .related-actions{margin-left:auto;display:flex;align-items:center;gap:9px;flex:none}
.dwrap .related-actions .btn{min-height:36px;padding:0 12px;border-radius:10px;
  font-size:calc(16px * var(--fz-all,1) * var(--fz-button,1));font-weight:600;line-height:1.2;
  box-shadow:0 3px 10px rgba(20,73,122,.07);transition:background .18s,border-color .18s,transform .18s,box-shadow .18s}
.dwrap .related-actions .btn-p{background:linear-gradient(135deg,#287acb,#398fdc);border-color:transparent;color:#fff;
  box-shadow:0 5px 13px rgba(40,122,203,.18)}
.dwrap .related-actions .btn-p:hover{background:linear-gradient(135deg,#206db8,#287acb);transform:translateY(-1px)}
.dwrap .related-actions .btn-g{background:rgba(255,255,255,.9);border-color:#d6e5f4;color:#315d86}
.dwrap .related-actions .btn-g:hover{background:#f1f7fd;border-color:#a9ccef;color:#1768b7;transform:translateY(-1px)}
.dwrap .actbar .btn{min-height:44px;padding:0 20px;border-radius:12px;font-weight:650;
  box-shadow:0 3px 10px rgba(20,73,122,.06);transition:transform .18s,box-shadow .18s,background .18s}
.dwrap .actbar .btn:hover{transform:translateY(-1px);box-shadow:0 7px 16px rgba(20,73,122,.11)}
.dwrap .actbar .btn-p{background:#287acb;border-color:#287acb;color:#fff;box-shadow:0 5px 13px rgba(40,122,203,.18)}
.dwrap .actbar .btn-p:hover{background:#206db8;border-color:#206db8}
.dwrap .actbar .btn-g{background:#fff;border-color:#d8e6f4;color:#315d86}
.dwrap .actbar .btn-g:hover{background:#f2f8fe;border-color:#a9ccef;color:#1768b7}
@media(max-width:600px){
  .dwrap .actbar{gap:8px}
  .dwrap .actbar .btn{min-height:40px;padding:0 14px;border-radius:10px}
  .dwrap .related-block .sec-h{flex-wrap:wrap}
  .dwrap .related-actions{gap:7px}
  .dwrap .related-actions .btn{min-height:34px;padding:0 10px;border-radius:9px;
    font-size:calc(15px * var(--fz-all,1) * var(--fz-button,1))}
}

/* 研究方向页：中文标题 20px、正文 18px，英文说明按比例使用 16px */
body.page-research .pb h1,
body.page-research .sec-h h2,
body.page-research .dcard h4{
  font-size:calc(20px * var(--fz-all,1) * var(--fz-sec,1))
}
body.page-research .card-h h3{
  font-size:calc(21px * var(--fz-all,1) * var(--fz-sec,1))
}
body.page-research .pb h1 .pb-en,
body.page-research .dcard .en{
  font-size:calc(16px * var(--fz-all,1) * var(--fz-en,1))!important
}
body.page-research .card-h .en{
  font-size:calc(17px * var(--fz-all,1) * var(--fz-en,1))!important
}
body.page-research .pb .sub,
body.page-research #rIntro,
body.page-research #coop,
body.page-research .dcard p{
  font-size:calc(18px * var(--fz-all,1) * var(--fz-body,1))!important
}
.lm-mail-workspace{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(280px,1fr);gap:12px;align-items:start}.lm-mail-list-pane,.lm-mail-detail-pane{min-width:0}.lm-mail-detail-pane{position:sticky;top:12px}.lm-inbox-list{max-height:65vh;overflow:auto}.lm-inbox-row.selected{background:#eaf4ff}.lm-mail-open{grid-template-columns:minmax(0,1fr) minmax(0,1.1fr) minmax(88px,auto);gap:7px;padding:10px 8px}.lm-mail-open time{white-space:nowrap}.lm-mail-del{margin:0 6px}.lm-mail-detail-empty{min-height:260px;display:flex;align-items:center;justify-content:center;padding:20px;box-sizing:border-box;border:1px dashed #d5e2f1;border-radius:12px;background:#fff;color:#879ab2;text-align:center}.lm-mail-detail{margin:0}.lm-mail-detail pre{max-height:calc(65vh - 88px);min-height:172px}@media(max-width:680px){.lm-mail-workspace{grid-template-columns:minmax(0,1fr)}.lm-mail-detail-pane{position:static}.lm-mail-detail-empty{min-height:150px}.lm-inbox-list{max-height:50vh}.lm-mail-open{grid-template-columns:minmax(0,1fr) minmax(0,1.2fr) auto}.lm-mail-open time{display:none}}
.lm-mail-meta-row{display:flex;justify-content:space-between;align-items:center;gap:14px;min-height:34px;margin:0 2px 4px;white-space:nowrap}.lm-mail-meta-row #lmInboxSummary{min-width:0;flex:1}.lm-mail-meta-row .lm-inbox-tools{padding:4px 0;margin:0;white-space:nowrap}.lm-mail-meta-row .lm-p-status{flex:none;text-align:right;padding:4px 0;color:#7188a4;white-space:nowrap}.lm-mail-workspace{align-items:stretch}.lm-mail-list-pane{display:flex;flex-direction:column}.lm-mail-detail-pane{display:flex;align-self:stretch;min-height:100%;position:relative;top:auto}.lm-mail-detail-pane>#lmMailDetail{width:100%;box-sizing:border-box}.lm-mail-detail-empty{width:100%;height:100%;box-sizing:border-box}.lm-mail-detail{display:flex;flex-direction:column;width:100%;height:100%;min-height:100%;box-sizing:border-box}.lm-mail-detail pre{flex:1;min-height:172px;max-height:none}@media(max-width:680px){.lm-mail-meta-row{gap:7px;font-size:11px}.lm-mail-meta-row .lm-p-status{font-size:10px}.lm-mail-detail-pane{min-height:0}.lm-mail-detail{height:auto;min-height:0}.lm-mail-detail pre{max-height:50vh;min-height:172px}}
.lm-mail-workspace{grid-template-columns:minmax(0,1.05fr) minmax(0,1.25fr);align-items:stretch}.lm-mail-list-pane{height:58vh;min-height:340px;overflow:hidden}.lm-inbox-list{height:100%;max-height:none;overflow-y:auto;overscroll-behavior:contain}.lm-mail-open{grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);}.lm-mail-open time{display:none}.lm-mail-detail-pane{height:58vh;min-height:340px;overflow:auto;overscroll-behavior:contain}.lm-mail-detail-empty{height:100%;min-height:0}.lm-mail-detail{min-height:100%}.lm-mail-detail pre{max-height:none;overflow:auto}.lm-mail-meta-row{flex-wrap:nowrap}.lm-mail-meta-row #lmInboxSummary{flex:1;overflow:hidden}.lm-mail-meta-row .lm-p-status{font-size:clamp(9px,1.4vw,12px)}@media(max-width:680px){.lm-mail-workspace{grid-template-columns:minmax(0,1fr)}.lm-mail-list-pane,.lm-mail-detail-pane{height:42vh;min-height:250px}.lm-mail-meta-row{flex-wrap:nowrap}.lm-mail-meta-row .lm-p-status{white-space:nowrap}}
.lm-compose-recipient-extra{display:grid;grid-template-columns:1fr 1fr;gap:12px}.lm-rich-tools{display:flex;align-items:center;gap:6px;padding:7px 9px;border:1px solid #dce7f5;border-bottom:0;border-radius:9px 9px 0 0;background:#f5f8fc}.lm-rich-tools button{min-width:32px;height:30px;border:1px solid #d7e2ef;border-radius:6px;background:#fff;color:#28496d;cursor:pointer}.lm-rich-tools button:hover{background:#e8f2ff}.lm-rich-editor{min-height:220px;max-height:48vh;overflow:auto;padding:12px 14px;border:1px solid #dce7f5;border-radius:0 0 9px 9px;background:#fff;outline:none;line-height:1.65}.lm-rich-editor:empty:before{content:attr(data-placeholder);color:#94a5ba}.lm-mail-html{padding:16px;overflow-wrap:anywhere;line-height:1.7}.lm-mail-html img{max-width:100%;height:auto}.lm-mail-attachments{display:grid;gap:7px;padding:12px 16px;border-top:1px solid #e7edf5}.lm-mail-attachments a{color:#2473c8;text-decoration:none}.lm-mail-attachments a:hover{text-decoration:underline}.lm-mail-detail header>span{display:block}.lm-mail-detail-pane{overflow-y:auto}@media(max-width:520px){.lm-compose-recipient-extra{grid-template-columns:1fr}}
.lm-personal-compose{gap:6px;padding:10px}.lm-personal-compose .lm-compose-line{display:grid;grid-template-columns:64px minmax(0,1fr);align-items:center;gap:8px;margin:0;padding:4px 2px;border-bottom:1px solid #e9eff7}.lm-personal-compose .lm-compose-line>span:first-child{margin:0;color:#526b88;font-weight:600}.lm-personal-compose .lm-compose-line input{width:100%;min-width:0;padding:7px 10px;min-height:34px}.lm-personal-compose .lm-compose-from-value{display:block;padding:7px 10px;min-height:34px;box-sizing:border-box;border-radius:8px;background:#f5f8fc;color:#536b86;overflow-wrap:anywhere}.lm-personal-compose .lm-compose-body{display:block;margin-top:8px}.lm-personal-compose .lm-compose-body>span,.lm-personal-compose .lm-compose-attachments>span{display:block;margin:0 0 6px;color:#526b88;font-weight:600}.lm-personal-compose .lm-compose-attachments{display:grid;grid-template-columns:64px minmax(0,1fr);align-items:center;gap:8px;margin-top:8px}.lm-personal-compose .lm-compose-attachments>span{margin:0}.lm-personal-compose .lm-compose-attachments input{min-width:0}.lm-personal-compose .lm-compose-recipient-extra{display:block}.lm-personal-compose .lm-compose-recipient-extra .lm-compose-line{grid-template-columns:64px minmax(0,1fr)}@media(max-width:520px){.lm-personal-compose .lm-compose-line,.lm-personal-compose .lm-compose-attachments{grid-template-columns:58px minmax(0,1fr);gap:6px}.lm-personal-compose .lm-compose-line input{font-size:13px}.lm-personal-compose .lm-compose-attachments>span{font-size:12px}}
.lm-inbox-list,.lm-mail-detail-pane{overscroll-behavior-y:auto!important;-webkit-overflow-scrolling:touch}
.lm-personal-compose .lm-compose-attachments{display:grid;grid-template-columns:minmax(0,1fr);gap:4px;margin:7px 0 0;padding:0;border:0}.lm-personal-compose .lm-attachments-hint{color:#7188a4;font-size:11px;line-height:1.35}.lm-personal-compose .lm-compose-attachments input[type=file]{width:100%;min-height:36px;padding:5px 8px;font-size:12px}.lm-personal-compose .lm-smtp-actions{margin-top:7px;gap:8px}
.lm-rich-editor{font-weight:400}
.lm-rich-tools button.on{background:#e6f2ff;border-color:#9dc8ef;color:#176bc0;box-shadow:inset 0 0 0 1px #d2e8fb}.lm-rich-tools button:focus{outline:none}
.lm-mail-detail-pane{display:flex;min-height:0;overflow:hidden!important}.lm-mail-detail-pane>#lmMailDetail{min-height:0}.lm-mail-detail{height:100%;min-height:0!important;overflow:hidden}.lm-mail-detail header{flex:none}.lm-mail-body{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch}.lm-mail-body pre{max-height:none!important;min-height:0!important;overflow:visible!important;white-space:pre-wrap;overflow-wrap:anywhere}.lm-mail-html{overflow-wrap:anywhere}.lm-mail-detail header .lm-mail-forward{justify-self:start;padding:5px 12px;border:1px solid #cfe0f3;border-radius:7px;background:#fff;color:#2473c8;cursor:pointer}.lm-mail-detail header .lm-mail-forward:hover{background:#eef6ff}.lm-forward-context{grid-column:1/-1;padding:8px 10px;border-radius:7px;background:#f1f7ff;color:#4f7197;font-size:12px}
.lm-inbox-tools{flex-wrap:wrap;gap:8px}.lm-bulk-tools{display:flex;align-items:center;flex-wrap:wrap;gap:6px;width:100%;padding-top:7px;border-top:1px solid #e4edf7}.lm-bulk-tools label{display:inline-flex;align-items:center;gap:5px;font-size:12px;white-space:nowrap}.lm-bulk-tools button{padding:5px 8px;border:1px solid #d4e3f4;border-radius:6px;background:#fff;color:#2466a8;cursor:pointer;font-size:12px}.lm-bulk-tools button:hover{background:#edf6ff}.lm-bulk-tools button[data-mail-bulk="delete"]{color:#b33c3c}.lm-inbox-row{display:flex;align-items:center}.lm-mail-select{flex:none;margin:0 5px 0 9px;width:15px;height:15px}.lm-inbox-row .lm-mail-open{min-width:0;flex:1}
@media(max-width:680px){.lm-mail-detail-pane{height:42vh;min-height:250px;overflow:hidden!important}.lm-mail-detail{height:100%;min-height:0!important}.lm-mail-body{min-height:0}.lm-mail-detail header{padding:10px}.lm-mail-detail header .lm-mail-forward{padding:4px 10px}}
.lm-mail-detail header{grid-template-columns:minmax(0,1fr) auto}.lm-mail-detail header>b,.lm-mail-detail header>span{grid-column:1/-1}.lm-mail-detail header>time{grid-column:1;align-self:center;min-width:0;overflow-wrap:anywhere}.lm-mail-detail header>.lm-mail-forward{grid-column:2;justify-self:end;align-self:center}.lm-attachment-preview-modal{position:fixed;inset:0;z-index:100000;display:flex;align-items:center;justify-content:center;padding:20px;box-sizing:border-box;background:rgba(9,20,35,.78)}.lm-attachment-preview-box{display:flex;flex-direction:column;width:min(100%,1100px);max-height:calc(100vh - 40px);overflow:hidden;border:1px solid #d8e3f0;border-radius:12px;background:#fff;box-shadow:0 18px 60px rgba(0,0,0,.3)}.lm-attachment-preview-box>header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 14px;border-bottom:1px solid #e5edf6;color:#294968}.lm-attachment-preview-box>header>b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lm-attachment-preview-close{flex:none;width:34px;height:34px;border:0;border-radius:7px;background:#f1f5fa;color:#334e69;font-size:23px;line-height:1;cursor:pointer}.lm-attachment-preview-stage{display:flex;align-items:center;justify-content:center;min-height:0;overflow:auto;padding:12px;background:#f4f7fb}.lm-attachment-preview-stage img{display:block;max-width:100%;max-height:calc(100vh - 120px);object-fit:contain}
@media(max-width:520px){.lm-attachment-preview-modal{padding:10px}.lm-attachment-preview-box{max-height:calc(100vh - 20px)}.lm-attachment-preview-stage img{max-height:calc(100vh - 100px)}}
.mine-booking-tabs{display:flex;gap:8px;max-width:100%;overflow-x:auto;white-space:nowrap;margin:0 0 18px;padding:2px 0 8px;scrollbar-width:thin}
.mine-booking-tab{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;min-height:36px;padding:0 17px;border:1px solid #d7e5f4;border-radius:999px;background:#fff;color:#496580;text-decoration:none;font-weight:600;transition:background .15s,color .15s}
.mine-booking-tab:hover{background:#eff6fd;color:#1768b8}
.mine-booking-tab.on{background:#2f85d6;border-color:#2f85d6;color:#fff;box-shadow:0 3px 10px rgba(47,133,214,.18)}
.lm-mail-meta-row{display:flex;align-items:center;gap:14px;overflow-x:auto;white-space:nowrap;scrollbar-width:thin}
.lm-mail-meta-row #lmInboxSummary{flex:none;overflow:visible;color:#7188a4;font-size:12px}
.lm-mail-meta-row .lm-p-status{flex:none;margin-left:auto;padding:4px 0;font-size:12px}
.lm-inbox-tools>.lm-inbox-count{display:none}
.booking-mine-dock{position:fixed;z-index:80;left:18px;top:112px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;width:76px;min-height:84px;padding:10px 7px;box-sizing:border-box;border:1px solid #cfe2f7;border-radius:18px;background:linear-gradient(180deg,#fff,#f3f9ff);box-shadow:0 12px 30px rgba(16,58,102,.15);color:#2367a6;text-decoration:none;font-size:12px;font-weight:800;line-height:1.25;white-space:nowrap;touch-action:none;cursor:grab;user-select:none}
.booking-mine-dock:hover{color:#1768b8;border-color:#9fc8ed;box-shadow:0 16px 36px rgba(16,58,102,.2);text-decoration:none}
.booking-mine-dock.is-dragging{cursor:grabbing;box-shadow:0 20px 40px rgba(16,58,102,.25)}
.booking-mine-dock-icon{display:flex;align-items:center;justify-content:center;width:38px;height:38px;border:1px solid #d2e7f9;border-radius:12px;background:#eaf4fd}
.booking-mine-dock-icon svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
@media(max-width:680px){.booking-mine-dock{left:12px;top:78px;bottom:auto;width:58px;min-height:58px;padding:7px;font-size:10px}.booking-mine-dock-icon{width:25px;height:25px;border:0;background:transparent}.booking-mine-dock-icon svg{width:19px;height:19px}}
.mine-card-popup{position:fixed;z-index:10020;width:min(390px,calc(100vw - 20px));max-height:min(62vh,520px);overflow:auto;box-sizing:border-box;padding:16px 18px;border:1px solid #c9dced;border-radius:13px;background:#fff;box-shadow:0 15px 42px rgba(19,51,85,.22);color:#304d69;pointer-events:none}
.mine-card-popup[hidden]{display:none}
.mine-card-popup>strong{display:block;margin-bottom:8px;padding-bottom:7px;border-bottom:1px solid #e4edf5;color:#173e65;font-size:13px}
.mine-card-detail-row{display:grid;grid-template-columns:62px minmax(0,1fr);gap:2px 8px;align-items:baseline;padding:6px 0;border-bottom:1px solid #edf2f7;font-size:11.5px;line-height:1.45}
.mine-card-detail-row:last-child{border-bottom:0}
.mine-card-detail-row b{color:#245b8f;font-size:11.5px}
.mine-card-detail-row span{overflow-wrap:anywhere}
.mine-card-detail-row time{grid-column:2;color:#7188a2;font-size:11px}
body.page-lab .mine-cards{grid-template-columns:repeat(4,minmax(0,1fr));grid-template-areas:'duty ledger ledger safety' 'parcel parcel meeting meeting';align-items:stretch}
body.page-lab .mine-cards>.mine-card{height:100%;box-sizing:border-box;align-self:stretch}
body.page-lab .mine-cards>.mine-card[data-go="duty"]{grid-area:duty}
body.page-lab .mine-cards>.mine-card[data-go="parcel"]{grid-area:parcel}
body.page-lab .mine-cards>.mine-card[data-go="ledger"]{grid-area:ledger}
body.page-lab .mine-cards>.mine-card[data-go="safety"]{grid-area:safety}
body.page-lab .mine-cards>.mine-card[data-go="meeting"]{grid-area:meeting}
body.page-lab .mine-cards .mc-d{font-size:13px}
body.page-lab .mine-cards>.mine-card[data-go="meeting"] .mc-v{font-size:14px}
@media(max-width:680px){body.page-lab .mine-cards{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-areas:'duty safety' 'ledger ledger' 'parcel meeting'}}
@media(max-width:420px){body.page-lab .mine-cards{grid-template-columns:minmax(0,1fr);grid-template-areas:'duty' 'ledger' 'safety' 'parcel' 'meeting'}}
/* 企业微信申请：个人中心里的内嵌 iframe（2026-10-09）。高度由 approval.php 用
   postMessage 上报后由 JS 设定；这里的 min-height 只是高度还没报回来时的兜底。 */
.ap-frame-wrap{margin-top:4px}
.ap-frame{display:block;width:100%;min-height:420px;border:0;background:transparent}
@media(max-width:680px){.ap-frame{min-height:520px}}
