/* ============================================================
 * 新版列表组件（学校卡 / 专业分类 / 专业详情）
 * 依赖 detail.css / data.css 里的 CSS 变量
 * ============================================================ */

/* ---------- 首页：学校卡 ---------- */
.uni-card{
  display:flex;
  flex-direction:column;
  gap:6px;
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  padding:20px;
  position:relative;
  overflow:hidden;
  text-decoration:none;
  color:inherit;
  box-shadow:var(--sh);
  transition:border-color .18s, box-shadow .18s, transform .18s;
}
.uni-card::before{
  content:"";
  position:absolute;
  left:0;
  top:0;
  bottom:0;
  width:4px;
  background:var(--accent);
}
.uni-card:hover{
  border-color:var(--brand-line);
  box-shadow:var(--sh-hover);
  transform:translateY(-3px);
}
.uni-rank{
  align-self:flex-start;
  border-radius:8px;
  padding:4px 9px;
  font-size:12px;
  font-weight:700;
  letter-spacing:.3px;
}
.uni-rank.t10{ background:var(--gold-bg); color:#b9770a; border:1px solid #f6dfa6; }
.uni-rank.t30{ background:var(--brand-soft); color:var(--accent-d); border:1px solid var(--brand-line); }
.uni-rank.t60{ background:var(--blue-bg); color:#2b6cb0; border:1px solid #cfe0fb; }
.uni-rank.tx{ background:var(--gray-bg); color:#6b6978; border:1px solid #e4e3ea; }
.rank-badge{
  display:inline-flex;
  align-items:baseline;
  gap:6px;
  background:var(--brand-soft);
  color:var(--accent-d);
  border:1px solid var(--brand-line);
  border-radius:10px;
  padding:5px 12px;
  font-weight:800;
  font-size:15px;
}
.fit-badge{
  font-size:11px;
  border-radius:6px;
  padding:2px 7px;
  color:#9a6b12;
  background:var(--gold-bg);
  border:1px solid #f0e0b0;
}
.fit-badge.ok{ color:#0e8a5a; background:var(--green-bg); border-color:#bfe9d6; }
.fit-badge.na{ color:var(--muted); background:var(--gray-bg); border-color:#e4e3ea; }
.uni-top{
  display:flex;
  align-items:center;
  gap:8px;
  margin-bottom:4px;
}
.quick{
  display:flex;
  gap:6px;
  flex-wrap:wrap;
  margin-top:8px;
}
.qchip{
  font-size:11.5px;
  border-radius:6px;
  padding:3px 8px;
  background:var(--chip);
  color:#5a5870;
  border:1px solid var(--line);
  line-height:1.45;
  max-width:100%;
}
.qchip b{ color:var(--accent-d); }
.empty-actions{
  display:flex;
  gap:10px;
  justify-content:center;
  margin-top:16px;
  flex-wrap:wrap;
}
.uni-name{ font-size:20px; font-weight:700; margin-top:4px; }
.uni-en{ font-size:13px; color:var(--muted); }
.uni-meta{ font-size:13px; color:var(--muted); margin-top:6px; }
.uni-count{ font-size:14px; margin-top:2px; }
.uni-count strong{ font-size:16px; }
.uni-go{ margin-top:auto; padding-top:12px; color:var(--accent); font-size:14px; font-weight:600; }
.skeleton{
  display:grid;
  gap:16px;
}
.sk-card{
  height:180px;
  border-radius:var(--r);
  background:linear-gradient(100deg,#eeeef3 30%,#f7f6fb 50%,#eeeef3 70%);
  background-size:200% 100%;
  animation:sk 1.3s infinite;
}
.sk-line{ height:74px; }
@keyframes sk{ to{ background-position:-200% 0; } }
.empty{
  grid-column:1/-1;
  background:var(--card);
  border:1px dashed var(--line);
  border-radius:10px;
  padding:36px;
  text-align:center;
  color:var(--muted);
}
.stamp{ color:var(--muted); font-size:12px; }
/* 官网巡检状态：接在「更新于 …」后面的一段。后端没接上时整段不渲染（见 lib/data.js），
   所以这里只负责分隔符，不做「有没有」的判断。 */
.stamp-sync::before{ content:' · '; }

/* ---------- 大学页 ---------- */
.uni-head{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  padding:24px 26px;
  box-shadow:var(--sh);
}
.uni-head h1{ margin:0 0 4px; font-size:28px; }
.uni-head .sub{ margin:3px 0 0; }
.head-meta{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  margin:14px 0 16px;
}
.head-meta span{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:8px;
  padding:5px 11px;
  font-size:12.5px;
  color:var(--ink2);
}
.head-links{ display:flex; gap:10px; flex-wrap:wrap; }

.uni-general{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:12px;
  margin-top:16px;
  padding:0 20px;
}
.uni-general summary{
  cursor:pointer;
  padding:16px 0;
  font-size:16px;
  font-weight:600;
  list-style:none;
  display:flex;
  align-items:center;
  gap:10px;
}
.uni-general summary::-webkit-details-marker{ display:none; }
.uni-general summary::before{
  content:'▸';
  color:var(--muted);
  font-size:12px;
}
.uni-general[open] summary::before{ content:'▾'; }
.sum-hint{ color:var(--muted); font-size:13px; font-weight:400; }
.gen-body{ padding:0 0 18px; }
.gen-table{ width:100%; border-collapse:collapse; font-size:14px; }
.gen-table th{
  text-align:left;
  font-weight:600;
  width:180px;
  padding:8px 10px 8px 0;
  border-top:1px solid var(--line);
  vertical-align:top;
}
.gen-table td{ padding:8px 0; border-top:1px solid var(--line); }
.gen-table tr:first-child th, .gen-table tr:first-child td{ border-top:0; }
.gen-notes{ margin:12px 0 0; padding-left:20px; font-size:13px; color:var(--muted); }
.gen-notes li{ margin:3px 0; }
.muted{ color:var(--muted); }

.fac-wrap{ margin-top:18px; }
.fac-tools{
  display:flex;
  align-items:center;
  gap:10px;
  flex-wrap:wrap;
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--r);
  padding:12px 14px;
  position:sticky;
  top:12px;
  z-index:5;
  box-shadow:var(--sh);
}
.prog-search{
  flex:1 1 240px;
  border:1px solid var(--line);
  border-radius:10px;
  padding:9px 12px;
  font-size:14px;
}
.mini-btn{
  border:1px solid var(--line);
  background:var(--soft);
  border-radius:10px;
  padding:9px 13px;
  font-size:13px;
  cursor:pointer;
}
.mini-btn:hover{ background:var(--chip); }
.mini-btn.ghost{ background:transparent; }
.prog-count{ color:var(--muted); font-size:13px; }

/* 成绩筛选（三个下拉） */
.grade-row{ align-items:center; }
.grade-selects{ display:flex; align-items:center; gap:6px; }
.grade-select{
  appearance:none;
  -webkit-appearance:none;
  border:1px solid var(--line);
  border-radius:8px;
  background:var(--card) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6'><path d='M0 0l5 6 5-6z' fill='%239aa2ab'/></svg>") no-repeat right 9px center;
  color:var(--ink);
  font-family:inherit;
  font-size:13.5px;
  padding:8px 26px 8px 10px;
  cursor:pointer;
  min-width:64px;
}
.grade-select:focus{ outline:2px solid #c7d6ff; outline-offset:1px; }
/* 专业行上的「需特定科目」标记 */
.prog-flag{
  flex:0 0 auto;
  font-size:11.5px;
  color:#8a6d1f;
  background:#fff6dd;
  border:1px solid #f0e0b0;
  border-radius:5px;
  padding:1px 6px;
  white-space:nowrap;
}
.prog-type{
  color:#5d5470;
  background:#f1effa;
  border-color:#dcd7ee;
}

/* 雅思筛选 */
.ielts-row{
  display:flex;
  align-items:center;
  gap:8px;
  flex-wrap:wrap;
  margin-top:10px;
  padding:10px 14px;
  background:var(--soft);
  border:1px solid var(--line);
  border-radius:10px;
}
.ielts-label{ font-size:13px; color:var(--ink); font-weight:600; }
.ielts-input{
  width:140px;
  border:1px solid var(--line);
  border-radius:8px;
  padding:8px 10px;
  font-size:13px;
  background:var(--card);
  color:var(--ink);
}
.ielts-input:focus{ outline:2px solid #c7d6ff; outline-offset:1px; }
.ielts-hint{ font-size:12.5px; color:var(--muted); }
.ielts-na{
  font-size:13px;
  color:var(--muted);
  line-height:1.6;
}
.ielts-compare{
  margin:12px 0 0;
  padding:9px 12px;
  border-radius:8px;
  font-size:13.5px;
  line-height:1.6;
}
.ielts-compare.ok{ background:#eefaf3; border:1px solid #cdeee0; color:#1a7f4b; }
.ielts-compare.bad{ background:#fff8e8; border:1px solid #f2e2bd; color:#9a6b12; }
.ielts-compare.none,
.ielts-compare.na{ background:var(--soft); border:1px solid var(--line); color:var(--muted); }

.fac{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:10px;
  margin-top:10px;
  overflow:hidden;
}
.fac-head{
  width:100%;
  display:flex;
  align-items:center;
  gap:10px;
  background:none;
  border:0;
  padding:14px 16px;
  cursor:pointer;
  font-family:inherit;
  text-align:left;
}
.fac-head:hover{ background:var(--soft); }
.fac-caret{ color:var(--muted); font-size:12px; width:12px; }
.fac-name{ font-size:16px; font-weight:700; }
.fac-en{ font-size:13px; color:var(--muted); }
.fac-count{
  margin-left:auto;
  background:var(--chip);
  border-radius:999px;
  padding:2px 10px;
  font-size:13px;
  font-weight:600;
  color:#33415c;
}
.fac.closed .fac-body{ display:none; }
.fac.closed .fac-caret{ transform:rotate(-90deg); }

.fac-body{ border-top:1px solid var(--line); }
/* 每行：链接 + 收藏按钮（按钮放在 <a> 外面，避免交互元素嵌套） */
.prog-wrap{
  position:relative;
  border-top:1px solid #f1f3f6;
}
.prog-wrap:first-child{ border-top:0; }
.prog{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:14px;
  padding:12px 52px 12px 18px;
  text-decoration:none;
  color:inherit;
}
.prog-wrap:hover{ background:#faf8ff; }
.prog-name{ font-size:15px; flex:1 1 auto; min-width:0; }
.prog-name em{
  display:block;
  font-style:normal;
  font-size:12.5px;
  color:var(--muted);
  margin-top:2px;
}
.prog-meta{ color:var(--muted); font-size:13px; text-align:right; max-width:48%; overflow-wrap:anywhere; }

/* ---------- 专业详情 ---------- */
.quickmeta{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  margin:14px 0 16px;
}
.quickmeta span{
  background:var(--chip);
  border-radius:6px;
  padding:5px 10px;
  font-size:13px;
}
/* .reqgrid / .rcard / .rc-* 的完整定义见文件末尾「第 4 步：专业详情页」段落
   （四块统一结构 + 你的成绩对照 + 官网原文收窄），这里不再保留旧版 .sys/.big/.sub 规则 */
.orig{
  border:1px solid var(--line);
  border-radius:var(--r);
  background:var(--soft);
  padding:0 14px;
  margin-top:10px;
}
.orig summary{
  cursor:pointer;
  padding:11px 0;
  font-size:13px;
  font-weight:650;
  color:var(--ink2);
  list-style:none;
}
.orig summary::-webkit-details-marker{ display:none; }
.orig summary::before{ content:"▸ "; color:var(--muted); }
.orig[open] summary::before{ content:"▾ "; }
.orig .ot{
  padding:0 0 12px;
  font-size:12.5px;
  color:var(--muted);
  line-height:1.7;
}
.ot-item{ padding:7px 0; border-top:1px solid var(--line); }
.ot-item:first-child{ border-top:0; }
.ot-key{ font-weight:650; color:var(--ink2); margin-right:8px; }
.official-note{ color:var(--muted); font-size:13px; margin:0 0 14px; }
.req-table{ width:100%; border-collapse:collapse; font-size:15px; }
.req-table th{
  text-align:left;
  width:150px;
  font-weight:600;
  color:#33415c;
  padding:12px 12px 12px 0;
  border-top:1px solid var(--line);
  vertical-align:top;
}
.req-table td{ padding:12px 0; border-top:1px solid var(--line); }
.req-table tr:first-child th, .req-table tr:first-child td{ border-top:0; }
.none{ color:#a9b0b8; }
.en-item{ display:flex; gap:12px; padding:8px 0; border-top:1px solid #f1f3f6; font-size:14px; }
.en-item:first-child{ border-top:0; }
.en-key{ width:150px; color:var(--muted); flex-shrink:0; }
.en-val{ font-weight:500; }
.crumbs a{ color:var(--muted); text-decoration:none; }
.crumbs a:hover{ color:var(--ink); }

@media (max-width:900px){
  .cards{ grid-template-columns:repeat(2,1fr); }
}
@media (max-width:620px){
  .cards{ grid-template-columns:1fr; }
  .prog{ flex-direction:column; gap:4px; padding-right:44px; }
  .prog-fav{ top:10px; transform:none; }
  .prog-meta{ max-width:100%; text-align:left; }
  .req-table th, .gen-table th{ width:110px; }
  .en-key{ width:110px; }
  .fac-en{ display:none; }
  /* 手机上收紧筛选区高度 */
  .ielts-input{ width:112px; }
  .grade-input{ width:128px; }
  .prog-flag{ order:-1; }
  .fac-tools{ position:static; }
  .ielts-hint{ display:none; }
  .ielts-row{ padding:8px 10px; margin-top:8px; }
  .ielts-label{ font-size:12.5px; }
}
.missing-line{
  margin:14px 0 0;
  padding-top:12px;
  border-top:1px dashed var(--line);
  color:#9aa2ab;
  font-size:13px;
}
.val-list{
  margin:0;
  padding-left:18px;
  font-size:14px;
}
.val-list li{ margin:3px 0; }
/* 长 URL 不换行会撑破手机宽度 */
.note{ overflow-wrap:anywhere; word-break:break-word; }
.note a{ word-break:break-all; }
.req-table td, .gen-table td{ overflow-wrap:anywhere; }
/* 专业页里的校级门槛折叠块 */
.gen-details summary{
  cursor:pointer;
  list-style:none;
  display:flex;
  align-items:baseline;
  gap:10px;
  flex-wrap:wrap;
}
.gen-details summary::-webkit-details-marker{ display:none; }
.gen-details summary h2{ margin:0; display:inline; }
.gen-details summary::before{ content:'▸'; color:var(--muted); font-size:12px; }
.gen-details[open] summary::before{ content:'▾'; }
.gen-details[open] summary{ margin-bottom:12px; }
/* ---------- 首页分类筛选 ---------- */
.filters{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  margin:0 0 18px;
}
.filter{
  display:inline-flex;
  align-items:center;
  gap:6px;
  border:1px solid var(--line);
  background:var(--card);
  border-radius:999px;
  padding:7px 14px;
  font-size:13.5px;
  cursor:pointer;
  font-family:inherit;
  color:var(--ink);
}
.filter:hover{ background:var(--chip); }
.filter.active{ background:var(--accent); border-color:var(--accent); color:#fff; }
.filter-n{
  font-size:12px;
  opacity:.75;
  background:rgba(0,0,0,.06);
  border-radius:999px;
  padding:1px 7px;
}
.filter.active .filter-n{ background:rgba(255,255,255,.22); }
.uni-todo{
  display:inline-block;
  align-self:flex-start;
  margin-top:2px;
  background:#f4f5f7;
  color:#8a929b;
  border-radius:5px;
  padding:3px 9px;
  font-size:12.5px;
}
.uni-card.todo{ background:#fcfcfd; }
.uni-card.todo .uni-go{ color:#9aa2ab; }

/* 雅思筛选结果 */
.home-ielts{ margin:0 0 16px; }
.uni-fit{
  margin-top:8px;
  font-size:13px;
  color:#1a7f4b;
  background:#eefaf3;
  border:1px solid #cdeee0;
  border-radius:6px;
  padding:4px 9px;
  align-self:flex-start;
}
.uni-fit strong{ font-size:14.5px; }
.uni-fit.zero{ color:#9a6b12; background:#fff8e8; border-color:#f2e2bd; }
.uni-fit.na{ color:var(--muted); background:var(--chip); border-color:var(--line); }
.uni-card.dim{ opacity:.5; }
.uni-card.dim:hover{ opacity:.75; }
/* 学院标题下的小字汇总（雅思 / 学科成绩） */
.fac-title{ display:flex; flex-direction:column; gap:2px; min-width:0; }
.fac-sum{
  font-size:12px;
  color:#8a929b;
  font-weight:400;
  letter-spacing:0;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
@media (max-width:620px){
  .fac-sum{ white-space:normal; }
}
/* 专业行右侧：成绩+雅思标注（学院级标注已取消） */
.prog-right{
  display:flex;
  flex-direction:column;
  align-items:flex-end;
  gap:2px;
  text-align:right;
  flex:0 0 auto;
  margin-left:auto;
  max-width:52%;
}
/* 右侧块内的 meta 不再受旧的 48% 限制，避免被挤成两三行 */
.prog-right .prog-meta{ max-width:none; }
.prog-req{
  font-size:13px;
  font-weight:600;
  color:#33415c;
  overflow-wrap:anywhere;
}
.g-badge{
  font-weight:800;
  font-size:12.5px;
  border-radius:7px;
  padding:3px 8px;
  white-space:nowrap;
}
.g-al{ background:#eef4ff; color:#2b6cb0; }
.g-ib{ background:#fff3e8; color:#c0671a; }
.g-ie{ background:#e9fbf3; color:#0e8a5a; }
.prog-dot{
  width:8px;
  height:8px;
  border-radius:50%;
  background:#d9d7e4;
}
.fit-ok .prog-dot{ background:var(--green); }
.fit-near .prog-dot{ background:var(--gold); }
.fit-none .prog-dot{ background:#d9d7e4; }
.prog-meta{ font-size:12.5px; }
@media (max-width:620px){
  .prog-right{ align-items:flex-start; text-align:left; }
}
/* 手机端：分类条横向滑动，省掉三四行的竖向占位 */
@media (max-width:620px){
  .filters{
    flex-wrap:nowrap;
    overflow-x:auto;
    padding-bottom:6px;
    scrollbar-width:none;
    -webkit-overflow-scrolling:touch;
  }
  .filters::-webkit-scrollbar{ display:none; }
  .filter{ flex:0 0 auto; }
}

/* ---------- 收藏夹 ---------- */
/* 与实际学校卡使用同一网格，数据到达时不从单列骨架切到三列。 */
body.list-page #cards > .skeleton { grid-column: 1 / -1; grid-template-columns: inherit; gap: inherit; }
body.list-page #cards .sk-card { min-height: 240px; height: auto; }
@media (max-width:620px) {
  body.list-page #filters { min-height: 52px; align-items: center; }
}

.fav-link{
  display:inline-flex;
  align-items:center;
  gap:4px;
  border:1px solid var(--line);
  background:var(--card);
  border-radius:8px;
  padding:8px 12px;
  font-size:13.5px;
  color:var(--ink);
  text-decoration:none;
  white-space:nowrap;
}
.fav-link:hover{ background:var(--chip); }
.fav-link.has{ border-color:#f0c86a; background:#fffaf0; }
.fav-count{ font-weight:700; color:#b8860b; }

/* 专业行右侧的收藏星 */
.prog-fav{
  position:absolute;
  top:50%;
  right:10px;
  transform:translateY(-50%);
  width:30px;
  text-align:center;
  font-size:16px;
  line-height:1;
  color:#b9c0cc;
  cursor:pointer;
  border:0;
  background:transparent;
  border-radius:6px;
  padding:5px 0;
  user-select:none;
}
.prog-fav:hover{ color:#e0a800; background:var(--chip); }
.prog-fav.on{ color:#e0a800; }
.prog-wrap:hover .prog-fav{ color:#cfd6e0; }
.prog-wrap:hover .prog-fav.on{ color:#e0a800; }

/* 专业页的收藏按钮 */
.fav-btn.on{ border-color:#f0c86a; background:#fffaf0; color:#a97a00; }

/* 收藏夹页 */
.fav-actions{ margin:14px 0 6px; }
.fav-group{ margin-top:22px; }
.fav-group h2{ display:flex; align-items:center; gap:8px; }
.fav-list{ display:flex; flex-direction:column; gap:8px; margin-top:10px; }
.fav-item{
  display:flex;
  align-items:center;
  gap:12px;
  background:var(--card);
  border:1px solid var(--line);
  border-radius:10px;
  padding:12px 14px;
}
.fav-main{
  flex:1 1 auto;
  min-width:0;
  display:flex;
  flex-wrap:wrap;
  align-items:baseline;
  gap:6px 12px;
  text-decoration:none;
  color:var(--ink);
}
.fav-name{ font-weight:600; }
.fav-name em{ font-style:normal; font-weight:400; color:var(--muted); font-size:12.5px; margin-left:6px; }
.fav-fac{ font-size:12.5px; color:var(--muted); }
.fav-meta{ font-size:12.5px; color:#33415c; display:flex; align-items:center; gap:6px; }
.fav-remove{ flex:0 0 auto; }
.prog-req-none{ color:var(--muted); font-size:12.5px; }

/* 校级统一要求（A-Level / IB / AP / SAT 等）在专业页的标注 */
.uni-tag{
  margin-top:4px;
  font-size:12px;
  color:var(--muted);
}
/* 参考值（非官网渠道） */
.ref-tag{
  margin-top:6px;
  font-size:12.5px;
  line-height:1.55;
  color:#7a5b16;
  background:#fff8e6;
  border-left:2px solid #e8c46a;
  padding:4px 8px;
  border-radius:4px;
}
.ref-tag a{ color:inherit; text-decoration:underline; }
.gen-table-req{ margin-top:8px; }
.gen-sub{ margin-top:10px; font-size:12.5px; color:var(--muted); }
.gen-table-ref{ margin-top:6px; }
@media (max-width:620px){
  .prog-fav{ width:24px; font-size:15px; }
  .fav-item{ flex-direction:column; align-items:stretch; gap:8px; }
}

/* ============================================================
 * 设计基础层（v1：统一 tokens + 暖米白底 + 轻投影 + 统计条 + 焦点态）
 * 本文件在三份 CSS 中最后加载，因此这里的 :root 会覆盖 data.css / detail.css 里的旧值。
 * 只改观感，不动任何 DOM 结构与交互逻辑。
 * ============================================================ */
:root{
  /* 底色改暖米白，卡片纯白；阴影更轻、边框更清楚 */
  --bg:#f8f7f4;
  --card:#fff;
  --ink:#1b1a17;
  --ink2:#4a473f;
  --muted:#6f6a5e;
  --line:#e8e4da;
  --chip:#f4f2ec;
  --soft:#fbfaf7;
  /* 紫色只留给品牌与交互（按钮 / 选中 / 链接 / 重点数据） */
  --accent:#7c5cf0;
  --accent-d:#6d4ae0;
  --brand-soft:#f2effc;
  --brand-line:#ddd3f7;
  --gray-bg:#f1efe9;
  --r:12px;
  --r-lg:16px;
  --sh:0 1px 2px rgba(30,26,20,.04), 0 6px 18px rgba(30,26,20,.05);
  --sh-hover:0 2px 4px rgba(30,26,20,.05), 0 10px 24px rgba(30,26,20,.08);
}
body{ background:var(--bg); }

/* 数字用等宽，便于扫读成绩/分数 */
.uni-count strong, .qchip b, .fit-badge, .gen-table-req, .ref-tag{ font-variant-numeric:tabular-nums; }

/* 顶部：标题清晰、搜索框当主入口、收藏做成明确的图标按钮 */
.topbar{ background:#fffdfa; border-bottom:1px solid var(--line); }
.search{
  min-width:260px;
  padding:11px 14px !important;
  border-radius:11px !important;
  border:1px solid var(--line) !important;
  background:#fff !important;
}
.search:focus{ outline:none; border-color:var(--brand-line) !important; box-shadow:0 0 0 3px var(--brand-soft); }
.fav-link{
  display:inline-flex; align-items:center; gap:6px;
  padding:9px 13px; border:1px solid var(--line); border-radius:11px;
  background:#fff; color:var(--ink2); text-decoration:none; font-weight:600;
}
.fav-link:hover{ border-color:var(--brand-line); color:var(--accent-d); }

/* 国家筛选：分段条，选中态明显、未选中更轻 */
.filters{ gap:2px; padding:3px; background:#fff; border:1px solid var(--line); border-radius:11px; }
.filter{ border:0 !important; background:transparent !important; border-radius:9px !important; }
.filter.active{ background:var(--accent) !important; color:#fff !important; }
.filter.active .filter-n{ color:#fff !important; opacity:.85; }

/* 卡片：白底 + 清楚边框 + 轻投影；左侧紫条淡化，不再到处染色 */
.uni-card{
  border:1px solid var(--line);
  box-shadow:var(--sh);
  padding:18px 20px;
  gap:5px;
}
.uni-card::before{ width:3px; background:var(--brand-line); }
.uni-card:hover{ transform:translateY(-2px); border-color:var(--brand-line); box-shadow:var(--sh-hover); }
.uni-card:hover::before{ background:var(--accent); }

/* 排名徽章与匹配徽章：统一高度与对齐方式，避免像补丁 */
.uni-rank, .fit-badge{
  display:inline-flex; align-items:center; justify-content:center;
  height:24px; padding:0 9px; border-radius:7px;
  font-size:12px; font-weight:600; line-height:1;
}
.uni-top{ gap:8px; }

/* 摘要数据：统一的小型统计条 */
.quick{ gap:6px; margin-top:8px; }
.qchip{
  display:inline-flex; align-items:center; gap:4px;
  padding:3px 9px; border-radius:7px;
  background:var(--chip); border:1px solid var(--line); color:var(--ink2);
  font-size:12px; letter-spacing:.01em;
}
.qchip b{ color:var(--accent-d); font-weight:700; }

/* 骨架屏：米白底 + 细边框，去掉大块紫 */
.skeleton{ gap:12px; }
.sk-card{
  background:#fff; border:1px solid var(--line); border-radius:var(--r-lg);
  animation:none; position:relative; overflow:hidden;
}
.sk-card::after{
  content:""; position:absolute; inset:0;
  background:linear-gradient(100deg,transparent 30%,rgba(124,92,240,.05) 50%,transparent 70%);
  background-size:200% 100%; animation:sk 1.4s infinite;
}

/* 键盘可达：统一 focus 环（按钮 / 链接 / 输入 / 可聚焦卡片）
   注意：这里不要设 border-radius，否则聚焦时会把卡片 / 药丸按钮自己的圆角改成 8px，
   形状会「跳一下」。outline 在支持 outline-follows-border-radius 的浏览器里会跟着元素自身圆角走。 */
a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible,
summary:focus-visible, [tabindex]:focus-visible{
  outline:2px solid var(--accent);
  outline-offset:2px;
}

/* hover 只做轻微反馈，不做大动画 */
.uni-card, .filter, .qchip, .fav-link{ transition:border-color .16s, box-shadow .16s, transform .16s, background-color .16s, color .16s; }

/* 移动端：卡片单列且更紧凑 */
@media (max-width:620px){
  .uni-card{ padding:14px 15px; gap:4px; border-radius:14px; }
  .uni-name{ font-size:17px; margin-top:2px; }
  .uni-en{ font-size:12px; }
  .uni-go{ padding-top:8px; font-size:13px; }
  .search{ min-width:0; width:100%; }
}

/* ---------- 卡片三行结构（第 2 步：校名+英文名+徽章 / 国家·规模 / 门槛统计条）---------- */
.uni-head{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:10px;
}
.uni-id{ min-width:0; }
.uni-badges{
  display:flex;
  align-items:center;
  gap:6px;
  flex:0 0 auto;
  padding-top:1px;
}
.uni-meta{
  margin-top:2px;
  font-size:13px;
  color:var(--muted);
  font-variant-numeric:tabular-nums;
}
.uni-meta strong{ color:var(--ink); font-weight:700; }
/* 排名徽章走中性色系，状态色留给"匹配"徽章 */
.uni-rank{
  background:var(--gray-bg);
  border:1px solid var(--line);
  color:var(--ink2);
  font-variant-numeric:tabular-nums;
}
.uni-rank.t10{ background:#fdf3e3; border-color:#f0dcb4; color:#8a6a1f; }
.uni-rank.t30{ background:var(--brand-soft); border-color:var(--brand-line); color:var(--accent-d); }
.uni-rank.t60{ background:#eef4ff; border-color:#d8e4fb; color:#2f5ea8; }
.fit-badge.ok{ background:var(--brand-soft); border:1px solid var(--brand-line); color:var(--accent-d); }
.fit-badge.na{ background:var(--gray-bg); border:1px solid var(--line); color:var(--muted); font-weight:500; }
@media (max-width:620px){
  .uni-head{ gap:8px; }
  .uni-rank, .fit-badge{ height:22px; padding:0 8px; font-size:11.5px; }
  .uni-meta{ font-size:12.5px; }
}

/* ============================================================
 * 第 3 步：学校详情页（身份区 / 校级要求面板 / sticky 工具栏 / 学院与专业行 / 收藏淡化）
 * 说明：详情页的 <header class="uni-head"> 与列表卡片的 .uni-head 同名，这里用 header.uni-head
 * 提高优先级覆盖回块级布局，避免被我上面的卡片 flex 规则带跑。
 * ============================================================ */
header.uni-head{
  display:block;
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  box-shadow:var(--sh);
  padding:22px 24px;
  margin-bottom:16px;
}
header.uni-head .rank-badge{
  display:inline-flex; align-items:center;
  height:24px; padding:0 10px; border-radius:7px;
  background:var(--brand-soft); border:1px solid var(--brand-line); color:var(--accent-d);
  font-size:12px; font-weight:600; font-variant-numeric:tabular-nums;
}
header.uni-head h1{
  margin:10px 0 2px;
  font-size:clamp(22px,3.2vw,30px);
  line-height:1.25;
  letter-spacing:-.01em;
}
header.uni-head .sub{ color:var(--muted); font-size:14px; }
header.uni-head .head-meta{
  display:flex; flex-wrap:wrap; gap:6px 14px;
  margin-top:12px; color:var(--ink2); font-size:13px;
  font-variant-numeric:tabular-nums;
}
header.uni-head .head-meta span{ position:relative; }
header.uni-head .head-meta span + span::before{
  content:""; position:absolute; left:-8px; top:50%;
  width:3px; height:3px; border-radius:50%; background:var(--line); transform:translateY(-50%);
}
header.uni-head .head-meta strong{ color:var(--ink); font-weight:700; }
header.uni-head .head-links{ display:flex; gap:10px; margin-top:16px; }
header.uni-head .btn{
  display:inline-flex; align-items:center; height:34px; padding:0 14px;
  border-radius:9px; font-size:13px; font-weight:600; text-decoration:none;
  background:var(--accent); border:1px solid var(--accent); color:#fff;
}
header.uni-head .btn:hover{ background:var(--accent-d); border-color:var(--accent-d); }
header.uni-head .btn.ghost{ background:#fff; border-color:var(--line); color:var(--ink2); font-weight:500; }
header.uni-head .btn.ghost:hover{ border-color:var(--brand-line); color:var(--accent-d); }

/* 校级要求面板：浅底 + 细边，不再像普通段落 */
.uni-general{
  background:var(--soft);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  padding:4px 18px;
  margin-bottom:18px;
}
.uni-general summary{
  padding:13px 0; margin:0;
  font-size:14px; font-weight:600;
  cursor:pointer; list-style:none;
}
.uni-general summary::after{ content:"展开"; float:right; color:var(--muted); font-size:12px; font-weight:500; }
.uni-general[open] summary::after{ content:"收起"; }
.gen-details{ padding-bottom:6px; }

/* sticky 工具栏：滚动时保持可用，但视觉更轻 */
.fac-tools{
  position:sticky;
  top:8px;
  z-index:20;
  display:flex; align-items:center; gap:10px;
  padding:10px 12px;
  margin-bottom:12px;
  background:rgba(248,247,244,.86);
  backdrop-filter:saturate(1.6) blur(10px);
  -webkit-backdrop-filter:saturate(1.6) blur(10px);
  border:1px solid var(--line);
  border-radius:12px;
}
.fac-tools .prog-search{
  flex:1 1 auto; min-width:0;
  height:34px; padding:0 12px;
  border:1px solid var(--line); border-radius:9px; background:#fff;
  font-size:13px;
}
.fac-tools .prog-search:focus{ outline:none; border-color:var(--brand-line); box-shadow:0 0 0 3px var(--brand-soft); }
.fac-tools .mini-btn{ height:34px; padding:0 13px; border-radius:9px; }
.fac-tools .prog-count{ color:var(--muted); font-size:12.5px; white-space:nowrap; }

/* 学院块：白卡 + 轻边，标题改为清晰的标题栏 */
.fac-wrap{ display:block; }
.fac{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--r-lg);
  margin-bottom:10px;
  overflow:hidden;
}
.fac-head{
  display:flex; align-items:center; gap:10px; width:100%;
  padding:14px 16px;
  background:none; border:0; text-align:left; cursor:pointer;
}
.fac-head:hover{ background:var(--soft); }
.fac-caret{ color:var(--muted); font-size:12px; transition:transform .16s; }
.fac:not(.closed) .fac-caret{ transform:rotate(180deg); }
.fac-name{ font-size:15px; font-weight:650; color:var(--ink); }
.fac-en{ color:var(--muted); font-size:12.5px; }
.fac-count{
  margin-left:auto;
  display:inline-flex; align-items:center; height:22px; padding:0 8px;
  border-radius:7px; background:var(--chip); border:1px solid var(--line);
  color:var(--ink2); font-size:12px; font-weight:600;
  font-variant-numeric:tabular-nums;
}
.fac-body{ border-top:1px solid var(--line); }

/* 专业行：hover 轻微底色；收藏按钮平时不抢注意力 */
.prog-wrap{ position:relative; border-bottom:1px solid var(--line); }
.prog-wrap:last-child{ border-bottom:0; }
.prog-wrap:hover{ background:var(--soft); }
.prog{ display:flex; gap:12px; padding:12px 16px; text-decoration:none; color:inherit; }
.prog-name{ flex:1 1 auto; min-width:0; font-size:14.5px; }
.prog-name em{ display:block; margin-top:2px; color:var(--muted); font-size:12px; font-style:normal; }
.prog-dot{
  display:inline-block; width:5px; height:5px; margin-right:8px;
  border-radius:50%; background:var(--brand-line); vertical-align:middle;
}
.prog-wrap:hover .prog-dot{ background:var(--accent); }
.prog-right{ flex:0 0 auto; display:flex; align-items:center; gap:6px; flex-wrap:wrap; justify-content:flex-end; }
.prog-meta{ color:var(--muted); font-size:12px; font-variant-numeric:tabular-nums; }
.g-badge, .prog-flag{
  display:inline-flex; align-items:center; height:22px; padding:0 8px;
  border-radius:7px; font-size:11.5px; font-weight:600;
  background:var(--chip); border:1px solid var(--line); color:var(--ink2);
  font-variant-numeric:tabular-nums;
}
.g-badge.g-ie{ background:var(--brand-soft); border-color:var(--brand-line); color:var(--accent-d); }
.prog-flag{ background:#fff8e6; border-color:#eadfc0; color:#7a5b16; font-weight:500; }
.prog-req{ display:inline-flex; align-items:center; gap:4px; flex-wrap:wrap; }
.prog-req-none{ color:var(--muted); font-size:12px; }
.prog-fav{
  position:absolute; right:8px; top:50%; transform:translateY(-50%);
  width:30px; height:30px; border:0; border-radius:9px;
  background:transparent; color:var(--muted); font-size:17px; cursor:pointer;
  opacity:.35; transition:opacity .16s, background-color .16s, color .16s;
}
.prog-wrap:hover .prog-fav, .prog-fav:focus-visible, .prog-fav.on{ opacity:1; }
.prog-fav.on{ color:var(--gold); }
.prog-fav:hover{ background:var(--brand-soft); color:var(--accent-d); }

@media (max-width:760px){
  header.uni-head{ padding:18px 16px; }
  header.uni-head .head-links{ flex-wrap:wrap; }
  .fac-tools{ top:6px; padding:8px 10px; gap:8px; flex-wrap:wrap; }
  .fac-name{ font-size:14px; }
  .fac-en{ display:none; }
  .prog{ padding:11px 12px; gap:8px; }
  .prog-right{ justify-content:flex-start; }
  .prog-fav{ opacity:.5; }
}

/* 学院标题右侧摘要（专业数 / 最低雅思 / 最常见成绩档） */
.fac-summary{
  margin-left:auto;
  display:inline-flex; align-items:center; gap:6px; flex-wrap:wrap;
}
.fac-summary:empty{ display:none; }
.fac-sum{
  display:inline-flex; align-items:center; height:22px; padding:0 8px;
  border-radius:7px; background:var(--soft); border:1px solid var(--line);
  color:var(--ink2); font-size:11.5px; font-weight:500;
  font-variant-numeric:tabular-nums;
}
.fac-sum::before{
  content:""; width:3px; height:3px; border-radius:50%;
  background:var(--brand-line); margin-right:5px;
}
.fac-count{ margin-left:8px; }
@media (max-width:760px){
  .fac-summary{ display:none; }
}

/* ============================================================
 * 第 4 步：专业详情页（四块统一结构 / 你的成绩对照 / 官网原文收窄）
 * 口径、reqTable 内容与收藏按钮逻辑都没动：这里只把 A-Level / IB / AP / IELTS
 * 四块合成同一套骨架，并把「你的成绩 vs 官方」的判定放到卡片底部与顶部对照带。
 * 注意：.reqgrid 的列数规则已从旧段落搬到这里（旧段落只留注释），
 * 因为本文件最后加载，媒体查询写在末尾才能保证 ≤620px 不会被前面的 repeat(4) 盖掉。
 * ============================================================ */

/* 四块统一骨架：体系名 + 来源角标 / 大数值 / 口径小字 / 你的成绩对照（可选） */
.reqgrid{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:14px;
  margin:0 0 4px;
}
.rcard{
  position:relative;
  display:flex;
  flex-direction:column;
  min-width:0;
  padding:16px 16px 14px;
  border:1px solid var(--line);
  border-radius:var(--r);
  background:var(--card);
  transition:border-color .16s, box-shadow .16s;
}
.rcard.mine{
  border-color:var(--brand-line);
  background:linear-gradient(180deg,#f8f6ff,#fff 58%);
  box-shadow:none;
}
.rc-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  min-height:22px;
}
.rc-name{ font-size:12.5px; font-weight:650; color:var(--ink2); letter-spacing:.02em; }
.rc-from{
  display:inline-flex; align-items:center; height:19px; padding:0 7px;
  border-radius:6px; background:var(--chip); border:1px solid var(--line);
  color:var(--muted); font-size:11px; white-space:nowrap;
  font-variant-numeric:tabular-nums;
}
.rc-big{
  margin:10px 0 3px;
  font-size:clamp(26px,3.4vw,32px);
  font-weight:800;
  line-height:1.12;
  letter-spacing:-.01em;
  color:var(--ink);
  font-variant-numeric:tabular-nums;
  overflow-wrap:anywhere;
}
.rcard.na .rc-big{ color:#c9c4b8; font-weight:700; }
.rc-note{
  font-size:12px; line-height:1.55; color:var(--muted);
  font-variant-numeric:tabular-nums; overflow-wrap:anywhere;
}
/* 对照行钉在卡片底部，同一行的四张卡能对齐成一条线 */
.rc-mine{
  margin-top:auto; padding-top:10px;
  border-top:1px dashed var(--line);
  display:flex; flex-direction:column; gap:3px;
}
.rc-mine .rm-txt{
  display:flex; align-items:center; gap:6px;
  font-size:12.5px; font-weight:650; line-height:1.45; color:var(--ink2);
}
.rc-mine .rm-txt::before{
  content:""; flex:0 0 auto; width:6px; height:6px; border-radius:50%;
  background:#c9c4b8;
}
.rc-mine .rm-note{
  font-size:11.5px; line-height:1.5; color:var(--muted);
  font-variant-numeric:tabular-nums;
}
.rc-mine.ok .rm-txt{ color:#1a7f4b; }
.rc-mine.ok .rm-txt::before{ background:#3fb883; }
.rc-mine.bad .rm-txt{ color:#9a6b12; }
.rc-mine.bad .rm-txt::before{ background:#e0a72e; }
.rc-mine.none .rm-txt, .rc-mine.na .rm-txt{ color:var(--muted); font-weight:500; }

/* 空态引导：没填成绩时也能看懂这块在做什么 */
.rc-tip{
  margin:0 0 14px; padding:10px 12px;
  border:1px dashed var(--line); border-radius:var(--r);
  background:var(--soft); color:var(--muted);
  font-size:12.5px; line-height:1.6;
}
.rc-tip a{ color:var(--accent-d); text-decoration:none; }
.rc-tip a:hover{ text-decoration:underline; }

/* 「你的成绩 vs 官方」对照带（填过成绩 / 雅思才出现） */
.mine-bar{
  display:flex; flex-wrap:wrap; align-items:center; gap:8px 10px;
  margin:0 0 14px; padding:10px 12px;
  border:1px solid var(--line); border-radius:var(--r);
  background:var(--soft);
}
.mine-bar .mb-label{
  display:inline-flex; align-items:center; height:22px; padding:0 9px;
  border-radius:7px; background:var(--brand-soft); border:1px solid var(--brand-line);
  color:var(--accent-d); font-size:11.5px; font-weight:650;
}
.mine-bar .mb-vals{
  display:inline-flex; align-items:center; gap:6px; flex-wrap:wrap;
  color:var(--ink2); font-size:13px; font-variant-numeric:tabular-nums;
}
.mine-bar .mb-vals b{ color:var(--ink); font-weight:700; }
.mine-bar .mb-sub{ color:var(--muted); font-size:12px; }
.mine-bar .mb-sep{ color:var(--line); }
.mine-bar .mb-verdict{
  display:inline-flex; align-items:center; gap:6px; margin-left:auto;
  padding:3px 10px; border-radius:7px;
  font-size:12px; font-weight:600; font-variant-numeric:tabular-nums;
}
.mine-bar .mb-verdict::before{
  content:""; flex:0 0 auto; width:6px; height:6px; border-radius:50%; background:currentColor;
}
.mine-bar.ok .mb-verdict{ background:#eefaf3; border:1px solid #cdeee0; color:#1a7f4b; }
.mine-bar.bad .mb-verdict{ background:#fff8e8; border:1px solid #f2e2bd; color:#9a6b12; }
.mine-bar.none .mb-verdict{ background:var(--chip); border:1px solid var(--line); color:var(--muted); }
.mine-bar .mb-edit{
  display:inline-flex; align-items:center; height:26px; padding:0 10px;
  border:1px solid var(--line); border-radius:8px; background:#fff;
  color:var(--ink2); font-size:12px; text-decoration:none;
}
.mine-bar .mb-edit:hover{ border-color:var(--brand-line); color:var(--accent-d); }

/* 官网原文：收窄成附录，默认收起 */
.orig{ background:var(--soft); padding:0 14px; margin-top:14px; }
.orig summary{
  display:flex; align-items:center; gap:8px;
  padding:12px 0; font-size:12.5px; font-weight:600; color:var(--ink2);
}
.orig summary::before, .orig[open] summary::before{ content:none; }
.orig summary::after{ content:"展开"; margin-left:auto; color:var(--muted); font-size:12px; font-weight:500; }
.orig[open] summary::after{ content:"收起"; }
.orig .og-t{ font-weight:650; }
.orig .og-hint{ color:var(--muted); font-size:12px; font-weight:400; }
.orig .ot{
  max-width:74ch; padding:2px 0 14px 12px;
  border-left:2px solid var(--line);
  font-size:13px; line-height:1.7; color:var(--ink2);
  font-variant-numeric:tabular-nums;
}
.orig .ot .req-table{ font-size:13.5px; }
.orig .ot .req-table th{ width:120px; font-size:12.5px; font-weight:600; color:var(--muted); }
.orig .ot .val-list{ font-size:13.5px; }

@media (max-width:900px){
  .reqgrid{ grid-template-columns:repeat(2,1fr); }
}
@media (max-width:620px){
  .reqgrid{ grid-template-columns:1fr; gap:10px; }
  .rcard{ padding:14px 14px 12px; }
  .rc-big{ margin:8px 0 2px; }
  .mine-bar{ flex-direction:column; align-items:flex-start; gap:7px; }
  .mine-bar .mb-verdict{ margin-left:0; }
  .orig .og-hint{ display:none; }
  .orig .ot{ max-width:none; padding-left:10px; }
  .orig .ot .req-table th{ width:96px; }
}

/* ============================================================
 * 第 5 步：移动端细节 + 键盘焦点复查（三张页面共用，list.css 最后加载）
 * 1) 触控目标：≤640px 下可点元素命中区 ≥44px，视觉尺寸尽量不动
 * 2) 表单控件字号 ≥16px：避免 iOS 聚焦时把整页放大
 * 3) 焦点环：修掉「被 overflow:hidden 裁掉」和「聚焦时改圆角」两个问题
 * 4) 动效：尊重 prefers-reduced-motion；触摸端补按压反馈
 * ============================================================ */

/* iOS 横屏不再自动放大正文 */
html{ -webkit-text-size-adjust:100%; text-size-adjust:100%; }

/* 长英文名 / 长链接在窄屏不撑破容器（anywhere 会参与 min-content 计算，flex 里也能收缩） */
.crumbs, .rc-name, .prog-name, .fav-name, .en-val, .fac-name,
.req-table td, .gen-table td, .val-list li{ overflow-wrap:anywhere; }
header.uni-head h1{ text-wrap:balance; }

/* ---- 键盘焦点复查 ---- */
/* 学院标题栏与成绩筛选条：父级 overflow:hidden 会把外置的焦点环切掉，改成向内描边 */
.fac-head:focus-visible, .filterbar summary:focus-visible{ outline-offset:-3px; }

/* ---- 触摸端：按压反馈 + 品牌色高亮（鼠标端仍走 hover） ---- */
@media (hover:none){
  a, button, summary{ -webkit-tap-highlight-color:rgba(124,92,240,.14); }
  .uni-card:active, header.uni-head .btn:active, .mini-btn:active, .fav-link:active,
  .filter:active, .mb-edit:active{ transform:translateY(1px); }
  .prog-fav:active{ transform:translateY(-50%) scale(.9); }
}

/* ---- 减少动态效果 ---- */
@media (prefers-reduced-motion: reduce){
  *, *::before, *::after{
    animation-duration:.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
  }
  .uni-card:hover{ transform:none; }
}

/* ---- 移动端：触控目标与排版 ---- */
@media (max-width:640px){
  .topbar{ padding:18px 0 14px; }

  /* 返回：视觉高度不变（负 margin 抵掉），命中区撑到 44px */
  .back{
    display:inline-flex; align-items:center;
    min-height:44px; margin:-11px -8px; padding:0 8px;
  }

  /* 页头按钮 / 小按钮 / 国家筛选 / 收藏夹入口 / 原文折叠条 */
  header.uni-head .btn{ height:44px; padding:0 16px; font-size:14px; }
  .mini-btn, .fav-link, .filter{ min-height:44px; }
  .filterbar summary, .orig summary{ min-height:44px; }
  .fb-btn{ display:inline-flex; align-items:center; }
  .mb-edit{ height:44px; padding:0 16px; }

  /* 表单控件：16px 防 iOS 自动缩放，高度补到 44px */
  .search, .ielts-input, .grade-select, .programme-input, .programme-select{
    font-size:16px; min-height:44px;
  }
  .ielts-input{ padding:10px; }

  /* 专业行收藏星：命中区 44×44，星的位置与原来一致（原来的中心就在距右边 23px 处） */
  .prog-fav{
    width:44px; height:44px; right:0; top:50%;
    transform:translateY(-50%); font-size:18px; opacity:.6;
  }
  .prog{ padding-right:52px; }

  header.uni-head .head-meta{ gap:6px 12px; }
}

/* 返回栏吸顶：只到 620px —— 学校页的 .fac-tools 恰好在这个断点改回 static，
   再宽一点两条 sticky 会互相压住（工具栏会滑到吸顶栏下面看不见） */
@media (max-width:620px){
  .detail-top{ position:sticky; top:0; z-index:30; }
}

/* ============================================================
 * 第 6 轮修复：筛选后「校名被挤成竖排」+ 匹配结论与学校页对不上
 * 1) 匹配结论从卡片右上角挪到独立一行（.uni-fit-row），右上角只留 QS 徽章；
 *    .uni-head 加 flex-wrap + .uni-id 保底宽度，以后文案再长也不会挤压校名。
 * 2) 结论数字的含义同步收紧：只算「官网公布了门槛、且不高于你填的条件」的专业；
 *    未单独公布门槛的另起一行说明（详见 app.js 的 fits / unknownCount）。
 * ============================================================ */
.uni-head{ flex-wrap:wrap; }
.uni-badges{ flex-wrap:wrap; }
.uni-id{ flex:1 1 auto; min-width:8em; }
.uni-fit-row{
  display:flex; flex-wrap:wrap; align-items:center; gap:6px;
  margin-top:6px;
}
.uni-fit-row .fit-badge{ font-variant-numeric:tabular-nums; }
.fit-note{
  font-size:13px; line-height:1.5; color:var(--muted);
  overflow-wrap:anywhere;
}
@media (max-width:620px){
  .uni-fit-row{ gap:4px; }
  .fit-note{ font-size:13px; }
}

/* 筛选下的「暂无符合」卡片：淡一点，但别淡到看不清校名（旧值 .5 在整页都未达标时会发灰） */
.uni-card.dim{ opacity:.62; }
.uni-card.dim:hover{ opacity:.9; }

/* 学校页：填了的条件对本案不适用时（美本 / 只有校级资格线）单独一行说明，
   不塞进 sticky 工具栏的计数里，免得撑破那一行 */
.uni-filter-note{
  margin:2px 2px 12px;
  padding:9px 11px;
  border:1px dashed var(--line);
  border-radius:var(--r);
  background:var(--soft);
  color:var(--muted);
  font-size:12.5px;
  line-height:1.6;
  overflow-wrap:anywhere;
}
.uni-filter-note[hidden]{ display:none; }

/* 筛选时学院标题右侧变成「命中 / 全部 专业」，别让它换行 */
.fac-count{ white-space:nowrap; }

/* ============================================================
 * 升学系统顶部的「返回鸽小站」入口
 * 原来只有主站 → 升学系统的单向链接，进来之后没有回路；这个 chip 补上出口。
 * 样式对齐站内既有的小徽章 / 详情页返回按钮；移动端命中区补到 44px（与第 5 步约定一致）。
 * ============================================================ */
.back-home{
  display:inline-flex;
  align-items:center;
  gap:4px;
  height:30px;
  padding:0 11px;
  margin-bottom:8px;
  border:1px solid var(--line);
  border-radius:8px;
  background:var(--card);
  color:var(--ink2);
  font-size:12.5px;
  font-weight:600;
  text-decoration:none;
  transition:border-color .16s, color .16s, background-color .16s;
}
.back-home:hover{
  border-color:var(--brand-line);
  color:var(--accent-d);
  background:var(--soft);
}
@media (max-width:640px){
  .back-home{ height:44px; padding:0 14px; font-size:13px; }
}


/* ============================================================
 * 首页固定（图钉）：把大学固定到鸽小站首页 hero，顶掉首页大字
 * 与「考试日历」的 📌 固定考试同一套玩法（localStorage + 首页 hero 渲染）
 * ============================================================ */
.pin-link{
  display:inline-flex; align-items:center; gap:4px;
  border:1px solid var(--line); background:var(--card);
  border-radius:8px; padding:8px 12px; font-size:13.5px; color:var(--muted);
  white-space:nowrap;
}
.pin-link.has{ border-color:var(--brand-line); background:var(--brand-soft); color:var(--accent); }
.pin-count{ font-weight:700; }

/* 学校卡右上角的图钉 */
.uni-pin{
  width:30px; height:30px; flex:0 0 auto; padding:0;
  display:grid; place-items:center;
  border:1px solid var(--line); background:var(--card); color:var(--muted);
  border-radius:9px; cursor:pointer;
  transition:color .18s, border-color .18s, background .18s, transform .18s, box-shadow .18s;
}
.uni-pin svg{ width:16px; height:16px; }
.uni-pin:hover{ color:var(--accent); border-color:var(--brand-line); background:var(--brand-soft); transform:translateY(-1px); }
.uni-pin.on{
  color:#fff; border-color:transparent;
  background:linear-gradient(135deg,#7c5cf0,#ec4899);
  box-shadow:0 4px 12px rgba(124,92,240,.35);
}
.uni-pin.on:hover{ transform:translateY(-1px) scale(1.04); }

/* 学校详情页头部那颗 */
.uni-pin-btn.on{ background:linear-gradient(135deg,#7c5cf0,#ec4899); color:#fff; border-color:transparent; }

/* 固定 / 取消固定的提示条 */
.pin-toast{
  position:fixed; left:50%; bottom:26px; transform:translate(-50%,16px);
  background:#1b1a17; color:#fff; font-size:13.5px; padding:11px 18px; border-radius:999px;
  max-width:86vw; text-align:center; opacity:0; pointer-events:none; z-index:99;
  transition:opacity .22s, transform .22s; box-shadow:0 12px 30px rgba(0,0,0,.24);
}
.pin-toast.show{ opacity:1; transform:translate(-50%,0); }

/* ============================================================
   深夜模式（2026-09-17 新增）
   ------------------------------------------------------------
   以前升学系统完全没有深色支持：首页是 OLED 纯黑（#08070E），
   点进最大的那张「升学系统」卡就是一堵白墙 —— 全站最明显的断裂。
   这里按 home.css 的深夜调色板补一层变量覆盖 + 少量硬编码色改写。
   变量在 :root 里定义，所以只需覆盖变量；只有那些直接写 #fff / 深蓝字 /
   浅色边框的地方需要点名重写（已逐条对应上面的选择器）。
   ============================================================ */
html.theme-dark {
  color-scheme: dark;
  --bg: #08070E;
  --card: #14121F;
  --ink: #ECEBF5;
  --ink2: #B9B6C9;
  --muted: #8E8AA3;
  --line: rgba(255, 255, 255, .10);
  --chip: rgba(255, 255, 255, .06);
  --soft: rgba(255, 255, 255, .035);
  --accent: #9B8CFF;
  --accent-d: #B7ACFF;
  --brand-soft: rgba(155, 140, 255, .16);
  --brand-line: rgba(155, 140, 255, .38);
  --gold: #E3B341;
  --gold-bg: rgba(227, 179, 65, .14);
  --green: #4ADE80;
  --green-bg: rgba(74, 222, 128, .13);
  --blue: #7BA7FF;
  --blue-bg: rgba(123, 167, 255, .14);
  --gray-bg: rgba(255, 255, 255, .07);
  --sh: 0 1px 2px rgba(0, 0, 0, .35), 0 6px 18px rgba(0, 0, 0, .28);
  --sh-hover: 0 2px 4px rgba(0, 0, 0, .4), 0 10px 24px rgba(0, 0, 0, .38);
}
/* 直接写死 #fff 的卡面 / 输入框：夜里换成卡片色 */
html.theme-dark .topbar { background: rgba(20, 18, 31, .92); }
html.theme-dark .fav-link,
html.theme-dark .filters,
html.theme-dark .sk-card,
html.theme-dark header.uni-head .btn.ghost,
html.theme-dark .fac-tools .prog-search,
html.theme-dark .mine-bar .mb-edit { background: var(--card); }
/* 深蓝字（#33415c）在深底上几乎看不见 */
html.theme-dark .qchip b,
html.theme-dark .req-table th,
html.theme-dark .prog-req,
html.theme-dark .fav-meta,
html.theme-dark .uni-count { color: var(--ink2); }
/* 浅灰分隔线 */
html.theme-dark .req-table th,
html.theme-dark .en-item { border-top-color: var(--line); }
/* 语义色徽章：浅底换深底 */
html.theme-dark .fit-badge { border-color: rgba(227, 179, 65, .34); }
html.theme-dark .fit-badge.ok { border-color: rgba(74, 222, 128, .34); }
html.theme-dark .ielts-compare.ok,
html.theme-dark .uni-fit.ok,
html.theme-dark .mine-bar.ok .mb-verdict { background: rgba(74, 222, 128, .13); border-color: rgba(74, 222, 128, .32); color: #7BE0A8; }
html.theme-dark .ielts-compare.bad,
html.theme-dark .uni-fit.zero,
html.theme-dark .mine-bar.bad .mb-verdict { background: rgba(227, 179, 65, .14); border-color: rgba(227, 179, 65, .32); color: #E3C089; }
html.theme-dark .rc-mine.ok .rm-txt { color: #7BE0A8; }
html.theme-dark .rc-mine.bad .rm-txt { color: #E3C089; }
html.theme-dark .fav-link.has,
html.theme-dark .fav-btn.on { background: rgba(227, 179, 65, .14); border-color: rgba(227, 179, 65, .4); }
html.theme-dark .prog-fav:hover { background: var(--chip); }
/* 收藏夹 / 骨架屏里的浅色斑块 */
html.theme-dark .sk-card::after { background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .05), transparent); }

/* ── 仅供读屏的主标题（2026-09-17 加）─────────────────────────────
   这三个页面（学校 / 专业 / 收藏夹）的标题是脚本渲染的，静态 HTML 里一个 <h1> 都没有，
   读屏进来听不到"这是哪一页"。加一个视觉隐藏的 h1，样式和子页的 .sr-only 一致。 */
.sr-only {
  position: absolute !important;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* 列表样板：状态比装饰更醒目，限定在升学首页，避免影响学校详情与收藏夹。 */
body.list-page{ --list-action:#5B4AE8; }
html.theme-dark body.list-page{ --list-action:#5A48EA; }
body.list-page .search{
  border-color:var(--brand-line) !important;
  box-shadow:0 0 0 2px var(--brand-soft);
}
body.list-page .search:focus-visible{
  outline:2px solid var(--list-action);
  outline-offset:2px;
}
body.list-page .filter.active{ background:var(--list-action) !important; }
body.list-page .filters.is-searching .filter.active{
  background:transparent !important;
  color:var(--ink) !important;
}
body.list-page .filters.is-searching .filter.active .filter-n{
  background:rgba(0,0,0,.06);
  color:inherit !important;
}
body.list-page .filter:focus-visible{ outline-offset:-2px; }
body.list-page .filterbar{
  border-style:solid;
  box-shadow:none;
}
body.list-page .filterbar.is-active{
  border-color:var(--brand-line);
  background:var(--brand-soft);
}
body.list-page .filterbar.is-active .fb-state{
  color:var(--accent-d);
  font-weight:650;
}
body.list-page .filterbar .fb-btn{
  background:var(--list-action);
  color:#fff;
}
body.list-page .filterbar[open] .fb-body{ background:var(--card); }
body.list-page .result-summary{
  display:flex;
  align-items:center;
  min-height:32px;
  margin:-2px 0 12px;
  color:var(--ink2);
  font-size:13px;
  font-variant-numeric:tabular-nums;
  line-height:1.5;
}
body.list-page .result-summary.has-filters{ color:var(--accent-d); }
body.list-page .uni-card.dim{
  opacity:1;
  border-style:dashed;
  background:var(--soft);
}
body.list-page .uni-card.dim .fit-badge{ font-weight:650; }
body.list-page .uni-card.dim:hover{ opacity:1; }
body.list-page .uni-card:focus-visible{
  outline:2px solid var(--list-action);
  outline-offset:3px;
}
body.list-page .empty{
  padding:34px 22px;
  border-color:var(--brand-line);
  background:var(--card);
}
body.list-page .empty strong{
  display:block;
  color:var(--ink);
  font-size:17px;
}
body.list-page .empty p{ margin:7px 0 0; line-height:1.6; overflow-wrap:anywhere; }
body.list-page .empty .mini-btn{
  background:var(--list-action);
  border-color:var(--list-action);
  color:#fff;
  font-weight:650;
}
body.list-page .empty .mini-btn:hover{ filter:brightness(.94); }
body.list-page .fav-link.has{
  background:var(--brand-soft);
  border-color:var(--brand-line);
  color:var(--accent-d);
}
body.list-page .fav-count{ color:inherit; font-variant-numeric:tabular-nums; }
@media (max-width:620px){
  body.list-page .result-summary{ font-size:13px; }
}

/* Long official URLs in requirement notes must wrap on phone screens. */
.section .list li { overflow-wrap: anywhere; word-break: break-word; }

/* ============================================================
   深色补丁（2026-10-01 浏览器截图审计后追加）
   现有 html.theme-dark 段漏掉的三处，深色下仍是浅色面：
   ① .search（顶栏搜索框）：748 行原规则 background:#fff !important，
      深色下白底白字，输入内容不可见；
   ② .uni-rank.tx（列表卡 QS 徽章）：47 行硬编码 color:#6b6978 /
      border:#e4e3ea，深底上发灰发亮；
   ③ .fac-tools（大学页专业搜索条容器）：943 行近白玻璃底
      rgba(248,247,244,.86)，之前只覆盖了内部的 .prog-search。
   全部限定在 html.theme-dark 下，浅色模式零影响。
   ============================================================ */
html.theme-dark .search{
  background:var(--card) !important;
  color:var(--ink) !important;
  border-color:var(--brand-line) !important;
}
html.theme-dark .search::placeholder{ color:var(--muted); }
html.theme-dark .uni-rank.tx{ color:var(--ink2); border-color:var(--line); }
html.theme-dark .fac-tools{
  background:rgba(20,18,31,.88);
  border-color:var(--line);
  box-shadow:var(--sh);
}

/* 唯一既有磨砂目标：滚动时浮在专业列表上的工具条。 */
.fac-tools {
  background: rgba(248, 247, 244, .76);
  -webkit-backdrop-filter: blur(26px) saturate(120%);
  backdrop-filter: blur(26px) saturate(120%);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .65), 0 6px 20px rgba(47, 41, 61, .04);
}
html.theme-dark .fac-tools {
  background: rgba(20, 18, 31, .8);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .12), 0 6px 20px rgba(0, 0, 0, .12);
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) { .fac-tools, html.theme-dark .fac-tools { background: var(--card, #f8f7f4); } }
@media (prefers-reduced-transparency: reduce) { .fac-tools, html.theme-dark .fac-tools { background: var(--card, #f8f7f4); -webkit-backdrop-filter: none; backdrop-filter: none; } }

.fac-tools { --muted: #4b435a; }
html.theme-dark .fac-tools { --muted: #d4cedf; }

/* Two fixed score rows: IELTS / TOEFL, then A-Level / IB. */
body.list-page .uni-card .quick-score-grid {
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:6px;
  margin-top:8px;
}
body.list-page .quick-score-grid .score-chip {
  display:flex;
  align-items:center;
  gap:6px;
  min-width:0;
  min-height:34px;
  box-sizing:border-box;
  padding:5px 7px;
  border-radius:5px;
  border-color:rgba(148,163,184,.18);
  background:rgba(241,245,249,.48);
}
body.list-page .score-label {
  display:flex;
  flex-direction:row;
  align-items:baseline;
  flex-shrink:0;
  gap:3px;
  color:var(--muted);
  font-size:12px;
  line-height:1.35;
}
body.list-page .score-pending {
  font-size:10px;
  line-height:1.2;
  color:var(--muted);
}
body.list-page .score-value {
  display:flex;
  flex-direction:row;
  align-items:baseline;
  flex-wrap:wrap;
  min-width:0;
  gap:1px 5px;
  font-size:12px;
  line-height:1.35;
}
body.list-page .score-value b,
body.list-page .score-secondary {
  font-variant-numeric:tabular-nums;
  overflow-wrap:anywhere;
}
body.list-page .score-value b { font-weight:600; }
body.list-page .score-secondary {
  font-size:11px;
  color:var(--accent-d);
}
@media (max-width:620px) {
  body.list-page .quick-score-grid .score-chip { padding:5px 7px; }
}
html.theme-dark body.list-page .quick-score-grid .score-chip {
  background:rgba(148,163,184,.035);
  border-color:rgba(148,163,184,.14);
}
@media (prefers-reduced-motion:reduce) {
  body.list-page .score-chip { transition:none; }
}
