:root{
  --bg:#eef3fb; --panel:#ffffff; --panel2:#f3f7fd; --line:#e1e8f2;
  --ink:#16202e; --muted:#5b6b82; --faint:#8997ac;
  --brand:#2f6df6; --brand2:#1b4fd6;
  --hi:#ef5a32; --mid:#2f86e0; --lo:#94a3b6;
  --gold:#c0820c; --ok:#1ba672;
  --ship:#1f93d6; --car:#e0892a; --port:#7c5cf0; --cargo:#d8487f;
  --met:#1aa79a; --area:#7d8aa0;
  --radius:12px;
  --shadow-sm:0 1px 2px rgba(22,40,80,.05), 0 1px 3px rgba(22,40,80,.06);
  --shadow-md:0 4px 14px rgba(22,52,110,.08);
  --shadow-lg:0 12px 34px rgba(22,52,110,.12);
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{
  background:
    radial-gradient(circle at 1px 1px, rgba(47,109,246,.05) 1px, transparent 1.6px) 0 0/22px 22px,
    radial-gradient(1100px 520px at 85% -12%, rgba(47,109,246,.10), transparent 60%),
    linear-gradient(180deg,#f5f9ff 0,var(--bg) 60%) fixed;
  color:var(--ink);font:14px/1.6 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",Segoe UI,sans-serif;
}
a{color:var(--brand);text-decoration:none}
.hidden{display:none!important}

/* header */
header{position:sticky;top:0;z-index:30;background:rgba(255,255,255,.82);backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
.bar{max-width:1280px;margin:0 auto;padding:12px 20px;display:flex;align-items:center;gap:16px}
.logo{font-weight:800;font-size:17px;letter-spacing:.2px;display:flex;align-items:center;gap:10px;color:var(--ink)}
.logo .mark{border-radius:8px;box-shadow:0 3px 10px rgba(47,109,246,.28);flex:none}
.logo small{font-weight:500;color:var(--muted);font-size:12px}
.tabs{display:flex;gap:4px;margin-left:8px}
.tab{padding:7px 14px;border-radius:8px;color:var(--muted);cursor:pointer;font-weight:600}
.tab:hover{background:var(--panel2);color:var(--ink)}
.tab.active{background:var(--brand);color:#fff;box-shadow:0 2px 8px rgba(47,109,246,.32)}
.spacer{flex:1}
.school-pick{display:flex;align-items:center;gap:8px}
.school-pick select{background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:7px 10px;font-size:13px;font-weight:600;box-shadow:var(--shadow-sm)}

main{max-width:1280px;margin:0 auto;padding:20px}

/* stat strip */
.stats{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:16px}
.stat{flex:1 1 96px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:11px 14px;min-width:0;box-shadow:var(--shadow-sm)}
.stat .n{font-size:24px;font-weight:800;color:var(--ink)}
.stat .l{color:var(--muted);font-size:12px}
.stat.hi .n{color:var(--hi)} .stat.mid .n{color:var(--mid)} .stat.lo .n{color:var(--lo)}

/* toolbar */
.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px}
.search{flex:1;min-width:200px;display:flex;align-items:center;gap:8px;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:9px 12px;box-shadow:var(--shadow-sm)}
.search:focus-within{border-color:var(--brand);box-shadow:0 0 0 3px rgba(47,109,246,.12)}
.search input{flex:1;background:none;border:none;outline:none;color:var(--ink);font-size:14px}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{padding:6px 12px;border-radius:20px;border:1px solid var(--line);background:var(--panel);color:var(--muted);cursor:pointer;font-size:12.5px;font-weight:600;box-shadow:var(--shadow-sm)}
.chip:hover{border-color:var(--brand);color:var(--brand)}
.chip.on{background:var(--brand);border-color:var(--brand);color:#fff}
.chip.on.hi{background:var(--hi);border-color:var(--hi)}
.chip.on.mid{background:var(--mid);border-color:var(--mid)}
select.theme-sel{background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:10px;padding:9px 11px;font-size:13px;max-width:230px;box-shadow:var(--shadow-sm)}

/* 三列布局：院校 / 教师列表 / 详情 */
.app3{display:grid;grid-template-columns:212px minmax(0,1fr) minmax(0,1.18fr);gap:16px;align-items:start}
.middle{min-width:0}
.schools{position:sticky;top:74px;display:flex;flex-direction:column;gap:7px}
.schools-h{font-size:12px;font-weight:700;color:var(--faint);letter-spacing:.5px;padding:2px 4px 4px}
.school-item{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:11px 13px;cursor:pointer;box-shadow:var(--shadow-sm);position:relative;overflow:hidden}
.school-item:hover{border-color:#c4d4ee}
.school-item.active{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand)}
.school-item.active::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--brand)}
.school-item.disabled{opacity:.5;cursor:default;box-shadow:none}
.school-item .sn{font-weight:700;font-size:14px;color:var(--ink)}
.school-item .sm{font-size:11.5px;color:var(--faint);margin-top:2px}
.count{color:var(--faint);font-size:12.5px;margin:2px 2px 10px}

/* professor cards */
.cards{display:flex;flex-direction:column;gap:10px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;cursor:pointer;transition:.14s;position:relative;overflow:hidden;box-shadow:var(--shadow-sm)}
.card:hover{border-color:#c4d4ee;transform:translateY(-1px);box-shadow:var(--shadow-md)}
.card.sel{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand),var(--shadow-md)}
.card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--lo)}
.card.t-高::before{background:var(--hi)} .card.t-中::before{background:var(--mid)} .card.t-低::before{background:var(--lo)}
.card h3{margin:0 0 3px;font-size:16px;display:flex;align-items:center;gap:9px;color:var(--ink)}
.tierbadge{font-size:11px;font-weight:800;padding:2px 8px;border-radius:6px;color:#fff}
.t-高 .tierbadge,.tb-高{background:var(--hi)} .t-中 .tierbadge,.tb-中{background:var(--mid)} .t-低 .tierbadge,.tb-低{background:var(--lo)}
.card .meta{color:var(--muted);font-size:12.5px;margin-bottom:7px}
.card .meta b{color:var(--ink);font-weight:600}
.themetags{display:flex;flex-wrap:wrap;gap:5px}
.ttag{font-size:11.5px;padding:3px 8px;border-radius:6px;background:var(--panel2);border:1px solid var(--line);color:var(--muted)}
.card .res-preview{margin-top:8px;color:var(--faint);font-size:12px}

/* detail pane */
.detail-pane{position:sticky;top:74px;align-self:start;max-height:calc(100vh - 92px);overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-lg)}
.dp-head{padding:18px 20px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,#f4f8ff,var(--panel))}
.dp-head h2{margin:0 0 4px;font-size:21px;display:flex;align-items:center;gap:10px;color:var(--ink)}
.dp-head .sub{color:var(--muted);font-size:13px}
.dp-close{position:absolute;right:14px;top:14px;cursor:pointer;color:var(--muted);font-size:20px;line-height:1}
.dp-close:hover{color:var(--ink)}
.dp-body{padding:18px 20px}
.sec{margin-bottom:20px}
.sec h4{margin:0 0 9px;font-size:13px;color:var(--brand2);text-transform:uppercase;letter-spacing:.6px;display:flex;align-items:center;gap:7px;font-weight:800}
.sec h4 .ico{font-size:14px}
.dirs{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px}
.dirs li{background:var(--panel2);border-left:3px solid var(--brand);padding:8px 11px;border-radius:0 8px 8px 0;font-size:13px;color:var(--ink)}
.reslist{display:flex;flex-direction:column;gap:8px}
.resrow{background:var(--panel2);border:1px solid var(--line);border-radius:9px;padding:10px 12px}
.resrow .top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.resrow .rid{font-family:ui-monospace,Menlo,monospace;font-size:11px;color:var(--faint)}
.resrow .rname{font-weight:700;font-size:13.5px;color:var(--ink)}
.cat-pill{font-size:10.5px;padding:1px 7px;border-radius:5px;font-weight:700;color:#fff}
.resrow .intro{color:var(--muted);font-size:12px;margin-top:4px}
.statusdot{font-size:10.5px;padding:1px 7px;border-radius:5px;font-weight:700}
.statusdot.on{background:rgba(27,166,114,.14);color:var(--ok)}
.statusdot.off{background:rgba(148,163,182,.18);color:var(--lo)}
.why{font-size:12.5px;color:var(--muted);margin-bottom:8px;padding-left:10px;border-left:2px solid var(--line)}
.why b{color:var(--ink)}
.h4note{font-weight:500;color:var(--faint);font-size:11px;text-transform:none;letter-spacing:0}

/* 数据资源 × 研究契合点 区块 */
.vblock{background:linear-gradient(180deg,#f7faff,#fdfeff);border:1px solid #dde7f6;border-radius:11px;padding:12px 13px;margin-bottom:11px}
.vblock .vb-th{font-size:13px;font-weight:800;color:var(--brand2);margin-bottom:9px;display:flex;align-items:center;gap:6px}
.vblock .vb-th::before{content:"▸";color:var(--brand)}
.vblock .reslist{margin-bottom:9px}
.vblock .vb-why{font-size:12.5px;line-height:1.7;color:#42526b;background:#fff;border-left:3px solid var(--brand);border-radius:0 8px 8px 0;padding:9px 12px}

/* 代表性论文 */
.focus-note{background:linear-gradient(180deg,#fff7ec,#fffdf8);border:1px solid #f0dcb4;border-radius:9px;padding:9px 12px;font-size:12.5px;line-height:1.65;color:#6b5526;margin-bottom:9px}
.papers{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:7px}
.papers a.ptitle{color:var(--brand2)} .papers a.ptitle:hover{text-decoration:underline}
.papers li{background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:8px 11px}
.papers .ptitle{display:block;font-size:13px;color:var(--ink);font-weight:600;line-height:1.5}
.papers .pmeta{display:block;font-size:11.5px;color:var(--faint);margin-top:3px}
.algos{display:flex;flex-wrap:wrap;gap:6px}
.algo{font-size:11.5px;padding:4px 9px;border-radius:6px;background:rgba(26,167,154,.1);border:1px solid rgba(26,167,154,.25);color:var(--met)}
.umbrella{background:linear-gradient(180deg,#fff8ea,#fffdf7);border:1px solid #f0dfb6;border-radius:10px;padding:12px 14px;font-size:12.5px;color:var(--ink)}
.umbrella b{color:var(--gold)}
.empty{padding:40px;text-align:center;color:var(--faint)}
.detail-empty{padding:64px 28px;text-align:center;color:var(--faint)}
.detail-empty .de-ico{font-size:34px;margin-bottom:12px}
.detail-empty .de-t{font-size:15px;font-weight:700;color:var(--muted);margin-bottom:6px}
.detail-empty .de-s{font-size:12.5px;line-height:1.6;max-width:260px;margin:0 auto}

/* resource catalog tab */
.catgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}
.catcard{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:13px 15px;box-shadow:var(--shadow-sm)}
.catcard:hover{box-shadow:var(--shadow-md);border-color:#c4d4ee}
.catcard h3{margin:0 0 6px;font-size:14.5px;display:flex;gap:8px;align-items:center;color:var(--ink)}
.catcard .intro{color:var(--muted);font-size:12.5px}
.catcard .fields{margin-top:8px;font-size:11.5px;color:var(--faint);max-height:54px;overflow:hidden}
.catsec-title{font-size:15px;font-weight:800;margin:22px 0 12px;color:var(--ink);display:flex;align-items:center;gap:9px}
.catsec-title .ln{flex:1;height:1px;background:var(--line)}

.footer{color:var(--faint);font-size:12px;text-align:center;padding:26px 0 10px;border-top:1px solid var(--line);margin-top:24px}
.btn{background:var(--brand);color:#fff;border:none;border-radius:8px;padding:8px 14px;font-weight:700;cursor:pointer;font-size:13px;box-shadow:0 2px 8px rgba(47,109,246,.28)}
.btn:hover{background:var(--brand2)}
.btn.ghost{background:var(--panel);border:1px solid var(--line);color:var(--ink);box-shadow:var(--shadow-sm)}
.btn.ghost:hover{border-color:var(--brand);color:var(--brand)}
.btn-row{display:flex;gap:8px;margin-top:6px}

@media(max-width:1100px){
  .app3{grid-template-columns:180px minmax(0,1fr) minmax(0,1.05fr)}
}
@media(max-width:980px){
  .app3{grid-template-columns:1fr}
  .schools{position:static;flex-direction:row;flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px}
  .schools-h{display:none}
  .school-item{min-width:150px;flex:none}
  .detail-pane{position:fixed;inset:0;top:0;z-index:50;max-height:100vh;border-radius:0}
  .detail-pane.is-empty{display:none}
  .tabs .tab{padding:7px 10px}
}
@media print{
  header,.toolbar,.stats,.tabs,.dp-close,.cards,.count,.btn-row,.schools{display:none!important}
  .app3{grid-template-columns:1fr}
  body{background:#fff;color:#000}
  .detail-pane{position:static;border:none;max-height:none;box-shadow:none}
}
