:root {
  color-scheme: light;
  --color-primary: #E11D48;
  --color-primary-dark: #BE123C;
  --color-primary-soft: #FFF1F2;
  --color-background: #FFFFFF;
  --color-surface-alt: #F8F9FA;
  --color-surface: #FFFFFF;
  --color-text: #111827;
  --color-muted-text: #6B7280;
  --color-border: #E5E7EB;
  --color-focus: #E11D48;
  --badge-985-bg: #FEE2E2;   --badge-985-fg: #B91C1C;
  --badge-211-bg: #FEF3C7;   --badge-211-fg: #B45309;
  --badge-dfx-bg: #DBEAFE;   --badge-dfx-fg: #1D4ED8;
  --badge-en-bg: #FEE2E2;    --badge-en-fg: #B91C1C;
  --badge-cn-bg: #DBEAFE;    --badge-cn-fg: #1D4ED8;
  --font-body: Inter, "PingFang SC", "Microsoft YaHei", ui-sans-serif, system-ui, sans-serif;
  --font-display: "Inter", "PingFang SC", "Microsoft YaHei", ui-sans-serif, system-ui, sans-serif;
  --space-unit: 1rem;
  --radius-sm: 6px;
  --radius-md: 12px;
  --radius-lg: 16px;
  --shadow-card: 0 1px 3px rgba(0,0,0,.06);
  --shadow-card-hover: 0 6px 18px rgba(17,24,39,.10);
  --content-width: 72rem;
}

* { box-sizing: border-box; }

html { background: var(--color-background); color: var(--color-text); font-family: var(--font-body); }

body { margin: 0; min-height: 100dvh; display: flex; flex-direction: column; }

button, input, select, textarea { font: inherit; }

:focus-visible { outline: 3px solid var(--color-focus); outline-offset: 3px; }

.skip-link {
  left: 1rem; position: fixed; top: 1rem; transform: translateY(-200%);
  background: var(--color-primary); color: #fff; padding: .5rem 1rem;
  border-radius: var(--radius-sm); z-index: 100; transition: transform .15s;
}
.skip-link:focus { transform: translateY(0); }

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

/* ---------- Header ---------- */
.site-header {
  border-bottom: 1px solid var(--color-border);
  background: var(--color-background);
  position: sticky; top: 0; z-index: 50;
}
.site-header::before {
  content: ""; display: block; height: 4px;
  background: linear-gradient(90deg, #E11D48, #FB7185 55%, #F43F5E);
}
.header-inner {
  max-width: var(--content-width); margin: 0 auto; padding: .75rem 1.5rem;
  display: flex; align-items: center; gap: 2rem;
}
.brand { display: flex; align-items: center; gap: .65rem; text-decoration: none; color: var(--color-text); }
.brand-mark {
  width: 38px; height: 38px; border-radius: 10px; background: var(--color-primary);
  display: grid; place-items: center; color: #fff; flex: none;
}
.brand-mark svg { width: 22px; height: 22px; }
.brand-name { font-weight: 800; font-size: 1.05rem; line-height: 1.1; }
.brand-sub { display: block; font-size: .68rem; color: var(--color-muted-text); font-weight: 500; letter-spacing: .04em; }

.site-nav { display: flex; gap: .25rem; margin-left: auto; align-items: center; }
.site-nav a {
  text-decoration: none; color: var(--color-text); font-weight: 600; font-size: .92rem;
  padding: .5rem .9rem; border-radius: 999px;
}
.site-nav a:hover { background: var(--color-surface-alt); }
.site-nav a[aria-current="page"] { color: var(--color-primary); background: var(--color-primary-soft); }
.nav-toggle { display: none; }

/* ---------- Layout ---------- */
main { flex: 1; }
.container { max-width: var(--content-width); margin: 0 auto; padding: 0 1.5rem; }
.section { padding: 2.5rem 0; }
.section-alt { background: var(--color-surface-alt); }

.page-title { font-size: 1.9rem; font-weight: 800; letter-spacing: -.02em; margin: 0 0 .35rem; }
.page-sub { color: var(--color-muted-text); margin: 0 0 1.5rem; font-size: .95rem; }

/* ---------- Hero (home) ---------- */
.hero {
  background:
    radial-gradient(60rem 24rem at 85% -20%, rgba(225,29,72,.08), transparent),
    linear-gradient(180deg, #FFF7F8 0%, #FFFFFF 78%);
  border-bottom: 1px solid var(--color-border);
}
.hero-inner {
  max-width: var(--content-width); margin: 0 auto; padding: 3.5rem 1.5rem 3rem;
  display: grid; grid-template-columns: 1.25fr .75fr; gap: 2.5rem; align-items: center;
}
.hero-txt { text-align: center; }
.hero-art img {
  width: 100%; border-radius: var(--radius-lg); display: block;
  box-shadow: 0 24px 48px rgba(190, 18, 60, 0.22), 0 4px 12px rgba(0, 0, 0, 0.08);
}
.hero h1 { font-size: 2.6rem; font-weight: 800; letter-spacing: -.03em; margin: 0 0 .6rem; }
.hero h1 em { font-style: normal; color: var(--color-primary); }
.hero p { color: var(--color-muted-text); font-size: 1.05rem; margin: 0 auto 1.6rem; max-width: 40rem; }

.search-bar {
  display: flex; gap: .5rem; max-width: 42rem; margin: 0 auto;
  background: #fff; border: 1px solid var(--color-border); border-radius: 999px;
  padding: .4rem; box-shadow: var(--shadow-card);
}
.search-bar input {
  flex: 1; border: 0; outline: none; background: transparent;
  padding: .6rem 1rem; font-size: 1rem; min-width: 0;
}
.search-bar input:focus-visible { outline: none; }
.search-bar .search-btn { flex: none; }

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .45rem;
  border: 1px solid transparent; border-radius: 999px; cursor: pointer;
  font-weight: 700; text-decoration: none; transition: background .15s, box-shadow .15s;
  padding: .6rem 1.3rem; font-size: .95rem;
}
.btn svg { width: 16px; height: 16px; }
.btn-primary { background: var(--color-primary); color: #fff; }
.btn-primary:hover { background: var(--color-primary-dark); }
.btn-outline { background: #fff; color: var(--color-text); border-color: var(--color-border); }
.btn-outline:hover { border-color: var(--color-primary); color: var(--color-primary); }
.btn-sm { padding: .35rem .85rem; font-size: .85rem; }

.hero-stats { display: flex; justify-content: center; gap: 2.5rem; margin-top: 1.8rem; flex-wrap: wrap; }
.stat b { display: block; font-size: 1.6rem; font-weight: 800; color: var(--color-primary); }
.stat span { color: var(--color-muted-text); font-size: .85rem; }

/* ---------- Tabs & chips ---------- */
.tab-row { display: flex; gap: .5rem; flex-wrap: wrap; align-items: center; }
.tab-pill {
  border: 1px solid var(--color-border); background: #fff; color: var(--color-text);
  border-radius: 999px; padding: .5rem 1.15rem; font-weight: 700; font-size: .92rem;
  cursor: pointer; text-decoration: none; display: inline-flex; gap: .4rem; align-items: center;
}
.tab-pill:hover { border-color: var(--color-primary); color: var(--color-primary); }
.tab-pill[aria-selected="true"], .tab-pill.active {
  background: var(--color-primary); border-color: var(--color-primary); color: #fff;
}
.tab-pill small { font-weight: 600; opacity: .75; }

.chip-row { display: flex; flex-wrap: wrap; gap: .5rem; }
.chip {
  border: 1px solid var(--color-border); background: #fff; border-radius: 999px;
  padding: .35rem .85rem; font-size: .85rem; font-weight: 600; color: var(--color-text);
  cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; gap: .35rem;
}
.chip:hover { border-color: var(--color-primary); color: var(--color-primary); }
.chip.active { background: var(--color-primary); border-color: var(--color-primary); color: #fff; }
.chip small { opacity: .7; font-weight: 600; }

.filter-bar { display: flex; flex-direction: column; gap: .8rem; margin: 1.2rem 0 1.6rem; }
.filter-group { display: flex; align-items: baseline; gap: .75rem; flex-wrap: wrap; }
.filter-label {
  flex: none; width: 6.2rem; color: var(--color-muted-text); font-size: .82rem; font-weight: 700;
  text-transform: uppercase; letter-spacing: .05em;
}

/* ---------- Cards grid (always 3 columns) ---------- */
.grid-3 {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1.1rem;
}
.card {
  background: var(--color-surface); border: 1px solid var(--color-border);
  border-radius: var(--radius-md); box-shadow: var(--shadow-card);
  padding: 1.1rem 1.2rem; display: flex; flex-direction: column; gap: .55rem;
  text-decoration: none; color: var(--color-text);
  transition: box-shadow .15s, transform .15s;
}
a.card:hover { box-shadow: var(--shadow-card-hover); transform: translateY(-2px); }
.card-top { display: flex; justify-content: space-between; align-items: flex-start; gap: .5rem; }
.card-title { font-weight: 800; font-size: 1rem; line-height: 1.35; margin: 0; }
.card-title-en { color: var(--color-muted-text); font-size: .82rem; font-weight: 600; margin: 0; }
.card-meta { display: flex; flex-wrap: wrap; gap: .35rem; }
.card-foot {
  margin-top: auto; padding-top: .55rem; border-top: 1px dashed var(--color-border);
  display: flex; justify-content: space-between; align-items: center;
  color: var(--color-muted-text); font-size: .82rem; font-weight: 600;
}
.card-foot b { color: var(--color-primary); }

/* ---------- Badges ---------- */
.badge {
  display: inline-flex; align-items: center; border-radius: 999px;
  padding: .14rem .6rem; font-size: .72rem; font-weight: 800; letter-spacing: .02em;
  flex: none;
}
.badge-985 { background: var(--badge-985-bg); color: var(--badge-985-fg); }
.badge-211 { background: var(--badge-211-bg); color: var(--badge-211-fg); }
.badge-dfx { background: var(--badge-dfx-bg); color: var(--badge-dfx-fg); }
.badge-en  { background: var(--badge-en-bg);  color: var(--badge-en-fg); }
.badge-cn  { background: var(--badge-cn-bg);  color: var(--badge-cn-fg); }
.badge-plain { background: var(--color-surface-alt); color: var(--color-muted-text); }

/* ---------- Detail pages ---------- */
.detail-head {
  background: linear-gradient(180deg, #FFF7F8, #FFFFFF);
  border-bottom: 1px solid var(--color-border); padding: 2.2rem 0;
}
.detail-head h1 { margin: 0 0 .3rem; font-size: 2rem; font-weight: 800; letter-spacing: -.02em; }
.detail-head .en { color: var(--color-muted-text); font-weight: 600; margin: 0 0 .8rem; }
.detail-badges { display: flex; gap: .4rem; flex-wrap: wrap; }
.detail-grid { display: grid; grid-template-columns: 2fr 1fr; gap: 1.5rem; align-items: start; }
.panel {
  background: #fff; border: 1px solid var(--color-border); border-radius: var(--radius-md);
  box-shadow: var(--shadow-card); padding: 1.2rem 1.3rem; margin-bottom: 1.1rem;
}
.panel h2 {
  font-size: 1.05rem; font-weight: 800; margin: 0 0 .8rem;
  display: flex; align-items: center; gap: .5rem;
}
.panel h2 svg { width: 18px; height: 18px; color: var(--color-primary); }
.panel h3 { font-size: .9rem; margin: .9rem 0 .3rem; }
.panel p, .panel li { color: var(--color-text); font-size: .9rem; line-height: 1.6; }
.panel ul { margin: .3rem 0; padding-left: 1.1rem; }
.panel .muted { color: var(--color-muted-text); }
.kv { display: grid; grid-template-columns: auto 1fr; gap: .35rem .9rem; font-size: .9rem; }
.kv dt { color: var(--color-muted-text); font-weight: 600; white-space: nowrap; }
.kv dd { margin: 0; font-weight: 600; }
.sch-card { border: 1px solid var(--color-border); border-radius: var(--radius-sm); padding: .8rem .9rem; margin-bottom: .6rem; background: var(--color-surface-alt); }
.csc-badge { position: absolute; top: 18px; left: 18px; z-index: 2; width: 52px; height: 52px; border-radius: 50%; border: 2px solid rgba(255,255,255,.92); display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 800; font-size: .8rem; letter-spacing: .08em; background: rgba(159,18,57,.38); backdrop-filter: blur(2px); }
.csc-hero-sub { margin: .1rem 0 .35rem; color: rgba(255,255,255,.88); font-size: .98rem; font-weight: 600; }
.csc-view { display: inline-flex; align-items: center; margin-top: .15rem; padding: .4rem 1.05rem; border: 1.5px solid rgba(255,255,255,.85); border-radius: 999px; color: #fff; font-weight: 700; font-size: .9rem; text-decoration: none; transition: background .18s; }
.csc-view:hover { background: rgba(255,255,255,.16); }
.sch-card.sch-photo { display: grid; grid-template-columns: 38% 1fr; padding: 0; overflow: hidden; align-items: stretch; }
.sch-sub { display: block; color: var(--color-primary); font-weight: 700; font-size: .84rem; margin-top: .1rem; }
.sch-cov { display: flex; flex-wrap: wrap; align-items: baseline; gap: .2rem .5rem; margin-top: .7rem; }
.sch-cov-l { color: var(--color-muted-text); font-size: .78rem; font-weight: 600; }
.sch-cov-v { color: var(--color-primary); font-weight: 800; font-size: .85rem; margin-left: auto; }
.sch-cov-bar { flex-basis: 100%; height: 6px; border-radius: 999px; background: rgba(159,18,57,.14); overflow: hidden; }
.sch-cov-bar i { display: block; height: 100%; border-radius: 999px; background: linear-gradient(90deg, #E11D48, #9F1239); }
.sch-photo-img { width: 100%; height: 100%; min-height: 112px; object-fit: cover; background: linear-gradient(135deg, #E11D48, #9F1239); }
.sch-card.sch-photo .sch-card-main { padding: .8rem .9rem; min-width: 0; }
@media (max-width: 640px) { .sch-card.sch-photo { grid-template-columns: 34% 1fr; } .sch-photo-img { min-height: 92px; } }
.sch-card h4 { margin: 0 0 .3rem; font-size: .88rem; display: flex; align-items: center; gap: .4rem; flex-wrap: wrap; }
.sch-card p { margin: .15rem 0; font-size: .82rem; color: var(--color-text); }
.sch-card .muted { color: var(--color-muted-text); }
.tag-csc { background: var(--color-primary); color: #fff; border-radius: 4px; padding: .05rem .4rem; font-size: .68rem; font-weight: 800; }

.side-card {
  background: #fff; border: 1px solid var(--color-border); border-radius: var(--radius-md);
  box-shadow: var(--shadow-card); padding: 1.1rem 1.2rem; position: sticky; top: 5.5rem;
}
.side-card h2 { font-size: 1rem; margin: 0 0 .7rem; }
.side-card .kv { margin-bottom: .8rem; }

/* ---------- Grouped sections ---------- */
.group-block { margin-bottom: 1.6rem; }
.group-head {
  display: flex; align-items: center; gap: .6rem; margin: 0 0 .7rem;
  font-size: 1rem; font-weight: 800;
}
.group-head .chip { pointer-events: none; }
.hscroll { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); gap: 1rem; overflow-x: auto; padding-bottom: .4rem; }
.hscroll .card { min-width: 0; }

/* ---------- Pagination ---------- */
.pagination { display: flex; justify-content: center; align-items: center; gap: .35rem; margin: 2rem 0 1rem; flex-wrap: wrap; }
.pagination a, .pagination span {
  min-width: 2.3rem; text-align: center; padding: .45rem .6rem; border-radius: var(--radius-sm);
  border: 1px solid var(--color-border); background: #fff; font-size: .88rem; font-weight: 700;
  text-decoration: none; color: var(--color-text);
}
.pagination a:hover { border-color: var(--color-primary); color: var(--color-primary); }
.pagination .current { background: var(--color-primary); border-color: var(--color-primary); color: #fff; }
.pagination .gap { border: 0; background: transparent; }

/* ---------- Category tiles (home) ---------- */
.cat-grid { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 1rem; }
.cat-tile {
  display: flex; align-items: center; gap: .8rem; text-decoration: none;
  border: 1px solid var(--color-border); border-radius: var(--radius-md); background: #fff;
  padding: .95rem 1.1rem; box-shadow: var(--shadow-card); color: var(--color-text);
  transition: box-shadow .15s, transform .15s;
}
.cat-tile:hover { box-shadow: var(--shadow-card-hover); transform: translateY(-2px); }
.cat-icon {
  width: 40px; height: 40px; flex: none; border-radius: 10px; background: var(--color-primary-soft);
  color: var(--color-primary); display: grid; place-items: center; font-weight: 800; font-size: 1rem;
}
.cat-tile b { display: block; font-size: .95rem; }
.cat-tile span { color: var(--color-muted-text); font-size: .8rem; }

/* ---------- Footer ---------- */
.site-footer { border-top: 1px solid var(--color-border); background: var(--color-surface-alt); margin-top: 3rem; }
.footer-inner {
  max-width: var(--content-width); margin: 0 auto; padding: 1.6rem 1.5rem;
  color: var(--color-muted-text); font-size: .82rem; line-height: 1.7;
  display: flex; justify-content: space-between; gap: 2rem; flex-wrap: wrap;
}
.footer-inner a { color: var(--color-muted-text); }

/* ---------- Misc ---------- */
.empty { text-align: center; color: var(--color-muted-text); padding: 3rem 0; }
.loading { text-align: center; color: var(--color-muted-text); padding: 2.5rem 0; }
.skeleton { height: 8rem; border-radius: var(--radius-md); background: linear-gradient(90deg,#F3F4F6,#EBEDEF,#F3F4F6); background-size: 200% 100%; animation: pulse 1.2s infinite; }
@keyframes pulse { 0%{background-position:200% 0} 100%{background-position:-200% 0} }
.result-count { color: var(--color-muted-text); font-size: .88rem; font-weight: 600; margin: 0 0 .9rem; }
.result-count b { color: var(--color-primary); }
.breadcrumb { font-size: .82rem; color: var(--color-muted-text); margin-bottom: .9rem; }
.breadcrumb a { color: var(--color-muted-text); text-decoration: none; }
.breadcrumb a:hover { color: var(--color-primary); }
.section-head { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; margin-bottom: 1rem; flex-wrap: wrap; }
.section-head h2 { margin: 0; font-size: 1.35rem; font-weight: 800; letter-spacing: -.01em; }
.section-head a { font-size: .88rem; font-weight: 700; color: var(--color-primary); text-decoration: none; }

/* ---------- Full-width degree tabs (list pages) ---------- */
.tab-row.full { gap: 0; background: var(--color-surface-alt); border: 1px solid var(--color-border); border-radius: var(--radius-md); padding: .3rem; }
.tab-row.full .tab-pill { flex: 1; justify-content: center; border: 0; background: transparent; padding: .8rem 1rem; font-size: 1rem; border-radius: calc(var(--radius-md) - 4px); }
.tab-row.full .tab-pill[aria-selected="true"] { background: var(--color-primary); box-shadow: var(--shadow-card); }

/* ---------- Home hero pills & quick filters ---------- */
.hero-pills { display: flex; align-items: center; justify-content: center; gap: .6rem; margin-top: 1.1rem; flex-wrap: wrap; }
.hero-pills .tab-pill[aria-selected="false"] { background: #fff; }
.hero-quick { display: flex; justify-content: center; gap: .55rem; margin-top: .8rem; flex-wrap: wrap; }

/* ---------- Home stat bar ---------- */
.statbar { background: #fff; border-bottom: 1px solid var(--color-border); }
.statbar-inner {
  max-width: var(--content-width); margin: 0 auto; padding: 1.4rem 1.5rem;
  display: flex; justify-content: space-around; gap: 1rem; flex-wrap: wrap;
}
.statbar .stat { display: flex; align-items: center; gap: .7rem; text-align: left; }
.statbar .stat svg { width: 26px; height: 26px; color: var(--color-primary); flex: none; }
.statbar .stat b { font-size: 1.45rem; color: var(--color-text); }
.statbar .stat + .stat { border-left: 1px solid var(--color-border); padding-left: 2.2rem; }

/* ---------- Home CSC banner ---------- */
.csc-banner {
  display: flex; align-items: center; justify-content: space-between; gap: 1.5rem;
  background: linear-gradient(100deg, #E11D48 0%, #C2183F 55%, #9F1239 100%);
  border-radius: var(--radius-lg); padding: 1.8rem 2rem; color: #fff;
  background-size: cover; background-position: center; position: relative; overflow: hidden;
}
.csc-banner::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, rgba(225,29,72,.92) 30%, rgba(225,29,72,.55)); }
.csc-banner > * { position: relative; z-index: 1; }
.csc-banner h3 { margin: 0 0 .3rem; font-size: 1.5rem; font-weight: 800; }
.csc-banner p { margin: 0; color: #FFE4E6; font-size: .95rem; }
.csc-banner .btn { background: #fff; color: var(--color-primary); }

/* ---------- Uni / prog card upgrades ---------- */
.badge-cat { background: var(--color-primary-soft); color: var(--color-primary); }
.badge-bi { background: #EDE9FE; color: #6D28D9; }
.uni-camp { display: block; height: 112px; border-radius: var(--radius-sm); overflow: hidden; margin-bottom: .9rem; background: linear-gradient(135deg, #FEE2E2, #FFF1F2); position: relative; }
.uni-camp img { width: 100%; height: 100%; object-fit: cover; display: block; }
.uni-camp-ph { display: grid; place-items: center; }
.uni-camp-ph .ph-ring { width: 34px; height: 34px; border-radius: 50%; border: 3px solid rgba(225,29,72,.25); }
.uni-camp-hero { height: 230px; margin: 1rem 0 0; }
.uni-logo-w { width: 46px; height: 46px; flex: none; border-radius: 50%; background: #fff; border: 1px solid var(--color-border); display: grid; place-items: center; overflow: hidden; }
.uni-logo-img { width: 100%; height: 100%; object-fit: contain; }
.uni-logo-fb { display: none; }
.uni-logo-w.noph { background: linear-gradient(135deg, var(--color-primary), #FB7185); border: 0; }
.uni-logo-w.noph .uni-logo-fb { display: block; color: #fff; font-weight: 800; font-size: 1.15rem; }
.uni-hero-main .uni-logo-w { width: 72px; height: 72px; }
.uni-hero-main .uni-logo-w.noph .uni-logo-fb { font-size: 1.7rem; }
.uni-head { display: flex; align-items: center; gap: .75rem; }
.uni-head-txt { min-width: 0; }
.uni-logo {
  width: 46px; height: 46px; flex: none; border-radius: 50%;
  background: linear-gradient(135deg, var(--color-primary), #FB7185); color: #fff;
  display: grid; place-items: center; font-weight: 800; font-size: 1.15rem;
}
.card-badges { display: flex; gap: .35rem; flex-wrap: wrap; }
.meta-item { display: inline-flex; align-items: center; gap: .3rem; color: var(--color-muted-text); font-size: .8rem; font-weight: 600; min-width: 0; }
.meta-item svg { width: 13px; height: 13px; flex: none; }
.card-foot .view { color: var(--color-primary); }

/* ---------- Category tiles row (home) ---------- */
.cat-grid.tiles { display: flex; flex-wrap: wrap; gap: .7rem; }
.cat-grid.tiles .cat-tile {
  flex: 1 1 9.5rem; flex-direction: column; text-align: center; gap: .45rem;
  padding: 1rem .6rem .8rem; justify-content: center;
}
.cat-grid.tiles .cat-tile span { display: block; }

/* ---------- University detail hero ---------- */
.uni-hero {
  background: #fff; border: 1px solid var(--color-border); border-radius: var(--radius-lg);
  box-shadow: var(--shadow-card); padding: 1.6rem 1.8rem;
  display: flex; justify-content: space-between; gap: 2rem; flex-wrap: wrap;
}
.uni-hero-main { display: flex; gap: 1.1rem; align-items: flex-start; min-width: 0; }
.uni-hero-main .uni-logo { width: 72px; height: 72px; font-size: 1.7rem; }
.uni-hero-txt h1 { margin: 0; font-size: 1.85rem; font-weight: 800; letter-spacing: -.02em; }
.uni-hero-txt .en { color: var(--color-muted-text); font-weight: 600; margin: .15rem 0 .5rem; }
.uni-loc { display: flex; align-items: center; gap: .35rem; color: var(--color-muted-text); font-size: .9rem; font-weight: 600; margin: .55rem 0; }
.uni-loc svg { width: 14px; height: 14px; }
.uni-web-btn { margin-top: .4rem; }
.uni-web-btn svg { width: 14px; height: 14px; }
.uni-hero-stats { display: flex; flex-direction: column; gap: 1rem; justify-content: center; min-width: 12rem; }
.uni-hero-stats .stat { display: flex; align-items: center; gap: .7rem; text-align: left; }
.uni-hero-stats .stat + .stat { border-top: 1px dashed var(--color-border); padding-top: 1rem; }
.uni-hero-stats .stat b { font-size: 1.5rem; color: var(--color-text); }
.uni-hero-stats .stat span { color: var(--color-muted-text); font-size: .82rem; }

.subject-chips { margin: 0 0 1.2rem; }

/* ---------- Program detail ---------- */
.prog-hero h1 { margin: 0 0 .2rem; font-size: 2rem; font-weight: 800; letter-spacing: -.02em; }
.prog-hero .en { color: var(--color-muted-text); font-weight: 600; margin: 0 0 .55rem; }
.uni-line { margin: 0 0 .7rem; font-size: .98rem; }
.uni-line a { color: var(--color-primary); font-weight: 700; text-decoration: none; }
.fact-row { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .9rem; margin-top: 1.3rem; }
.fact-card {
  background: #fff; border: 1px solid var(--color-border); border-radius: var(--radius-md);
  box-shadow: var(--shadow-card); padding: .9rem 1rem; display: flex; align-items: center; gap: .7rem;
}
.fact-ico { width: 38px; height: 38px; flex: none; border-radius: 10px; background: var(--color-primary-soft); color: var(--color-primary); display: grid; place-items: center; }
.fact-ico svg { width: 19px; height: 19px; }
.fact-label { display: block; color: var(--color-muted-text); font-size: .74rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; }
.fact-card b { font-size: .98rem; }
.req-badge {
  display: inline-flex; align-items: center; background: var(--color-surface-alt);
  border: 1px solid var(--color-border); border-radius: 999px; padding: .3rem .8rem;
  font-size: .82rem; font-weight: 700; margin: 0 .4rem .4rem 0;
}
.dot-list { margin: .3rem 0; padding-left: 1.2rem; }
.dot-list li { margin-bottom: .35rem; }
.sch-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .8rem; }
.sch-head { display: flex; gap: .7rem; align-items: flex-start; margin-bottom: .5rem; }
.sch-head h4 { margin: 0; font-size: .92rem; }
.sch-head p { margin: .1rem 0 0; font-size: .76rem; }
.sch-ico { width: 36px; height: 36px; flex: none; border-radius: 50%; display: grid; place-items: center; color: #fff; background: var(--color-primary); }
.sch-ico svg { width: 17px; height: 17px; }
.sch-ico.local { background: #F59E0B; }
.sch-ico.school { background: #2563EB; }
.sch-ico.other, .sch-ico.asean, .sch-ico.excell { background: #10B981; }
.sch-list { margin: .2rem 0 0; padding: 0; list-style: none; }
.sch-list li { position: relative; padding-left: 1.3rem; font-size: .8rem; color: var(--color-text); margin-bottom: .25rem; line-height: 1.45; }
.sch-list li::before { content: "✓"; position: absolute; left: 0; color: #10B981; font-weight: 800; }
.sch-link { margin: .45rem 0 0; }
.course-chips { display: flex; flex-wrap: wrap; gap: .45rem; }
.course-chip {
  background: var(--color-primary-soft); color: var(--color-primary-dark);
  border-radius: 999px; padding: .3rem .8rem; font-size: .8rem; font-weight: 700;
}
.side-note { font-size: .78rem; margin: .8rem 0 0; line-height: 1.5; }

/* ---------- Scholarships page ---------- */
.sch-tabs { display: flex; gap: .6rem; flex-wrap: wrap; margin: 1.6rem 0 1.4rem; }
.sch-tab {
  border: 1px solid var(--color-border); background: #fff; border-radius: 999px;
  padding: .55rem 1.2rem; font-weight: 700; font-size: .92rem; cursor: pointer;
  text-decoration: none; color: var(--color-text);
}
.sch-tab:hover { border-color: var(--color-primary); color: var(--color-primary); }
.sch-tab[aria-selected="true"] { background: var(--color-primary); border-color: var(--color-primary); color: #fff; }
.csc-panel { display: grid; grid-template-columns: 1fr 1.2fr; gap: 1.2rem; align-items: stretch; }
.csc-hero {
  border-radius: var(--radius-lg); color: #fff; padding: 2rem 1.8rem;
  background: linear-gradient(160deg, #E11D48, #9F1239), var(--color-primary);
  background-size: cover; background-position: center; position: relative; overflow: hidden;
  display: flex; flex-direction: column; justify-content: flex-end;
}
.csc-hero .csc-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.csc-hero > .csc-bg { z-index: 0; }
.csc-hero::after { content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 1; background: linear-gradient(100deg, rgba(159,18,57,.97) 0%, rgba(159,18,57,.90) 26%, rgba(159,18,57,.58) 48%, rgba(159,18,57,.10) 70%, rgba(159,18,57,0) 82%); }
.csc-hero > * { position: relative; z-index: 2; }
.csc-hero h3 { margin: 0 0 .5rem; font-size: 1.6rem; font-weight: 800; }
.csc-hero p { margin: 0; color: #FFE4E6; line-height: 1.6; font-size: .95rem; }
.benefit-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .8rem; margin-bottom: 1rem; }
.benefit-card {
  background: #fff; border: 1px solid var(--color-border); border-radius: var(--radius-md);
  box-shadow: var(--shadow-card); padding: .95rem 1.05rem; display: flex; gap: .7rem; align-items: flex-start;
}
.benefit-card svg { width: 22px; height: 22px; color: var(--color-primary); flex: none; margin-top: .1rem; }
.benefit-card b { display: block; font-size: .92rem; }
.benefit-card span { color: var(--color-muted-text); font-size: .8rem; line-height: 1.45; }
.req-pills { display: flex; gap: .5rem; flex-wrap: wrap; margin: .4rem 0 1rem; }
.req-pills .req-badge { background: var(--color-primary-soft); border-color: transparent; color: var(--color-primary-dark); }
.apply-note {
  background: var(--color-primary-soft); border-radius: var(--radius-sm);
  padding: .75rem 1rem; color: var(--color-primary-dark); font-size: .88rem; font-weight: 600;
}

/* ---------- Pagination note ---------- */
.page-note { text-align: center; color: var(--color-muted-text); font-size: .8rem; margin: .3rem 0 0; }

@media (prefers-reduced-motion: reduce) {
  * { animation: none !important; transition: none !important; }
}

/* ---------- Narrow screens: keep 3 columns, compact type ---------- */
@media (max-width: 900px) {
  .header-inner { padding: .6rem .9rem; gap: .8rem; }
  .container { padding: 0 .9rem; }
  .hero-inner { grid-template-columns: 1fr; padding: 2.2rem .9rem 2rem; }
  .hero-art { max-width: 26rem; margin: 0 auto; }
  .hero h1 { font-size: 1.7rem; }
  .hero p { font-size: .92rem; }
  .page-title { font-size: 1.4rem; }
  .detail-head h1 { font-size: 1.4rem; }
  .grid-3 { gap: .55rem; }
  .card { padding: .7rem .75rem; gap: .3rem; }
  .card-title { font-size: .8rem; }
  .card-title-en { font-size: .68rem; }
  .card-meta { gap: .2rem; }
  .badge { font-size: .6rem; padding: .1rem .45rem; }
  .card-foot { font-size: .68rem; padding-top: .35rem; }
  .cat-grid { gap: .55rem; }
  .cat-tile { padding: .6rem .7rem; gap: .5rem; }
  .cat-tile b { font-size: .78rem; }
  .cat-tile span { font-size: .66rem; }
  .cat-icon { width: 30px; height: 30px; font-size: .8rem; }
  .chip { font-size: .74rem; padding: .28rem .6rem; }
  .tab-pill { font-size: .8rem; padding: .4rem .8rem; }
  .filter-label { width: 100%; }
  .detail-grid { grid-template-columns: 1fr; }
  .side-card { position: static; }
  .hscroll { grid-auto-columns: minmax(0,1fr); grid-auto-flow: row; }
  .site-nav {
    display: none; position: absolute; top: 100%; left: 0; right: 0;
    background: #fff; border-bottom: 1px solid var(--color-border);
    flex-direction: column; align-items: stretch; padding: .5rem .9rem .8rem; gap: .2rem;
  }
  .site-nav.open { display: flex; }
  .nav-toggle {
    display: inline-flex; margin-left: auto; background: none; border: 1px solid var(--color-border);
    border-radius: var(--radius-sm); padding: .4rem .55rem; cursor: pointer;
  }
  .nav-toggle svg { width: 18px; height: 18px; display: block; }
  .tab-row.full .tab-pill { font-size: .85rem; padding: .6rem .5rem; }
  .fact-row { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .55rem; }
  .fact-card b { font-size: .8rem; }
  .fact-label { font-size: .62rem; }
  .uni-hero { padding: 1rem; gap: 1rem; }
  .uni-hero-main .uni-logo { width: 54px; height: 54px; font-size: 1.3rem; }
  .uni-hero-stats { flex-direction: row; min-width: 0; gap: .8rem; }
  .uni-hero-stats .stat + .stat { border-top: 0; border-left: 1px dashed var(--color-border); padding-top: 0; padding-left: .8rem; }
  .uni-hero-stats .stat b { font-size: 1.1rem; }
  .prog-hero h1 { font-size: 1.45rem; }
  .sch-grid { grid-template-columns: 1fr; }
  .csc-panel { grid-template-columns: 1fr; }
  .benefit-grid { grid-template-columns: 1fr; }
  .csc-banner { flex-direction: column; align-items: flex-start; padding: 1.3rem 1.2rem; }
  .statbar .stat + .stat { border-left: 0; padding-left: 0; }
}

/* ---------- campus hero narrow ---------- */
@media (max-width: 640px) {
  .uni-camp { height: 92px; }
  .uni-camp-hero { height: 150px; }
  .uni-hero-main .uni-logo-w { width: 54px; height: 54px; }
}

/* ---------- language toggle ---------- */
.lang-toggle { display: inline-flex; align-items: center; gap: 2px; margin-left: .6rem; padding: 3px; border: 1px solid var(--color-border, #e5e7eb); border-radius: 999px; background: #fff; }
.lang-opt { appearance: none; border: 0; background: transparent; font: inherit; font-size: .8rem; font-weight: 600; color: var(--color-muted-text, #6b7280); padding: .22rem .62rem; border-radius: 999px; cursor: pointer; line-height: 1.3; }
.lang-opt.active { background: var(--color-primary, #e11d48); color: #fff; }
.lang-opt:hover { color: var(--color-primary, #e11d48); }
.lang-opt.active:hover { color: #fff; }
@media (max-width: 720px) { .lang-toggle { margin-left: .3rem; } }

/* ---------- v2 homepage (中仔 2026-10-27): photo hero / photo subject tiles / campus life / news ---------- */
.hero-photo {
  position: relative; border-bottom: 1px solid var(--color-border);
  background-size: cover; background-position: center 40%;
}
.hero-photo .hero-shade {
  position: absolute; inset: 0;
  background: linear-gradient(90deg, rgba(17,24,39,.82) 0%, rgba(17,24,39,.55) 42%, rgba(17,24,39,.18) 78%, rgba(17,24,39,.30) 100%);
}
.hero-photo .hero-inner { position: relative; z-index: 1; grid-template-columns: 1fr; padding: 6.5rem 1.5rem 6rem; }
.hero-photo .hero-txt { text-align: left; }
.hero-photo h1, .hero-photo p { color: #fff; text-shadow: 0 1px 12px rgba(0,0,0,.35); }
.hero-photo h1 em { color: #FB7185; } /* 红色系亮调：照片压暗后 #E11D48 对比度不足，保留红调提升可读性 */
.hero-photo p { max-width: 40rem; margin: 0 0 1.6rem; }
.hero-photo .search-bar { margin: 0; }
.hero-photo .hero-pills { justify-content: flex-start; }
.hero-photo .hero-quick { justify-content: flex-start; }
.hero-photo .chip { background: rgba(255,255,255,.14); border-color: rgba(255,255,255,.45); color: #fff; backdrop-filter: blur(4px); }
.hero-photo .chip:hover { border-color: #fff; color: #fff; }

/* subject tiles → photo cards (images: assets/cats/*.jpg, no photo → fallback icon tile via app.js) */
.cat-grid.tiles { grid-template-columns: repeat(6, minmax(0,1fr)); gap: .9rem; }
.cat-tile-photo {
  position: relative; display: block; aspect-ratio: 3 / 4; overflow: hidden;
  padding: 0; border: 1px solid var(--color-border); border-radius: var(--radius-md);
  box-shadow: var(--shadow-card); transition: box-shadow .15s, transform .15s;
}
.cat-tile-photo img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .25s; }
.cat-tile-photo:hover { box-shadow: var(--shadow-card-hover); transform: translateY(-2px); }
.cat-tile-photo:hover img { transform: scale(1.05); }
.cat-tile-photo .cat-shade { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(17,24,39,0) 42%, rgba(17,24,39,.84) 100%); }
.cat-tile-photo .cat-txt { position: absolute; left: .7rem; right: .7rem; bottom: .65rem; color: #fff; display: block; }
.cat-tile-photo .cat-txt b { display: block; font-size: .92rem; line-height: 1.25; text-shadow: 0 1px 6px rgba(0,0,0,.5); }
.cat-tile-photo .cat-txt span { display: block; font-size: .72rem; opacity: .88; margin-top: .15rem; }

/* campus life photo strip */
.campus-grid { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: .9rem; }
.campus-card {
  position: relative; display: block; height: 170px; overflow: hidden;
  border-radius: var(--radius-md); border: 1px solid var(--color-border);
  box-shadow: var(--shadow-card); transition: box-shadow .15s, transform .15s;
}
.campus-card:hover { box-shadow: var(--shadow-card-hover); transform: translateY(-2px); }
.campus-card img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .25s; }
.campus-card:hover img { transform: scale(1.04); }
.campus-card::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(17,24,39,0) 45%, rgba(17,24,39,.78) 100%); }
.campus-cap {
  position: absolute; left: .8rem; right: .8rem; bottom: .65rem; z-index: 1;
  color: #fff; font-weight: 700; font-size: .95rem; text-shadow: 0 1px 6px rgba(0,0,0,.5);
}

/* news & updates (content: news-data.js) */
.news-tabs { display: flex; flex-wrap: wrap; gap: .5rem; margin: 0 0 1.2rem; }
.news-layout { display: grid; grid-template-columns: 2fr 1fr; gap: 1.1rem; align-items: stretch; }
.news-feature {
  position: relative; display: block; overflow: hidden; text-decoration: none;
  border: 1px solid var(--color-border); border-radius: var(--radius-md);
  background: #fff; box-shadow: var(--shadow-card); color: var(--color-text);
  transition: box-shadow .15s, transform .15s;
}
.news-feature[hidden] { display: none; }
.news-feature:hover { box-shadow: var(--shadow-card-hover); transform: translateY(-2px); }
.news-feat-img { display: block; width: 100%; height: 300px; object-fit: cover; background: linear-gradient(135deg, #E11D48, #9F1239); }
.news-feat-body { display: block; padding: 1.1rem 1.2rem 1.2rem; }
.news-tag {
  display: inline-block; padding: .18rem .65rem; border-radius: 999px;
  background: rgba(225,29,72,.08); color: var(--color-primary);
  font-size: .74rem; font-weight: 700; margin-bottom: .5rem;
}
.news-feature .news-tag { background: var(--color-primary); color: #fff; }
.news-ttl { display: block; font-weight: 800; font-size: 1.18rem; line-height: 1.35; }
.news-feature .news-ttl { font-size: 1.35rem; }
.news-sum { display: block; color: var(--color-muted-text); font-size: .92rem; line-height: 1.6; margin-top: .45rem; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.news-meta { display: block; color: var(--color-muted-text); font-size: .8rem; margin-top: .6rem; }
.news-side { display: flex; flex-direction: column; gap: 1.1rem; }
.news-item {
  flex: 1; display: grid; grid-template-columns: 148px 1fr; gap: .9rem; align-items: center;
  padding: .8rem; text-decoration: none; color: var(--color-text);
  border: 1px solid var(--color-border); border-radius: var(--radius-md);
  background: #fff; box-shadow: var(--shadow-card); transition: box-shadow .15s, transform .15s;
}
.news-item:hover { box-shadow: var(--shadow-card-hover); transform: translateY(-2px); }
.news-thumb { width: 148px; height: 92px; object-fit: cover; border-radius: calc(var(--radius-md) - 4px); background: linear-gradient(135deg, #E11D48, #9F1239); }
.news-ph {
  display: grid; place-items: center; color: #fff; font-weight: 800; font-size: 1.4rem;
  background: linear-gradient(135deg, var(--color-primary), #FB7185);
}
.news-item .news-ttl { font-size: .98rem; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.news-item .news-meta { margin-top: .3rem; }
.news-nolink { cursor: default; }
.news-nolink:hover { box-shadow: var(--shadow-card); transform: none; }

@media (max-width: 1100px) {
  .cat-grid.tiles { grid-template-columns: repeat(4, minmax(0,1fr)); }
}
@media (max-width: 900px) {
  .hero-photo .hero-inner { padding: 4.5rem 1.5rem 4rem; }
  .campus-grid { grid-template-columns: repeat(2, minmax(0,1fr)); }
  .news-layout { grid-template-columns: 1fr; }
  .news-feat-img { height: 220px; }
}
@media (max-width: 640px) {
  .cat-grid.tiles { grid-template-columns: repeat(2, minmax(0,1fr)); }
  .hero-photo h1 { font-size: 2rem; }
  .news-item { grid-template-columns: 110px 1fr; }
  .news-thumb { width: 110px; height: 76px; }
}

/* ===== v2.1 排版微调（中仔 2026-10-27 · 协助特朗普BB 院校卡/列表页排版） ===== */

/* 1) 长校名限 2 行、英文名限 1 行：武汉理工大学等不再把整行卡片撑高 */
.card .card-title { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.card .card-title-en { display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; }

/* 2) 校徽：白底上白/浅色 logo（安徽大学等）直接"隐身" → 浅灰底 + 内边距，低清图不再贴边裁切 */
.uni-logo-w { background: #F8FAFC; }
.uni-logo-img { object-fit: contain; padding: 5px; box-sizing: border-box; background: #F8FAFC; }

/* 3) 校园图占位底色：加载中/图偏白时不至于在白卡上"空一块" */
.uni-camp { background: #F1F5F9; }

/* 4) 学科图片 tiles：保留特朗普BB的 flex 方案（.cat-grid.tiles 第 374 行为权威），这里只补窄屏断点的 flex-basis */
@media (max-width: 1100px) {
  .cat-grid.tiles .cat-tile { flex: 1 1 10.5rem; }
}
@media (max-width: 640px) {
  /* v22 手机适配(主人 20261031: 学科图不要大图)：44%+gap 留余量保两列, 横版比例压缩高度 */
  .cat-grid.tiles { gap: .5rem; }
  .cat-grid.tiles .cat-tile { flex: 1 1 44%; }
  .cat-tile-photo { aspect-ratio: 4 / 3; }
  .cat-tile-photo .cat-txt { left: .55rem; right: .55rem; bottom: .5rem; }
  .cat-tile-photo .cat-txt b { font-size: .8rem; }
  .cat-tile-photo .cat-txt span { font-size: .64rem; }
}

/* 5) 新闻外链图（chinadailyhk 等可能有防盗链）加载失败时容器有底色，不留白洞 */
.news-feat-img, .news-thumb { background: linear-gradient(135deg, #E11D48, #9F1239); }

/* ---------- 三期：院校库/专业库 3schina 风格增强 ---------- */
.page-hero { background: linear-gradient(135deg, var(--color-primary-soft) 0%, #FFF8F9 55%, var(--color-background) 100%); border-bottom: 1px solid var(--color-border); }
.page-hero .page-title { font-size: 2.2rem; margin-bottom: .5rem; }
.page-hero .page-sub { font-size: 1.02rem; color: var(--color-muted-text); max-width: 46rem; }
.hero-search { margin-top: 1.1rem; max-width: 40rem; }
.hero-search .search-bar { box-shadow: 0 6px 22px rgba(225,29,72,.10); border-radius: 12px; background: #fff; padding: .35rem; }
.hero-search .search-bar input { font-size: 1rem; padding: .7rem .9rem; }
.hot-chips { display: flex; flex-wrap: wrap; align-items: center; gap: .45rem; margin-top: .7rem; font-size: .86rem; }
.hot-chips .hot-label { color: var(--color-muted-text); margin-right: .1rem; }
.hot-chips a.chip { background: #fff; border: 1px solid var(--color-border); border-radius: 999px; padding: .22rem .75rem; color: var(--color-text); text-decoration: none; transition: all .15s; }
.hot-chips a.chip:hover { border-color: var(--color-primary); color: var(--color-primary); }
.hot-chips a.chip.is-on { background: var(--color-primary); border-color: var(--color-primary); color: #fff; }
.uni-card .card-foot { display: flex; align-items: center; justify-content: space-between; gap: .5rem; }
.uni-card .card-foot .fee { color: var(--color-primary-dark); font-weight: 700; font-size: .92rem; }
.uni-card .card-foot .fee small { color: var(--color-muted-text); font-weight: 500; }
.major-hot-row { display: flex; flex-wrap: wrap; gap: .45rem; margin-top: .8rem; }
.filter-note { font-size: .85rem; color: var(--color-muted-text); margin: .4rem 0 .2rem; }
@media (max-width: 720px){ .page-hero .page-title { font-size: 1.6rem; } .hero-search .search-bar input { font-size: .92rem; } }

/* ---------- 四期：院校详情页 hero 大图 + 多图版面 ---------- */
.uni-hero.uni-hero-cover { position: relative; color: #fff; background-size: cover; background-position: center; border-radius: 20px; overflow: hidden; min-height: 300px; }
.uni-hero.uni-hero-cover::before { content: ''; position: absolute; inset: 0; background: linear-gradient(100deg, rgba(15,23,42,.86) 0%, rgba(15,23,42,.6) 52%, rgba(15,23,42,.32) 100%); }
.uni-hero.uni-hero-cover > * { position: relative; z-index: 1; }
.uni-hero.uni-hero-cover .uni-hero-txt .en { color: rgba(255,255,255,.85); }
.uni-hero.uni-hero-cover .uni-loc { color: rgba(255,255,255,.94); }
.uni-hero.uni-hero-cover .uni-loc svg { color: #fff; }
.uni-hero.uni-hero-cover .detail-badges .badge { box-shadow: 0 1px 5px rgba(0,0,0,.28); }
.uni-hero.uni-hero-cover .uni-web-btn { background: rgba(255,255,255,.14); backdrop-filter: blur(4px); border-color: rgba(255,255,255,.75); color: #fff; }
.uni-hero.uni-hero-cover .uni-web-btn:hover { background: #fff; color: var(--color-primary-dark); }
.uni-hero.uni-hero-cover .uni-logo-w { box-shadow: 0 2px 12px rgba(0,0,0,.35); }
.uni-hero.uni-hero-cover .uni-hero-stats .stat b { color: #fff; }
.uni-hero.uni-hero-cover .uni-hero-stats .stat span { color: rgba(255,255,255,.82); }
.about-grid { display: grid; grid-template-columns: 1fr 290px; gap: 1.5rem; align-items: start; }
.about-grid .about-img { width: 100%; aspect-ratio: 4/3; object-fit: cover; border-radius: 14px; box-shadow: 0 8px 26px rgba(17,24,39,.14); }
@media (max-width: 760px) { .about-grid { grid-template-columns: 1fr; } .about-grid .about-img { order: -1; } }
.group-head { display: flex; align-items: center; gap: .65rem; }
.group-head .cat-thumb { width: 48px; height: 34px; border-radius: 9px; object-fit: cover; box-shadow: 0 2px 8px rgba(17,24,39,.16); flex: none; }

/* ---------- 五期：专业详情页视觉重构（prog v2，仅追加不改旧类） ---------- */
.prog-hero.prog-hero-cover { position: relative; color: #fff; background-size: cover; background-position: center; border-radius: 20px; overflow: hidden; min-height: 280px; display: flex; align-items: flex-end; }
.prog-hero.prog-hero-cover::before { content: ''; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(15,23,42,.32) 0%, rgba(15,23,42,.62) 52%, rgba(15,23,42,.9) 100%); }
.prog-hero.prog-hero-cover > * { position: relative; z-index: 1; }
.prog-hero.prog-hero-cover .prog-hero-txt { padding: 1.9rem 2.1rem 1.7rem; width: 100%; }
.prog-hero.prog-hero-cover h1 { color: #fff; text-shadow: 0 2px 14px rgba(0,0,0,.45); font-size: 2.15rem; margin: 0 0 .25rem; }
.prog-hero.prog-hero-cover .en { color: rgba(255,255,255,.88); }
.prog-hero.prog-hero-cover .uni-line { color: rgba(255,255,255,.92); }
.prog-hero.prog-hero-cover .uni-line a { color: #fff; }
.prog-hero.prog-hero-cover .detail-badges .badge { box-shadow: 0 1px 5px rgba(0,0,0,.28); }
.prog-hero.prog-hero-cover .badge.badge-cat { background: rgba(255,255,255,.17); backdrop-filter: blur(4px); border: 1px solid rgba(255,255,255,.55); color: #fff; }
.prog-hero.prog-hero-cover .badge.badge-cat.badge-cat-soft { background: rgba(255,255,255,.09); }
.prog-hero.prog-hero-cover .badge.badge-plain { background: rgba(255,255,255,.92); }
.prog-hero-cat { margin: 0 0 .65rem; }
.uni-line-logo { display: flex; align-items: center; gap: .55rem; flex-wrap: wrap; }
.prog-college { color: rgba(255,255,255,.78); font-size: .88rem; }
.fact-row-v2 { margin-top: 1.2rem; }
.fact-card-v2 { border-radius: 16px; padding: 1rem 1.1rem; gap: .85rem; border: 1px solid transparent; }
.fact-ico.fico-red { background: #FEE2E2; color: #E11D48; }
.fact-ico.fico-blue { background: #DBEAFE; color: #2563EB; }
.fact-ico.fico-amber { background: #FEF3C7; color: #D97706; }
.fact-ico.fico-green { background: #D1FAE5; color: #059669; }
.panel-v2 { border-radius: 16px; padding: 1.35rem 1.5rem; border: 1px solid var(--color-border); box-shadow: 0 6px 22px rgba(17,24,39,.06); background: #fff; }
.panel-v2 > h2 { display: flex; align-items: center; gap: .6rem; font-size: 1.05rem; margin: 0 0 1rem; }
.panel-v2 > h2 .p-ico { width: 34px; height: 34px; border-radius: 10px; background: var(--color-primary-soft); color: var(--color-primary); display: grid; place-items: center; flex: none; }
.panel-v2 > h2 .p-ico svg { width: 18px; height: 18px; }
.panel-v2 h3 { margin: 1rem 0 .45rem; }
.req-badge-v2 { display: inline-flex; align-items: center; gap: .3rem; background: var(--color-primary-soft); border: 1px solid transparent; color: var(--color-primary-dark); border-radius: 999px; padding: .32rem .85rem; font-size: .84rem; font-weight: 800; margin: 0 .4rem .45rem 0; }
.doc-steps { display: flex; flex-direction: column; gap: .55rem; margin: .35rem 0 0; padding: 0; }
.doc-step { display: flex; align-items: center; gap: .85rem; padding: .68rem .9rem; border: 1px solid var(--color-border); border-radius: 12px; background: #fff; }
.doc-n { flex: 0 0 auto; width: 26px; height: 26px; border-radius: 50%; background: linear-gradient(135deg, #E11D48, #9F1239); color: #fff; font-weight: 800; font-size: .8rem; display: flex; align-items: center; justify-content: center; }
.doc-step-b { flex: 1; min-width: 0; font-size: .92rem; line-height: 1.55; color: var(--color-text); }
.doc-arr { flex: 0 0 auto; width: 18px; height: 18px; color: #CBD5E1; }
.doc-arr svg { width: 100%; height: 100%; }
.doc-list { list-style: none; margin: .2rem 0 0; padding: 0; counter-reset: doc; }
.doc-list li { counter-increment: doc; position: relative; padding: .55rem .6rem .55rem 2.45rem; border-bottom: 1px dashed var(--color-border); font-size: .9rem; line-height: 1.55; color: var(--color-text); }
.doc-list li:last-child { border-bottom: 0; }
.doc-list li::before { content: counter(doc); position: absolute; left: .3rem; top: .62rem; width: 1.5rem; height: 1.5rem; border-radius: 50%; background: var(--color-primary-soft); color: var(--color-primary); font-size: .72rem; font-weight: 800; display: grid; place-items: center; }
.sch-card-v2 { border: 1px solid var(--color-border); border-radius: 14px; background: #fff; overflow: hidden; box-shadow: 0 3px 14px rgba(17,24,39,.05); transition: box-shadow .15s ease, transform .15s ease; }
.sch-card-v2:hover { box-shadow: 0 8px 26px rgba(17,24,39,.10); transform: translateY(-2px); }
.sch-card-v2 .sch-top { height: 4px; background: var(--color-primary); }
.sch-card-v2.s-local .sch-top { background: #F59E0B; }
.sch-card-v2.s-school .sch-top { background: #2563EB; }
.sch-card-v2.s-other .sch-top, .sch-card-v2.s-asean .sch-top, .sch-card-v2.s-excell .sch-top { background: #10B981; }
.sch-card-v2 .sch-body { padding: .9rem 1rem; }
.prog-rel-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1rem; }
.prog-rel-grid .prog-card { margin: 0; }
.btn-apply-v2 { width: 100%; border-radius: 12px; padding: .68rem 1rem; font-weight: 800; }
@media (max-width: 900px) { .prog-rel-grid { grid-template-columns: 1fr; } }
@media (max-width: 720px) { .prog-hero.prog-hero-cover h1 { font-size: 1.5rem; } .prog-hero.prog-hero-cover .prog-hero-txt { padding: 1.3rem 1.2rem; } }

/* ---------- 六期：字体清晰度修复（主人 10-27 21:27 反馈英文字体不清晰） ---------- */
:root { --font-body: "Segoe UI", Inter, "PingFang SC", "Microsoft YaHei", ui-sans-serif, system-ui, sans-serif; --font-display: "Segoe UI", Inter, "PingFang SC", "Microsoft YaHei", ui-sans-serif, system-ui, sans-serif; }
html { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; }
.cat-tile-photo .cat-txt span { color: #fff; opacity: 1; font-size: .78rem; font-weight: 600; text-shadow: 0 1px 4px rgba(0,0,0,.6); letter-spacing: .01em; }
.cat-tile-photo .cat-txt b { font-size: 1rem; font-weight: 800; text-shadow: 0 1px 8px rgba(0,0,0,.6); letter-spacing: .02em; }
.cat-tile-photo .cat-shade { background: linear-gradient(180deg, rgba(17,24,39,.06) 32%, rgba(17,24,39,.94) 100%); }
.muted { color: #4B5563; }

/* ---- news list page (v6, 2026-10-27) ---- */
.news-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.4rem; }
.news-card {
  display: flex; flex-direction: column; background: #fff; border: 1px solid var(--color-border, #eee);
  border-radius: 16px; overflow: hidden; box-shadow: var(--shadow-card);
  transition: box-shadow .18s ease, transform .18s ease; text-decoration: none; color: inherit;
}
.news-card:hover { box-shadow: var(--shadow-card-hover); transform: translateY(-3px); }
.news-card-img { width: 100%; aspect-ratio: 16 / 9; object-fit: cover; display: block; background: linear-gradient(135deg, #E11D48, #9F1239); }
span.news-card-img.news-ph { display: flex; align-items: center; justify-content: center; font-size: 2rem; font-weight: 800; color: #fff; }
.news-card-body { display: flex; flex-direction: column; padding: 1.05rem 1.15rem 1.15rem; flex: 1 0 auto; }
.news-grid .news-card .news-meta { margin-top: auto; padding-top: .55rem; }
.news-card .news-tag { align-self: flex-start; }
.news-card .news-ttl { font-size: 1.06rem; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.news-card .news-sum { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
@media (max-width: 720px) { .news-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .news-grid { grid-template-columns: 1fr; } }
.cat-tile-photo .cat-txt span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ---- campus-life article page (v8, 2026-10-27) ---- */
.news-grid.cl-block { display: block; }
.cl-stage { min-height: 430px; display: flex; flex-direction: column; justify-content: center; }
.cl-single { max-width: 100%; }
.cl-single .news-card.cl-feat { display: grid; grid-template-columns: 1.4fr 1fr; min-height: 330px; }
.cl-single .news-card.cl-feat .news-card-img { height: 100%; aspect-ratio: auto; min-height: 330px; }
.cl-more-note { margin-top: 1rem; text-align: center; }
@media (max-width: 720px) { .cl-stage { min-height: auto; } }
.news-card.cl-noimg { background: #fff; }
.news-card.cl-noimg .news-card-body { padding-top: 1.2rem; }
.news-card.cl-feat .news-ttl { font-size: 1.3rem; }
.news-card.cl-feat .news-sum { -webkit-line-clamp: 4; }
@media (max-width: 720px) { .cl-single .news-card.cl-feat { grid-template-columns: 1fr; } }

/* ===================== Programs: sidebar tag tree + region/university facets (2026-10-27) ===================== */
.prog-layout { display: grid; grid-template-columns: 272px minmax(0, 1fr); gap: 1.6rem; align-items: start; }
.prog-maincol { min-width: 0; }
.prog-aside {
  position: sticky; top: 5.2rem;
  display: flex; flex-direction: column; gap: .9rem;
  max-height: calc(100vh - 6.2rem); overflow-y: auto; overscroll-behavior: contain;
  padding: 2px; scrollbar-width: thin;
}
.aside-card { background: var(--color-surface); border: 1px solid #E5E7EB; border-radius: 14px; padding: .35rem .45rem; box-shadow: 0 1px 2px rgba(17, 24, 39, .04); }
.aside-title {
  display: flex; justify-content: space-between; align-items: baseline; gap: .5rem;
  font-size: .82rem; font-weight: 800; letter-spacing: .02em; color: var(--color-text);
  padding: .55rem .55rem .35rem;
}
.aside-title small { font-weight: 600; font-size: .74rem; color: var(--color-muted-text); }
/* --- subject tag tree --- */
.tt-item { position: relative; border-radius: 10px; }
.tt-head {
  position: relative; display: flex; justify-content: space-between; align-items: center; gap: .5rem;
  padding: .5rem 2.2rem .5rem .6rem; border-radius: 10px;
  font-size: .86rem; font-weight: 600; color: var(--color-text); text-decoration: none;
}
.tt-head:hover { background: #F8FAFC; color: var(--color-primary); }
.tt-item.is-on > .tt-head { background: var(--color-primary-soft); color: var(--color-primary); font-weight: 800; }
.tt-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tt-count { flex: none; font-size: .74rem; font-weight: 700; color: #94A3B8; font-variant-numeric: tabular-nums; }
.tt-item.is-on > .tt-head .tt-count { color: var(--color-primary); }
.tt-fire { font-style: normal; font-size: .78rem; margin-left: .1rem; }
.tt-caret {
  position: absolute; right: .4rem; top: 50%; transform: translateY(-50%); /* anchored to .tt-head row, not whole item */
  width: 22px; height: 22px; display: flex; align-items: center; justify-content: center;
  padding: 0; border: none; border-radius: 50%; background: #F1F5F9; color: #64748B;
  cursor: pointer; transition: background .15s, color .15s;
}
.tt-caret:hover { background: #E2E8F0; color: #0F172A; }
.tt-item.is-on .tt-caret { background: var(--color-primary); color: #fff; }
.tt-caret svg { width: 12px; height: 12px; transition: transform .18s ease; }
.tt-item.is-open .tt-caret svg { transform: rotate(180deg); }
.tt-subs { display: none; margin: 0 .6rem 0 1.1rem; padding: .1rem 0 .4rem .55rem; border-left: 2px solid #EEF2F7; }
.tt-item.is-open .tt-subs { display: block; }
.tt-sub {
  display: flex; justify-content: space-between; align-items: center; gap: .5rem;
  padding: .32rem .5rem; border-radius: 8px;
  font-size: .8rem; font-weight: 500; color: #475569; text-decoration: none;
}
.tt-sub:hover { background: #F8FAFC; color: var(--color-primary); }
.tt-sub.is-on { background: var(--color-primary-soft); color: var(--color-primary); font-weight: 700; }
.tt-sub .tt-count { font-size: .7rem; }
/* --- region / university facets --- */
.facet-list { display: flex; flex-direction: column; padding: 0 .2rem .35rem; }
.facet-scroll { overflow-y: auto; overscroll-behavior: contain; scrollbar-width: thin; }
.facet-item {
  display: flex; justify-content: space-between; align-items: center; gap: .5rem;
  padding: .34rem .6rem; border-radius: 8px;
  font-size: .83rem; font-weight: 500; color: var(--color-text); text-decoration: none;
}
.facet-item:hover { background: #F8FAFC; color: var(--color-primary); }
.facet-item.is-on { background: var(--color-primary-soft); color: var(--color-primary); font-weight: 700; }
.facet-item.is-on .tt-count { color: var(--color-primary); }
@media (max-width: 1024px) {
  .prog-layout { grid-template-columns: 1fr; }
  .prog-aside { position: static; max-height: none; overflow: visible; }
}

/* v19: featured uni card hot programs */
.uni-hot { display: flex; flex-direction: column; gap: .15rem; margin-top: .1rem; padding-top: .45rem; border-top: 1px dashed var(--line, #eee); }
.uni-hot-t { font-size: .72rem; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--muted, #8a8f98); margin-bottom: .15rem; }
.uni-hot-item { display: flex; align-items: center; justify-content: space-between; gap: .5rem; font-size: .84rem; color: var(--color-text, #23262b); padding: .18rem .35rem; margin: 0 -.35rem; border-radius: 8px; }
.uni-hot { text-decoration: none; }
.uni-hot-item span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.uni-hot-item i { font-style: normal; font-size: .68rem; font-weight: 700; color: var(--color-primary, #e11d48); background: rgba(225,29,72,.08); border-radius: 999px; padding: .05rem .4rem; flex: none; }
.uni-hot-item:hover { background: rgba(225,29,72,.06); }

/* v20: student survey section */
.sv-head { display: flex; gap: .6rem; align-items: flex-start; margin-bottom: 1rem; }
.sv-bar, .sv-topic-head .sv-bar { display: inline-block; width: 4px; border-radius: 2px; background: var(--color-primary, #e11d48); flex: none; }
.sv-head .sv-bar { height: 2.2rem; }
.sv-title { font-size: 1.35rem; margin: 0; }
.sv-sub { margin: .15rem 0 0; color: var(--color-muted-text, #6b7280); font-size: .92rem; }
.sv-overview { display: grid; grid-template-columns: repeat(4, 1fr); gap: .8rem; margin-bottom: .9rem; }
.sv-card { background: var(--color-surface, #fff); border: 1px solid var(--color-border, #ececf1); border-radius: 14px; padding: .95rem 1.05rem; }
.sv-ov b { display: block; font-size: 1.55rem; color: var(--color-primary, #e11d48); line-height: 1.15; }
.sv-ov span { font-size: .85rem; color: var(--color-muted-text, #6b7280); }
.sv-charts { display: grid; grid-template-columns: repeat(3, 1fr); gap: .8rem; margin-bottom: 1.1rem; }
.sv-charts h3, .sv-h4 { margin: 0 0 .6rem; font-size: .95rem; }
.sv-note { margin: .35rem 0 0; font-size: .74rem; color: var(--color-muted-text, #9aa1ab); }
.sv-hbar { display: grid; grid-template-columns: minmax(6.5rem, 42%) 1fr 2.6rem; gap: .5rem; align-items: center; font-size: .82rem; padding: .16rem 0; }
.sv-hbar-l { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sv-hbar-l em { font-style: normal; color: var(--color-muted-text, #9aa1ab); font-size: .74rem; margin-left: .2rem; }
.sv-hbar-t { height: 10px; background: rgba(225,29,72,.08); border-radius: 999px; overflow: hidden; }
.sv-hbar-t i { display: block; height: 100%; border-radius: 999px; background: var(--color-primary, #e11d48); }
.sv-hbar b { font-size: .8rem; text-align: right; }
.sv-vbars { display: flex; gap: .55rem; align-items: flex-end; height: 7.2rem; }
.sv-vbar { flex: 1; display: flex; flex-direction: column; justify-content: flex-end; align-items: center; gap: .15rem; height: 100%; }
.sv-vbar b { font-size: .78rem; }
.sv-vbar i { width: 68%; border-radius: 6px 6px 2px 2px; background: var(--color-primary, #e11d48); opacity: .85; }
.sv-vbar span { font-size: .68rem; color: var(--color-muted-text, #6b7280); white-space: nowrap; }
.sv-quotes { display: grid; grid-template-columns: 2fr 1fr 1fr; gap: .8rem; margin-bottom: 1.2rem; }
.sv-quote { background: var(--color-surface, #fff); border: 1px solid var(--color-border, #ececf1); border-left: 4px solid var(--color-primary, #e11d48); border-radius: 12px; padding: .8rem .95rem; margin: 0; display: flex; flex-direction: column; gap: .35rem; }
.sv-quote blockquote { margin: 0; font-size: .9rem; line-height: 1.5; }
.sv-quote-big blockquote { font-size: 1.02rem; font-weight: 600; }
.sv-quote figcaption { font-size: .76rem; color: var(--color-muted-text, #9aa1ab); line-height: 1.45; }
.sv-chip { align-self: flex-start; font-size: .7rem; color: var(--color-primary, #e11d48); background: rgba(225,29,72,.08); border-radius: 999px; padding: .08rem .55rem; }
.sv-quote-sm blockquote { font-size: .84rem; }
.sv-tabs { display: flex; flex-wrap: wrap; gap: .45rem; margin-bottom: 1rem; }
.sv-tab { border: 1px solid var(--color-border, #ececf1); background: var(--color-surface, #fff); border-radius: 999px; padding: .32rem .95rem; font-size: .85rem; cursor: pointer; }
.sv-tab.on { background: var(--color-primary, #e11d48); border-color: var(--color-primary, #e11d48); color: #fff; }
.sv-topic { background: var(--color-surface, #fff); border: 1px solid var(--color-border, #ececf1); border-radius: 16px; padding: 1rem 1.1rem; margin-bottom: .9rem; }
.sv-topic-head { display: flex; gap: .55rem; align-items: center; margin-bottom: .8rem; }
.sv-topic-head .sv-bar { height: 1.3rem; }
.sv-topic-head h3 { margin: 0; font-size: 1.05rem; }
.sv-tag { margin-left: auto; font-size: .7rem; color: var(--color-muted-text, #6b7280); background: #f4f5f7; border-radius: 999px; padding: .1rem .6rem; flex: none; }
.sv-topic-body { display: grid; grid-template-columns: 2.1fr 1fr; gap: 1rem; }
.sv-stats { display: flex; flex-wrap: wrap; gap: .6rem; margin-bottom: .7rem; }
.sv-stat { background: #faf7f8; border: 1px solid #f0e4e8; border-radius: 10px; padding: .45rem .7rem; min-width: 7rem; }
.sv-stat b { display: block; font-size: 1.1rem; color: var(--color-primary, #e11d48); }
.sv-stat span { font-size: .74rem; color: var(--color-muted-text, #6b7280); }
.sv-quote-list { display: grid; grid-template-columns: 1fr 1fr; gap: .6rem; }
.sv-kw { background: #faf7f8; border-radius: 12px; padding: .75rem .85rem; align-self: start; }
.sv-kw b { font-size: .8rem; }
.sv-kw-list { display: flex; flex-wrap: wrap; gap: .35rem; margin-top: .5rem; }
.sv-kw-list span { font-size: .75rem; background: var(--color-surface, #fff); border: 1px solid var(--color-border, #ececf1); border-radius: 999px; padding: .12rem .6rem; }
.sv-films { display: flex; flex-wrap: wrap; gap: .4rem; }
.sv-film { font-size: .78rem; background: rgba(225,29,72,.07); color: var(--color-primary, #e11d48); border-radius: 999px; padding: .16rem .7rem; }
.sv-foot { margin: .8rem 0 0; font-size: .74rem; color: var(--color-muted-text, #9aa1ab); }
@media (max-width: 900px) {
  .sv-overview { grid-template-columns: repeat(2, 1fr); }
  .sv-charts { grid-template-columns: 1fr; }
  .sv-quotes { grid-template-columns: 1fr; }
  .sv-topic-body { grid-template-columns: 1fr; }
  .sv-quote-list { grid-template-columns: 1fr; }
}

/* v14: news tag 压图左上（设计 10） */
.news-feature, .news-item, .news-card { position: relative; }
.news-feature .news-tag, .news-item .news-tag, .news-card .news-tag { position: absolute; top: 12px; left: 12px; z-index: 2; white-space: nowrap; box-shadow: 0 2px 8px rgba(159,18,57,.35); }
/* v14: 专业详情侧栏学校照片（设计 11） */
.side-photo { width: 100%; height: 150px; object-fit: cover; border-radius: 14px; display: block; margin: 0 0 1.05rem; background: linear-gradient(135deg, #E11D48, #9F1239); }

/* ===== v21 移动端适配（主人 20261101：手机端卡片难看 → 横滑钻取，3 列硬挤废案） ===== */
@media (max-width: 640px) {
  /* 1) 卡片集合一律横向滑动（学校横排→专业横排→详情），相邻卡露边提示可滑 */
  .grid-3, .sch-grid {
    display: flex; flex-wrap: nowrap; overflow-x: auto; scroll-snap-type: x mandatory;
    gap: .7rem; padding: .15rem .15rem .9rem; margin: 0 -.15rem;
    -webkit-overflow-scrolling: touch; scrollbar-width: none;
  }
  .grid-3::-webkit-scrollbar, .sch-grid::-webkit-scrollbar { display: none; }
  .grid-3 > *, .sch-grid > * { flex: 0 0 80vw; max-width: 320px; scroll-snap-align: center; }
  /* 2) 卡片恢复舒适排版（900px 的缩小规则针对旧 3 列窄卡，横滑宽卡不再适用） */
  .card { padding: .95rem 1rem; gap: .5rem; }
  .card-title { font-size: .95rem; min-width: 0; }
  .card-title-en { font-size: .78rem; }
  .card-foot { font-size: .78rem; }
  .badge { max-width: 100%; overflow: hidden; }
  .card-top .badge-cat { flex: 0 0 auto; }
  .uni-hot-item { font-size: .8rem; }
  /* 3) 新闻分类 tabs 横滑不折行 */
  .news-tabs { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; }
  .news-tabs::-webkit-scrollbar { display: none; }
  /* 4) hero 区 390px 横向溢出 14px 修复：photo hero 容器 padding 收窄 + 1fr 列最小宽收口 + input min-width 释放 */
  .hero-photo .hero-inner { padding: 3.5rem 1rem 3rem; grid-template-columns: minmax(0, 1fr); }
  .hero-inner > * { min-width: 0; }
  .search-bar { max-width: 100%; }
  .search-bar input { min-width: 0; width: 100%; }
}

/* ---------- v22: imageless news cards, tag back to document flow (fix overlap) ---------- */
.news-card.cl-noimg .news-tag,
.news-feature.no-thumb .news-tag,
.news-item.no-thumb .news-tag { position: static; box-shadow: none; }
.news-item.no-thumb { grid-template-columns: 1fr; }

/* v23-fix: hidden attr loses to .news-tabs{display:flex}, force hide on EN news */
.news-tabs[hidden] { display: none; }

/* ---------- v25: account / auth / favorites ---------- */
.acct-link {
  margin-left: auto; display: inline-flex; align-items: center; gap: .4rem;
  padding: .42rem .85rem; border-radius: 999px; text-decoration: none;
  color: var(--color-primary); background: var(--color-primary-soft);
  font-size: .85rem; font-weight: 600; max-width: 11rem; white-space: nowrap;
}
.acct-link svg { width: 17px; height: 17px; flex: 0 0 auto; }
.acct-link #acct-name { overflow: hidden; text-overflow: ellipsis; }
.acct-link:hover { background: #FFE4E6; }
.auth-card {
  max-width: 26rem; margin: 0 auto; background: var(--color-surface);
  border: 1px solid var(--color-border); border-radius: 16px; padding: 1.8rem 1.6rem;
  box-shadow: 0 8px 28px rgba(17, 24, 39, .06);
}
.auth-card.auth-wide { max-width: 72rem; }
.auth-tabs { display: flex; gap: .4rem; margin-bottom: 1.3rem; background: var(--color-surface-alt); border-radius: 999px; padding: .28rem; }
.auth-tab {
  flex: 1; border: 0; background: transparent; border-radius: 999px;
  padding: .5rem 0; font-size: .92rem; font-weight: 600; color: var(--color-muted-text); cursor: pointer;
}
.auth-tab.on { background: var(--color-primary); color: #fff; }
.auth-form { display: flex; flex-direction: column; gap: .85rem; }
.auth-form label { display: flex; flex-direction: column; gap: .32rem; font-size: .86rem; font-weight: 600; color: var(--color-text); }
.auth-form input {
  border: 1.5px solid var(--color-border); border-radius: 10px; padding: .62rem .8rem;
  font-size: .95rem; font-family: inherit; background: #fff; color: var(--color-text);
}
.auth-form input:focus { outline: none; border-color: var(--color-primary); box-shadow: 0 0 0 3px rgba(225, 29, 72, .12); }
.auth-err { color: var(--color-primary-dark); font-size: .85rem; margin: 0; font-weight: 600; }
.auth-note { margin: 1.1rem 0 0; font-size: .85rem; text-align: center; }
.btn-block { width: 100%; }
.auth-head { display: flex; align-items: center; gap: .9rem; margin-bottom: 1.2rem; flex-wrap: wrap; }
.auth-head h2 { margin: 0; font-size: 1.3rem; }
.auth-head .muted { flex: 1; }
.fav-btn {
  width: 2rem; height: 2rem; border-radius: 999px; border: 1.5px solid var(--color-border);
  background: #fff; color: var(--color-muted-text); font-size: 1.05rem; line-height: 1;
  cursor: pointer; margin-left: .45rem; vertical-align: middle;
  transition: all .15s ease; display: inline-flex; align-items: center; justify-content: center;
}
.fav-btn:hover { border-color: var(--color-primary); color: var(--color-primary); }
.fav-btn.on { background: var(--color-primary); border-color: var(--color-primary); color: #fff; }
@media (max-width: 640px) {
  .acct-link { padding: .35rem .65rem; max-width: 7.5rem; }
  .acct-link svg { width: 15px; height: 15px; }
  .acct-link #acct-name { font-size: .78rem; }
}

/* v33: 登录/注册表单 tab 互斥——.auth-form 显式 display:flex 压过 hidden 属性导致双表单同显（主人 20261106 报） */
.auth-form[hidden] { display: none; }

/* v34: 学校卡紧凑重设计（主人 20261106 拍板，按 design/uni_card_compact_v1.png 实现）
   结构：矮头图 88px → logo+校名+tier徽章一行 → 位置|语言徽章一行 → 热门专业2chip → foot */
.uni-card { padding: .9rem 1rem; gap: .6rem; }
.uni-card .uni-camp { height: 88px; margin-bottom: 0; }
.uni-card .uni-head { flex-wrap: wrap; gap: .6rem; }
.uni-card .uni-head-txt { flex: 1; min-width: 0; }
.uni-card .uni-badges { margin-left: auto; display: flex; gap: .3rem; align-items: center; }
.uni-card .uni-badges .badge { font-size: .66rem; padding: .16rem .5rem; background: #FEE2E2; color: #B91C1C; }
.uni-card .uni-meta { display: flex; justify-content: space-between; align-items: center; gap: .6rem; }
.uni-card .uni-langs { display: flex; gap: .3rem; flex: none; }
.uni-card .uni-langs .badge { font-size: .64rem; padding: .1rem .48rem; background: #fff; border: 1px solid var(--color-border); color: #6B7280; font-weight: 700; }
.uni-hot-row { display: flex; gap: .5rem; margin-top: .05rem; }
.uni-hot-chip {
  flex: 1; min-width: 0; display: flex; align-items: center; justify-content: space-between; gap: .45rem;
  background: #F3F4F6; border-radius: 10px; padding: .45rem .65rem;
  font-size: .8rem; font-weight: 600; color: #374151;
}
.uni-hot-chip span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.uni-hot-chip i { font-style: normal; flex: none; font-size: .64rem; font-weight: 800; color: #fff; background: var(--color-primary); border-radius: 6px; padding: .12rem .38rem; letter-spacing: .02em; }
@media (max-width: 640px) {
  .uni-card .uni-camp { height: 72px; }
  .uni-card .uni-badges .badge { font-size: .6rem; padding: .12rem .4rem; }
  .uni-hot-chip { font-size: .74rem; padding: .38rem .55rem; }
}

/* v34.1: 贴设计图修正——校名最小宽防截断、位置行单行省略、foot 单行 */
.uni-card .uni-head-txt { flex: 1 1 150px; min-width: 150px; }
.uni-card .uni-badges { justify-content: flex-end; }
.uni-card .uni-meta .meta-item { flex: 1; min-width: 0; }
.uni-card .meta-txt { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.uni-card .card-foot .fee { white-space: nowrap; }
.uni-card .card-foot b { white-space: nowrap; flex: none; }

/* v34.2: meta 只留位置保完整，专业数回 foot（fee .85rem 保单行），chip 加 title */
.uni-card .card-foot { font-size: .82rem; }
.uni-card .card-foot .fee { font-size: .85rem; }

/* v35: 学生反馈独立页（主人 20261106 令：问卷迁出 campus-life，三层横向 TAB 忌纵向堆） */
.sv-panel[hidden] { display: none; }
.sv-panel > .sv-head { margin-bottom: 1.1rem; }

/* ===== v34.3 横版logo修复：宽图自动cover中心裁剪，避免contain缩成细条 ===== */
.uni-logo-w.wide img { object-fit: cover; transform: scale(1.04); }

/* v36: 列表卡收藏键（卡片右上角悬浮圆钮，复用 .fav-btn 基础样式） */
.prog-card { position: relative; }
.prog-card .fav-btn.prog-fav { position: absolute; top: .55rem; right: .55rem; margin: 0; z-index: 2; background: rgba(255,255,255,.94); box-shadow: 0 1px 5px rgba(15,23,42,.14); }
.prog-card .fav-btn.prog-fav:hover { transform: scale(1.1); }
.prog-card .card-top { padding-right: 2.5rem; }
