/* GENERATED by scripts/build-school.mjs from design/school-page-prototype-v2.html.
   DO NOT EDIT — edit the contract and rebuild.
   The contract's :root block was stripped: 23 custom properties are
   remapped onto the production 绛红纸金 token set, which comes from Bricks,
   which comes from design/design-tokens.json. The contract's own pine/teal skin
   belongs to its placeholder brand and is not the production skin. */
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto} *{transition:none!important}}
body{
  font-family:var(--sans);
  background:var(--paper); color:var(--ink); font-size:15px; line-height:1.9;
}
a{color:var(--red2); text-decoration:none}
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--brass); outline-offset:2px}
.num{font-family:var(--mono); font-variant-numeric:tabular-nums; letter-spacing:-0.02em}
.quote{font-family:var(--serifq)}
.wrap{max-width:1100px; margin:0 auto; padding:0 20px}
.src{display:block; font-family:var(--mono); font-size:10.5px; color:var(--ink2); margin-top:5px; letter-spacing:.02em}

/* ---------- 顶栏 ---------- */
.topbar{background:var(--card); border-bottom:1px solid var(--line); position:sticky; top:0; z-index:50}
.topbar .wrap{display:flex; align-items:center; gap:22px; height:56px}
.brand{display:flex; align-items:center; gap:9px; font-weight:600; font-size:16px; color:var(--ink)}
.brand .mark{width:26px;height:26px;border-radius:6px;background:var(--red);color:var(--ivory);display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600}
.brand .en{font-family:var(--serif); font-style:italic; font-weight:400; color:var(--ink2); font-size:13px}
.topnav{display:flex; gap:18px; font-size:14px; color:var(--ink2)}
.topnav a{color:var(--ink2)} .topnav a:hover{color:var(--red2)}
.topsearch{margin-left:auto; display:flex; align-items:center; gap:14px}
.topsearch input{border:1px solid var(--line2); border-radius:8px; padding:6px 12px; font-size:13px; width:190px; background:var(--paper); color:var(--ink)}
.cmp-link{font-size:13px; color:var(--ink2); white-space:nowrap}
.cmp-link b{color:var(--red2); font-family:var(--mono)}

/* ---------- Hero：档案封面 ---------- */
.hero{background:var(--red); color:var(--ivory)}
.hero .wrap{display:grid; grid-template-columns:1.3fr 1fr; gap:46px; align-items:start; padding-top:34px; padding-bottom:52px}
.crumbs{font-size:12.5px; color:var(--iv70); margin-bottom:18px}
.crumbs a{color:var(--iv70)}
.proto-tag{display:inline-block; margin-left:10px; background:rgba(217,163,67,.18); color:var(--brass); font-size:11.5px; padding:1px 9px; border-radius:99px; vertical-align:1px}
.idrow{display:flex; gap:16px; align-items:flex-start}
.crest{flex:0 0 52px; width:52px; height:52px; border-radius:50%; border:1.5px dashed var(--iv25); display:flex; align-items:center; justify-content:center; font-size:11px; color:var(--iv70)}
h1.school-cn{font-size:34px; line-height:1.3; font-weight:600; letter-spacing:.01em; color:var(--ivory)}
.school-en{font-family:var(--serif); font-style:italic; font-size:18px; color:var(--iv70); margin-top:3px}
.motto{margin:16px 0 0; padding:2px 0 2px 14px; border-left:2px solid var(--brass); font-family:var(--serifq); font-size:15.5px; color:var(--ivory); line-height:1.8}
.motto .zh{color:var(--iv70)}
.motto .by{font-family:inherit; font-size:12.5px; color:var(--iv70)}
.tagrow{display:flex; flex-wrap:wrap; gap:8px; margin-top:18px; font-size:12.5px}
.tag{border:1px solid var(--iv25); border-radius:99px; padding:2px 12px; color:var(--iv70)}
.tag.wx{border-color:rgba(217,163,67,.55); color:var(--brass); display:inline-flex; align-items:center; gap:6px}
.tag.wx svg{width:13px;height:13px}
.socrow{display:flex; align-items:center; flex-wrap:wrap; gap:9px; margin-top:20px}
.socrow .lbl{font-size:11.5px; color:var(--iv70); letter-spacing:.12em; margin-right:2px}
a.soc{width:30px; height:30px; border-radius:50%; border:1px solid var(--iv25); color:var(--ivory); display:inline-flex; align-items:center; justify-content:center; transition:border-color .15s,color .15s}
a.soc svg{width:15px; height:15px}
a.soc:hover{border-color:var(--brass); color:var(--brass)}
a.soc-txt{border:1px solid var(--iv25); border-radius:99px; padding:3px 12px; font-size:12px; color:var(--ivory); transition:border-color .15s,color .15s}
a.soc-txt:hover{border-color:var(--brass); color:var(--brass)}
.socdiv{width:1px; height:18px; background:var(--iv25); margin:0 4px}
a.tour{display:inline-flex; align-items:center; gap:7px; border:1px solid var(--iv25); border-radius:8px; padding:5px 13px; font-size:12.5px; color:var(--ivory); transition:border-color .15s,color .15s}
a.tour svg{width:15px;height:15px}
a.tour:hover{border-color:var(--brass); color:var(--brass)}
.hero-actions{margin-top:22px; display:flex; gap:10px}
.btn{border-radius:8px; padding:8px 19px; font-size:14px; cursor:pointer; border:1px solid transparent; font-family:inherit}
.btn-amber{background:var(--brass); color:#241B08; font-weight:600}
.btn-amber:hover{background:var(--brass-ink)}
.btn-cream{background:transparent; border-color:var(--iv25); color:var(--ivory)}
.btn-cream:hover{border-color:var(--ivory)}

/* 关键指标卡：跨越封面与正文的接缝 */
.keystats{background:var(--card); color:var(--ink); border-radius:14px; overflow:hidden;
  box-shadow:0 20px 46px rgba(8,26,22,.30); border:1px solid var(--line);
  display:grid; grid-template-columns:1fr 1fr; position:relative; z-index:5; margin-bottom:-84px}
.keystats .cell{padding:15px 18px 13px; border-top:1px solid var(--line); border-left:1px solid var(--line)}
.keystats .cell:nth-child(-n+2){border-top:none}
.keystats .cell:nth-child(odd){border-left:none}
.keystats .v{font-family:var(--mono); font-size:24px; font-weight:500; letter-spacing:-.03em; line-height:1.25}
.keystats .v em{font-style:normal; color:var(--brass-ink)}
.keystats .k{font-size:12px; color:var(--ink2); margin-top:2px}
.keystats .cap{grid-column:1/-1; background:var(--paper); border-top:1px solid var(--line); padding:7px 18px; font-size:11px; color:var(--ink2); font-family:var(--mono)}

/* ---------- 主体布局 ---------- */
.layout{display:grid; grid-template-columns:186px minmax(0,1fr); gap:34px; padding:108px 0 60px}
.spine{position:sticky; top:76px; align-self:start}
.spine .cap{font-size:11.5px; color:var(--ink2); letter-spacing:.14em; margin:0 0 8px 18px}
.spine a{display:flex; align-items:baseline; gap:9px; padding:6px 12px 6px 15px; border-left:3px solid transparent; color:var(--ink2); font-size:13.5px; border-radius:0 8px 8px 0; transition:background .15s,color .15s}
.spine a .no{font-family:var(--mono); font-size:11px; color:var(--ink2)}
.spine a:hover{color:var(--red2)}
.spine a.active{border-left-color:var(--red); background:var(--red-soft); color:var(--red2); font-weight:600}
.spine a.active .no{color:var(--red)}
.spine .dl{margin:14px 0 0 18px; font-size:12px; color:var(--ink2)}

section.chapter{background:var(--card); border:1px solid var(--line); border-radius:var(--r); padding:28px 30px; margin-bottom:22px; scroll-margin-top:76px}
.ch-head{display:flex; align-items:baseline; gap:12px; margin-bottom:6px}
.ch-head .no{font-family:var(--mono); font-size:12px; color:var(--red); letter-spacing:.08em}
.ch-head h2{font-size:21px; font-weight:600}
.ch-head .en{font-family:var(--serif); font-style:italic; font-size:12.5px; color:var(--ink2); margin-left:auto}
.ch-note{font-size:12.5px; color:var(--ink2); margin-bottom:16px}
.prose{color:var(--ink); max-width:68ch}
.prose + .prose{margin-top:10px}

.facts{display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-top:20px}
.fact{background:var(--paper); border:1px solid var(--line); border-radius:8px; padding:11px 13px}
.fact .k{font-size:12px; color:var(--ink2)}
.fact .v{font-size:14.5px; font-weight:600; margin-top:1px}
.fact .v.num{font-size:16px; font-weight:500}

/* 校史时间线 */
.timeline{position:relative; margin:14px 0 4px 6px; padding-left:26px; border-left:2px solid var(--line2)}
.tl{position:relative; padding-bottom:22px}
.tl:last-child{padding-bottom:2px}
.tl::before{content:""; position:absolute; left:-32px; top:8px; width:9px; height:9px; border-radius:50%; background:var(--brass); box-shadow:0 0 0 3px var(--card)}
.tl .yr{font-family:var(--mono); color:var(--brass-ink); font-size:12.5px; letter-spacing:.06em}
.tl h3{font-size:15.5px; font-weight:600; margin:2px 0 4px}
.tl p{font-size:13.5px; color:var(--ink2); max-width:62ch; line-height:1.85}
.pull{margin:20px 0 8px; padding:18px 22px; background:var(--red); color:var(--ivory); border-radius:10px; font-family:var(--serifq); font-size:15.5px; line-height:1.95; max-width:560px}
.pull .who{display:block; font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif; font-size:12px; color:var(--iv70); margin-top:9px}
.alumrow{display:flex; flex-wrap:wrap; gap:8px; margin-top:18px}
.alum{border:1px solid var(--line2); border-radius:99px; padding:3px 13px; font-size:12.5px; color:var(--ink2)}
.alum b{color:var(--ink); font-weight:600}

/* 排名 */
.rankgrid{display:grid; grid-template-columns:repeat(4,1fr); gap:12px; margin-top:6px}
.rank{border:1px solid var(--line); border-radius:var(--r); padding:16px 16px 12px}
.rank .srcname{font-size:12.5px; color:var(--ink2)}
.rank .big{font-family:var(--mono); font-size:34px; font-weight:500; color:var(--brass-ink); letter-spacing:-.04em; line-height:1.15; margin-top:2px}
.rank .big .h{font-size:20px; color:var(--ink2)}
.rank .yr{font-size:11.5px; color:var(--ink2); margin-top:2px}
.rank .delta{font-size:11.5px; color:var(--red2); background:var(--red-soft); border-radius:99px; padding:0 7px; margin-left:6px}
.subjrow{display:flex; flex-wrap:wrap; gap:8px; margin-top:16px}
.subj{font-size:12.5px; border:1px solid var(--brass); background:var(--brass-soft); color:var(--brass-ink); border-radius:99px; padding:2px 11px}
.subj b{font-weight:600}
.morelink{display:inline-block; margin-top:14px; font-size:13px}


/* 项目筛选与表格 */
.fbar{display:flex; gap:12px; flex-wrap:wrap; align-items:center; margin:2px 0 14px}
.fbar select,.fbar input[type="search"]{border:1px solid var(--line2); border-radius:8px; padding:6px 11px; font-size:13px; background:var(--card); color:var(--ink); font-family:inherit}
.fbar input[type="search"]{width:200px}
.fbar .switch{font-size:13px; color:var(--ink2); display:flex; align-items:center; gap:6px; cursor:pointer}
.fbar .switch input{accent-color:var(--red); width:15px; height:15px}
.fbar .count{margin-left:auto; font-size:12.5px; color:var(--ink2)}
.fbar .count b{font-family:var(--mono); color:var(--red2)}
.tblwrap{overflow-x:auto; border:1px solid var(--line); border-radius:var(--r)}
#progTable{width:100%; border-collapse:collapse; font-size:13.5px; min-width:860px}
#progTable th{background:var(--paper); text-align:left; font-size:12px; color:var(--ink2); font-weight:600; padding:9px 13px; border-bottom:1px solid var(--line); white-space:nowrap}
#progTable td{padding:11px 13px; border-bottom:1px solid var(--line); vertical-align:top}
#progTable tr:last-child td{border-bottom:none}
#progTable tbody tr:hover td{background:var(--paper)}
.pname{font-weight:600; min-width:220px; line-height:1.5}
.pname .en{display:block; font-weight:400; font-size:12px; color:var(--ink2); font-family:var(--serif); font-style:italic; margin-top:1px}
.badge-stem{display:inline-block; background:var(--red); color:#fff; font-size:10.5px; border-radius:4px; padding:1px 6px; margin-left:7px; vertical-align:2px; letter-spacing:.05em; font-weight:600}
.deg{font-size:12px; border:1px solid var(--line2); border-radius:99px; padding:1px 9px; color:var(--ink2); white-space:nowrap}
.ddl{color:var(--ddl); font-family:var(--mono); font-size:12.5px; white-space:nowrap}
.fee{font-family:var(--mono); font-size:13px; white-space:nowrap}
.req{font-size:12px; color:var(--ink2); white-space:nowrap}

/* 费用 */
.costgrid{display:grid; grid-template-columns:1fr 1fr; gap:18px; margin-top:4px}
.costcap{font-size:14px; font-weight:600; margin-bottom:8px}
table.cost{width:100%; border-collapse:collapse; font-size:13.5px; border:1px solid var(--line); border-radius:8px; overflow:hidden}
table.cost td{padding:8px 13px; border-bottom:1px solid var(--line)}
table.cost td:last-child{text-align:right}
table.cost tr.total td{border-bottom:none; border-top:2px solid var(--line2); font-weight:600; background:var(--paper)}
.schol{background:var(--red-soft); border:1px solid var(--line2); border-radius:8px; padding:12px 16px; font-size:13px; color:var(--red2); margin-top:16px; line-height:1.8}

/* 雇主与校园 */
.emprow{display:flex; flex-wrap:wrap; gap:8px; margin-top:16px}
.emp{border:1px solid var(--line2); border-radius:99px; padding:3px 13px; font-size:12.5px; color:var(--ink2)}
.campusgrid{display:grid; grid-template-columns:1fr 1fr; gap:14px; margin-top:14px}
.wx{display:flex; gap:18px; align-items:center; border:1px solid var(--line); border-radius:10px; padding:16px 18px}
.wx svg{width:36px; height:36px; color:var(--red2); flex:0 0 auto}
.wx .t{font-family:var(--mono); font-size:30px; letter-spacing:-.03em; line-height:1.1}
.wx .cond{font-size:13px; color:var(--ink2)}
.wx .meta{margin-left:auto; text-align:right; font-size:11.5px; color:var(--ink2); line-height:1.7}
.lifetiles{display:grid; grid-template-columns:1fr 1fr; gap:10px; align-content:start}
.mapshell{border:1px solid var(--line); border-radius:10px; overflow:hidden; margin-top:14px}
.maploader{min-height:150px; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:10px; background:var(--paper); color:var(--ink2); font-size:12.5px; padding:22px}
.maploader button{border:1px solid var(--red); color:var(--red2); background:var(--card); border-radius:8px; padding:7px 16px; font-size:13px; cursor:pointer; font-family:inherit}
.maploader button:hover{background:var(--red-soft)}
.mapcap{font-size:11.5px; color:var(--ink2); padding:8px 14px; border-top:1px solid var(--line); background:var(--paper)}
#mapArt{display:none; background:var(--paper)}

/* 相册 */
.photogrid{display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin-top:6px}
.ph{aspect-ratio:4/3; border:1px dashed var(--line2); border-radius:8px; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:7px; color:var(--ink2); font-size:12.5px; background:var(--paper)}
.ph svg{width:26px; height:22px; color:#B4B8B0}

/* 数据来源与方法 */
.srcwrap{overflow-x:auto; border:1px solid var(--line); border-radius:10px}
.srcs{min-width:640px; width:100%; border-collapse:collapse; font-size:12.5px}
.srcs th{background:var(--paper); text-align:left; font-weight:600; color:var(--ink2); padding:8px 14px; border-bottom:1px solid var(--line); font-size:12px}
.srcs td{padding:8px 14px; border-bottom:1px solid var(--line); color:var(--ink2)}
.srcs tr:last-child td{border-bottom:none}
.srcs .mono{font-family:var(--mono); font-size:11.5px; white-space:nowrap}
.method{margin-top:16px; font-size:13px; color:var(--ink2); max-width:68ch}
.fixrow{margin-top:14px; font-size:13px}

.foot{border-top:1px solid var(--line); background:var(--card); margin-top:10px}
.foot .wrap{padding:24px 20px 40px; font-size:12.5px; color:var(--ink2); line-height:1.9}
.cmp-pill{position:fixed; right:22px; bottom:22px; background:var(--red); color:var(--ivory); border-radius:99px; padding:10px 19px; font-size:13.5px; display:none; box-shadow:0 6px 18px rgba(8,26,22,.28); cursor:pointer; z-index:60}
.cmp-pill.show{display:block}
.cmp-pill b{font-family:var(--mono); color:var(--brass)}

/* ---------- 响应式 ---------- */
@media (max-width:980px){
  .hero .wrap{grid-template-columns:1fr; gap:26px; padding-top:24px; padding-bottom:26px}
  .keystats{margin-bottom:0}
  .layout{display:block; padding-top:20px}
  .spine{position:sticky; top:56px; display:flex; gap:6px; overflow-x:auto; background:var(--paper); padding:10px 0; margin:0 0 14px; z-index:40; -webkit-overflow-scrolling:touch}
  .spine .cap,.spine .dl{display:none}
  .spine a{border-left:none; border:1px solid var(--line2); border-radius:99px; padding:5px 13px; white-space:nowrap; background:var(--card); flex:0 0 auto}
  .spine a.active{background:var(--red); color:#fff; border-color:var(--red)}
  .spine a.active .no{color:#CFE7DF}
  h1.school-cn{font-size:27px}
  .facts,.rankgrid{grid-template-columns:repeat(2,1fr)}
  .stat-tiles{grid-template-columns:repeat(2,1fr)!important}
  .costgrid,.campusgrid{grid-template-columns:1fr}
  .photogrid{grid-template-columns:repeat(2,1fr)}
  .topnav{display:none}
  .topsearch input{width:130px}
  section.chapter{padding:20px 18px; scroll-margin-top:120px}
  .wx .meta{text-align:left; margin-left:0}
  .wx{flex-wrap:wrap}
}

/* --- platform additions (see scripts/build-school.mjs) --- */
/* Crest as a real logo image (test.lia.us profile import 2026-08-21): the
   contract drew a dashed placeholder ring; a served logo sits in a solid
   ring and crops to the circle. Profile-gallery figures size their images. */
img.crest{object-fit:cover; border-style:solid; background:#fff}
.ph-profile img{width:100%; height:100%; object-fit:cover; display:block}
.fixture-banner{background:var(--brass-soft); border-bottom:1px solid var(--brass); color:var(--brass-ink); padding:9px 20px; font-size:13px; text-align:center}
.fixture-banner strong{color:var(--ink)}
.keystats .v.na{font-family:var(--sans); font-size:17px; color:var(--ink2)}
.stile .qual{display:inline-block; margin-left:6px; font-size:11px; color:var(--brass-ink); background:var(--brass-soft); border-radius:var(--r-pill); padding:0 7px}
.stile .absence{font-size:12px; color:var(--ink2); margin-top:4px; line-height:1.7}
.src a{color:inherit; text-decoration:underline; text-underline-offset:2px}
.stale{color:var(--ddl); white-space:nowrap}
.photogrid figure.ph-real{margin:0}
.photogrid figure.ph-real img{width:100%; height:auto; aspect-ratio:4/3; object-fit:cover; border-radius:8px; display:block; background:var(--paper)}
.photogrid figure.ph-real figcaption{margin-top:4px}
table.cost td .req{color:var(--ink2); font-size:12px}
