/* ============ 基础与变量 ============ */
:root{
  --navy-950:#0B2138;
  --navy-900:#0E2A47;
  --navy-800:#12395F;
  --navy-700:#1B4A7A;
  --navy-600:#24598F;
  --sky-600:#2E6DA4;
  --sky-500:#3D7EB3;
  --sky-400:#5B9BD5;
  --sky-200:#D6E5F3;
  --sky-100:#EAF2FA;
  --gold-600:#C78A24;
  --gold-500:#E5A93D;
  --gold-400:#F0BE66;
  --gold-100:#FBF0DC;
  /* 「最新」角标用色（暖朱红，与全文的 nav 蓝 / 金铜色同属暖调，不刺眼） */
  --red-600:#C9322A;
  --red-500:#E8483A;
  --red-100:#FBEAE7;
  --paper:#F7F5F0;
  --paper-2:#EFECE4;
  --white:#FFFFFF;
  --ink:#26313D;
  --ink-2:#5A6675;
  --ink-3:#8A94A3;
  --line:#E2DCCF;
  --serif:"Songti SC","Noto Serif SC","Source Han Serif SC",Georgia,"SimSun",serif;
  --sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC","Helvetica Neue",Arial,sans-serif;
  --shadow-sm:0 1px 3px rgba(14,42,71,.08);
  --shadow-md:0 6px 20px rgba(14,42,71,.10);
  --shadow-lg:0 16px 44px rgba(14,42,71,.16);
  --radius:14px;
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  font-family:var(--sans);
  color:var(--ink);
  background:var(--paper);
  line-height:1.7;
  font-size:16px;
  -webkit-font-smoothing:antialiased;
}
img{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
ul{list-style:none}
.container{max-width:1180px;margin:0 auto;padding:0 24px}
.serif{font-family:var(--serif)}

/* ============ 图标 ============ */
.icon{width:20px;height:20px;flex:none;vertical-align:-4px}

/* ============ 顶栏 ============ */
.site-header{
  position:fixed;inset:0 0 auto 0;z-index:100;
  background:rgba(11,33,56,.96);
  backdrop-filter:blur(10px);
  border-bottom:1px solid rgba(255,255,255,.08);
}
.header-inner{
  max-width:1280px;margin:0 auto;padding:0 24px;
  height:64px;display:flex;align-items:center;justify-content:space-between;gap:16px;
}
.brand{display:flex;align-items:center;gap:10px;color:#fff}
.brand-mark{
  width:36px;height:36px;border-radius:10px;flex:none;
  background:linear-gradient(135deg,var(--gold-500),var(--gold-600));
  display:grid;place-items:center;color:var(--navy-950);
}
.brand-name{font-family:var(--serif);font-weight:700;font-size:17px;letter-spacing:.5px;line-height:1.2}
.brand-sub{display:block;font-family:var(--sans);font-weight:400;font-size:11px;color:rgba(255,255,255,.55);letter-spacing:1.5px}
.nav{display:flex;align-items:center;gap:2px}
.nav a{
  position:relative;display:block;padding:9px 13px;
  font-size:14.5px;color:rgba(255,255,255,.82);
  border-radius:8px;transition:color .2s,background .2s;
}
.nav a:hover{color:#fff;background:rgba(255,255,255,.08)}
.nav a.active{color:var(--gold-400)}
.nav a.active::after{
  content:"";position:absolute;left:13px;right:13px;bottom:3px;height:2px;
  background:var(--gold-500);border-radius:2px;
}
.nav-toggle{display:none;width:44px;height:44px;border-radius:10px;color:#fff;align-items:center;justify-content:center}
.nav-toggle:hover{background:rgba(255,255,255,.1)}
.clock{position:absolute;top:50%;right:16px;transform:translateY(-50%);z-index:5;
  color:#F0BE66;font-size:11.5px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:.5px;
  line-height:1.4;text-align:left;white-space:nowrap}
@media (max-width:820px){.clock{display:none}}

/* ============ 视图框架 ============ */
.view{display:none;min-height:100vh}
.view.active{display:block;animation:viewIn .45s ease both}
@keyframes viewIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.page-head{padding:104px 0 0;background:var(--navy-900);color:#fff;position:relative;overflow:hidden}
.page-head::before{
  content:"";position:absolute;right:-120px;top:-160px;width:420px;height:420px;border-radius:50%;
  background:radial-gradient(circle,rgba(91,155,213,.28),transparent 68%);
}
.page-head::after{
  content:"";position:absolute;left:-80px;bottom:-200px;width:360px;height:360px;border-radius:50%;
  background:radial-gradient(circle,rgba(229,169,61,.16),transparent 65%);
}
.page-head-inner{position:relative;z-index:1;padding:44px 0 40px;max-width:1180px;margin:0 auto;padding-left:24px;padding-right:24px}
.page-title{font-family:var(--serif);font-size:34px;font-weight:700;letter-spacing:1px}
.page-title em{font-style:normal;color:var(--gold-400)}
.page-sub{margin-top:8px;color:rgba(255,255,255,.68);font-size:15px;max-width:640px}
.crumb{margin-top:18px;font-size:12.5px;color:rgba(255,255,255,.45);letter-spacing:.5px}

/* ============ 通用区块 ============ */
.section{padding:64px 0}
.section.tight{padding:44px 0}
.section-alt{background:var(--paper-2)}
.sec-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:30px}
.sec-kicker{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:700;letter-spacing:2.5px;color:var(--sky-600);text-transform:uppercase}
.sec-kicker::before{content:"";width:22px;height:2px;background:var(--gold-500);border-radius:2px}
.sec-title{font-family:var(--serif);font-size:27px;font-weight:700;color:var(--navy-900);margin-top:6px}
.sec-more{font-size:14px;color:var(--sky-600);font-weight:500;display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.sec-more:hover{color:var(--gold-600)}

/* ============ 首页 Hero ============ */
.hero{
  position:relative;min-height:640px;display:flex;align-items:center;
  background:var(--navy-950);color:#fff;overflow:hidden;padding-top:64px;
}
.hero-bg{position:absolute;inset:0;background-size:cover;background-position:center 30%;opacity:.55}
.hero-veil{position:absolute;inset:0;background:linear-gradient(100deg,rgba(11,33,56,.94) 8%,rgba(11,33,56,.72) 46%,rgba(11,33,56,.28) 100%)}
.hero-inner{position:relative;z-index:2;max-width:1180px;margin:0 auto;padding:88px 24px;width:100%}
.hero-eyebrow{
  display:inline-flex;align-items:center;gap:10px;
  font-size:13px;letter-spacing:3px;color:var(--gold-400);font-weight:600;
  border:1px solid rgba(229,169,61,.4);padding:7px 16px;border-radius:999px;background:rgba(229,169,61,.08);
}
.hero-title{
  font-family:var(--serif);font-size:clamp(40px,6vw,64px);font-weight:900;
  line-height:1.15;margin:24px 0 6px;letter-spacing:1px;
}
.hero-title .hl{color:var(--gold-400)}
.hero-slogan{font-family:var(--serif);font-size:clamp(17px,2.4vw,22px);color:rgba(255,255,255,.85);letter-spacing:2px;margin-top:10px}
.hero-desc{margin-top:18px;max-width:560px;color:rgba(255,255,255,.72);font-size:15.5px;font-weight:300}
.hero-cta{display:flex;gap:14px;margin-top:34px;flex-wrap:wrap}
.btn{
  display:inline-flex;align-items:center;gap:8px;padding:13px 26px;border-radius:999px;
  font-size:15px;font-weight:600;transition:transform .2s,box-shadow .2s,background .2s;min-height:44px;
}
.btn-gold{background:var(--gold-500);color:var(--navy-950)}
.btn-gold:hover{background:var(--gold-400);transform:translateY(-2px);box-shadow:0 10px 26px rgba(229,169,61,.35)}
.btn-ghost{border:1px solid rgba(255,255,255,.35);color:#fff}
.btn-ghost:hover{border-color:var(--gold-400);color:var(--gold-400);transform:translateY(-2px)}
/* 航线签名元素 */
.flight-line{position:absolute;right:4%;bottom:8%;width:46%;max-width:560px;z-index:1;pointer-events:none}
.flight-line svg{width:100%;height:auto}
.flight-dot{animation:twinkle 3s ease-in-out infinite}
.flight-dot:nth-child(3n){animation-delay:.8s}
.flight-dot:nth-child(4n){animation-delay:1.6s}
@keyframes twinkle{0%,100%{opacity:.25}50%{opacity:1}}

/* ============ 数据条 ============ */
.stats-bar{position:relative;z-index:3;margin-top:-1px;background:var(--navy-900);border-top:1px solid rgba(255,255,255,.07);padding:26px 0}
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.stat{text-align:center;padding:10px 8px;border-radius:12px}
.stat-num{font-family:var(--serif);font-size:clamp(26px,3.4vw,38px);font-weight:900;color:var(--gold-400);line-height:1.1}
.stat-num small{font-size:.55em;font-weight:600;color:rgba(255,255,255,.6);margin-left:2px}
.stat-label{font-size:13px;color:rgba(255,255,255,.62);margin-top:4px;letter-spacing:.5px}
/* 可点击的数据项（后台填了「链接」才有）：50 人 → 同学录、7 门课程 → 学习中心。
   默认就带一点金色底和 › 箭头，让人一眼看出「这个能点」，悬停再加强。 */
.stat-link{display:block;text-decoration:none;color:inherit;cursor:pointer;
  background:rgba(229,169,61,.07);border:1px solid rgba(229,169,61,.18);
  transition:background .2s,border-color .2s,transform .2s,box-shadow .2s}
.stat-link .stat-label::after{content:"›";display:inline-block;margin-left:5px;
  color:var(--gold-400);opacity:.55;transition:opacity .2s,transform .2s}
.stat-link:hover{background:rgba(229,169,61,.15);border-color:rgba(229,169,61,.45);
  transform:translateY(-2px);box-shadow:0 6px 18px rgba(0,0,0,.25)}
.stat-link:hover .stat-label{color:#fff}
.stat-link:hover .stat-label::after{opacity:1;transform:translateX(3px)}
.stat-link:focus-visible{outline:2px solid var(--gold-400);outline-offset:3px}

/* ============ 首页简介 ============ */
.intro-grid{display:grid;grid-template-columns:1.05fr 1fr;gap:48px;align-items:center}
.intro-copy .lead{font-family:var(--serif);font-size:21px;font-weight:600;color:var(--navy-900);line-height:1.8;margin:16px 0}
.intro-copy p{color:var(--ink-2);margin-bottom:14px;font-size:15.5px}
.intro-points{margin-top:22px;display:grid;gap:12px}
.intro-point{display:flex;gap:12px;align-items:flex-start}
.intro-point .icon{color:var(--gold-600);margin-top:3px}
.intro-point b{color:var(--navy-800);font-weight:600}
.intro-point span{color:var(--ink-2);font-size:14.5px}
.intro-media{position:relative}
.intro-media img{border-radius:var(--radius);box-shadow:var(--shadow-lg);width:100%;height:420px;object-fit:cover}
.intro-quote{
  position:absolute;left:-28px;bottom:-22px;right:28px;
  background:var(--white);border-radius:12px;box-shadow:var(--shadow-lg);
  padding:18px 22px;border-left:4px solid var(--gold-500);
}
.intro-quote p{font-family:var(--serif);font-size:14.5px;color:var(--navy-800);line-height:1.7}
.intro-quote footer{margin-top:8px;font-size:12.5px;color:var(--ink-3)}

/* ============ 首页公告/活动预览 ============ */
/* ============ 首页两栏：各平铺 3 条 + 严格等高 ============
   等高原理：panel 撑满 grid 行高（行高 = 两侧内容自然高度的较大者），
   panel-body 内 3 条各 flex:1 均分，矮的一侧被自然拉高 —— 
   两侧高度严格一致，跟哪边内容多少无关。 */
.home-cols{display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:stretch}
.home-cols>div{display:flex;flex-direction:column;min-width:0}
.home-cols .panel{flex:1;display:flex;flex-direction:column;min-height:0}
.home-cols .panel-body{flex:1;min-height:0;display:flex;flex-direction:column;gap:14px}
.home-cols .panel-body>*{flex:1;min-height:0}
/* 展开详情的那条按内容撑开，不挤压另外两条 */
.home-cols .panel-body>.notice-card.open{flex:none}
/* 通知卡：竖向铺开，「查看详情」沉到卡片底部 */
.home-cols .notice-card{display:flex;flex-direction:column}
.home-cols .notice-card .toggle{margin-top:auto}
/* 活动卡：与通知卡共用同一套骨架（顶对齐 + 按钮沉底），
   见下方 .home-act 基础样式；高度由上面的 panel-body>* 均分，无需再覆盖 */

@media(max-width:900px){
  .home-cols .panel-body>*{flex:none}
  .home-act .act-thumb{width:96px;height:72px}
}
.panel{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow:hidden}
.panel-head{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--line)}
.panel-title{font-family:var(--serif);font-size:17px;font-weight:700;color:var(--navy-900);display:flex;align-items:center;gap:9px}
.panel-title .icon{color:var(--gold-600)}
.panel-body{padding:8px 22px 14px}
.home-notice{display:flex;gap:14px;padding:14px 0;border-bottom:1px dashed var(--line);align-items:flex-start}
.home-notice:last-child{border-bottom:none}
.home-notice .nd{flex:none;width:52px;text-align:center;background:var(--sky-100);border-radius:9px;padding:6px 4px}
.home-notice .nd b{display:block;font-family:var(--serif);font-size:19px;color:var(--navy-800);line-height:1.1}
.home-notice .nd span{font-size:11px;color:var(--ink-2)}
.home-notice h4{font-size:14.5px;font-weight:600;color:var(--ink);line-height:1.5;transition:color .2s}
.home-notice a:hover h4{color:var(--sky-600)}
.home-notice p{font-size:13px;color:var(--ink-3);margin-top:3px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}
/* 活动卡：与 .notice-card 同款外观（白底/边框/圆角/阴影/内边距），
   内部同款骨架 —— 顶部 tag+meta 行、标题、摘要、按钮沉底，
   唯一的差别是右侧多一张缩略图。左边缘与标题行跟「通知速递」严格对齐。 */
.home-act{
  display:flex;flex-direction:column;
  background:var(--white);border:1px solid var(--line);border-radius:var(--radius);
  padding:20px 24px;box-shadow:var(--shadow-sm);
  transition:box-shadow .25s,transform .25s;
}
.home-act:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}
.home-act .top{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.home-act .date{font-size:12.5px;color:var(--ink-3);display:flex;align-items:center;gap:6px}
.home-act .act-body{display:flex;gap:16px;align-items:flex-start;margin-top:10px;flex:1;min-height:0}
.home-act .act-main{flex:1;min-width:0}
.home-act .act-main h3{font-size:16.5px;font-weight:600;color:var(--ink);line-height:1.5;margin:0}
.home-act .act-main .summary{
  font-size:14px;color:var(--ink-2);margin-top:6px;line-height:1.6;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.home-act .act-thumb{width:108px;height:80px;object-fit:cover;border-radius:10px;flex:none}
.home-act .toggle{
  display:inline-flex;align-items:center;gap:5px;align-self:flex-start;
  margin-top:auto;font-size:13px;color:var(--sky-600);font-weight:500;
}

/* ============ 公告页 ============ */
.notice-filters{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:26px}
.chip{
  padding:8px 18px;border-radius:999px;font-size:14px;color:var(--ink-2);
  background:var(--white);border:1px solid var(--line);min-height:40px;transition:all .2s;
}
.chip:hover{border-color:var(--sky-400);color:var(--sky-600)}
.chip.active{background:var(--navy-800);border-color:var(--navy-800);color:#fff}
.chip-role{background:var(--gold-100);border-color:var(--gold-400);color:var(--gold-600);font-weight:600}
.chip-role.active{background:var(--gold-500);border-color:var(--gold-500);color:#fff}
.notice-list{display:grid;gap:14px}
.notice-card{
  background:var(--white);border:1px solid var(--line);border-radius:var(--radius);
  padding:20px 24px;box-shadow:var(--shadow-sm);transition:box-shadow .25s,transform .25s;cursor:pointer;
}
.notice-card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}
.notice-card .top{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.tag{font-size:12px;font-weight:600;padding:3px 11px;border-radius:999px;letter-spacing:.5px}
.tag-jw{background:var(--sky-100);color:var(--sky-600)}
.tag-bj{background:var(--gold-100);color:var(--gold-600)}
.tag-hd{background:#E9F6EE;color:#2F8A5B}

/* ============ 「最新」角标 ============
   红色胶囊 + 顶部高光 + 呼吸光环 + 间歇抖动；高度 18px 刻意矮于 .tag（≈26px），
   插进 .top 行不会把行高撑高，左右两栏的标题对齐不会被破坏。
   ⚠️ 抖动用的 transform 不参与布局，所以无论怎么摆都不会影响对齐 ——
      但幅度别贪大（旋转 ≤10°、放大 ≤1.07），否则会压到旁边的日期文字。 */
.badge-new{
  display:inline-flex;align-items:center;justify-content:center;
  height:18px;padding:0 7px;border-radius:999px;
  font-size:10.5px;font-weight:700;font-style:normal;letter-spacing:.4px;line-height:1;
  color:#fff;white-space:nowrap;flex:none;
  background:linear-gradient(150deg,var(--red-500) 0%,var(--red-600) 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.32),
             0 1px 2px rgba(180,40,32,.32),
             0 0 0 3px rgba(232,72,58,.13);
  transform-origin:50% 55%;
  /* 两条动画并行：光环管 box-shadow，抖动管 transform，互不抢属性。
     抖动只在每 3.6s 周期的最后 15% 发生（约 0.55s），其余时间静止 ——
     一直抖会很烦，间歇性"摆一下"才既醒目又耐看。 */
  animation:newPulse 2.8s ease-in-out infinite,
            newShake 3.6s ease-in-out infinite;
}
@keyframes newPulse{
  0%,100%{box-shadow:inset 0 1px 0 rgba(255,255,255,.32),
                    0 1px 2px rgba(180,40,32,.32),
                    0 0 0 3px rgba(232,72,58,.13)}
  50%    {box-shadow:inset 0 1px 0 rgba(255,255,255,.32),
                    0 1px 2px rgba(180,40,32,.30),
                    0 0 0 5.5px rgba(232,72,58,.04)}
}
/* 间歇抖动：左右快速摆 + 轻微放大，幅度递减到静止，像被"弹"了一下 */
@keyframes newShake{
  0%,78%,100%{transform:rotate(0deg) scale(1)}
  81%        {transform:rotate(-10deg) scale(1.07)}
  84%        {transform:rotate(9deg)   scale(1.07)}
  87%        {transform:rotate(-7deg)  scale(1.05)}
  90%        {transform:rotate(5deg)   scale(1.03)}
  93%        {transform:rotate(-2deg)  scale(1.01)}
}
@media(prefers-reduced-motion:reduce){.badge-new{animation:none}}
/* 时间线里 .tl-body 不是 flex 容器，角标与 .tag 同处一行内联流，
   需要显式对齐基线并补一点间距 */
.tl-body .badge-new{vertical-align:middle;margin-left:6px}
.notice-card h3{font-size:16.5px;font-weight:600;color:var(--ink);margin:10px 0 6px;line-height:1.5}
.notice-card .date{font-size:12.5px;color:var(--ink-3);display:flex;align-items:center;gap:6px}
.notice-card .summary{font-size:14px;color:var(--ink-2);margin-top:8px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.notice-card .detail{display:none;margin-top:12px;padding-top:14px;border-top:1px dashed var(--line);font-size:14px;color:var(--ink-2);line-height:1.9}
.notice-card.open .detail{display:block}
.notice-card .toggle{display:inline-flex;align-items:center;gap:5px;margin-top:12px;font-size:13px;color:var(--sky-600);font-weight:500}
.notice-empty{text-align:center;padding:60px 0;color:var(--ink-3)}

/* ============ 同学录 ============ */

/* ---- 口令闸门 ----
   解锁前同学录不在 DOM 数据里，这里只是「门」本身。
   注意 [hidden] 必须显式写：.dir-gate 设了 display:flex，
   会盖掉 UA 样式表里 [hidden]{display:none} 的低优先级规则。 */
.dir-gate[hidden],#dirBody[hidden]{display:none}
.dir-gate{
  max-width:520px;margin:4px auto 24px;padding:38px 34px 28px;text-align:center;
  background:var(--white);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow-md);
}
.dir-gate-icon{
  width:58px;height:58px;margin:0 auto 16px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  background:var(--sky-100);color:var(--sky-600);
}
.dir-gate-icon svg{width:28px;height:28px}
.dir-gate h3{font-family:var(--serif);font-size:19px;font-weight:700;color:var(--navy-900);margin-bottom:8px}
.dir-gate > p{font-size:13.5px;color:var(--ink-2);line-height:1.8}
.dir-gate-form{display:flex;gap:10px;margin-top:22px}
.dir-gate-form input{
  flex:1;min-width:0;height:46px;padding:0 16px;font:15px/1 var(--sans);
  color:var(--ink);background:var(--paper);border:1px solid var(--line);border-radius:10px;
  letter-spacing:1px;transition:border-color .2s,box-shadow .2s,background .2s;
}
.dir-gate-form input:focus{
  outline:none;border-color:var(--sky-400);background:var(--white);
  box-shadow:0 0 0 3px var(--sky-100);
}
.dir-gate-form button{
  flex:none;height:46px;padding:0 26px;font-size:15px;font-weight:600;color:#fff;
  background:var(--navy-800);border-radius:10px;transition:background .2s,transform .15s;
}
.dir-gate-form button:hover{background:var(--navy-700)}
.dir-gate-form button:active{transform:translateY(1px)}
.dir-gate-form button:disabled{opacity:.55;cursor:not-allowed}
.dir-gate .dir-gate-msg{min-height:20px;margin-top:14px;font-size:13px;color:var(--ink-3)}
.dir-gate .dir-gate-msg.is-error{color:var(--red-600);font-weight:500}

.teacher-card{
  display:flex;gap:22px;align-items:center;
  background:linear-gradient(135deg,var(--navy-800),var(--navy-600));
  border-radius:var(--radius);padding:28px 30px;margin-bottom:28px;
  box-shadow:var(--shadow-md);border:1px solid rgba(255,255,255,.08);
}
.teacher-avatar{flex:none}
.teacher-avatar img{width:100px;height:100px;border-radius:50%;object-fit:cover;border:3px solid var(--gold-400);display:block}
.teacher-info h3{color:#fff;font-size:20px;font-family:var(--serif);margin:6px 0 10px;letter-spacing:1px}
.teacher-tag{display:inline-block;font-size:11.5px;padding:3px 12px;border-radius:999px;background:var(--gold-400);color:var(--navy-800);font-weight:700;letter-spacing:1px}
.teacher-info p{color:rgba(255,255,255,.85);font-size:13.5px;line-height:1.8;font-family:var(--serif)}
@media (max-width:600px){
  .teacher-card{flex-direction:column;text-align:center;padding:24px 18px;gap:14px}
  .teacher-info p{font-size:13px}
}
.member-tools{display:flex;gap:14px;flex-wrap:wrap;align-items:center;margin-bottom:26px}
.member-tools .chip{min-height:40px}
.search-box{
  flex:1;min-width:220px;display:flex;align-items:center;gap:8px;
  background:var(--white);border:1px solid var(--line);border-radius:999px;padding:0 16px;
}
.search-box .icon{color:var(--ink-3)}
.search-box input{border:none;outline:none;flex:1;padding:11px 0;font-size:14.5px;background:transparent;color:var(--ink);font-family:inherit}
.member-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:18px}
.member-card{
  background:var(--white);border:1px solid var(--line);border-radius:var(--radius);
  padding:22px 18px 16px;display:flex;flex-direction:column;align-items:stretch;text-align:left;
  min-height:232px;transition:box-shadow .25s,transform .25s;box-shadow:var(--shadow-sm);
  position:relative;
}
.member-card:hover{box-shadow:var(--shadow-md);transform:translateY(-3px)}
.avatar{
  width:64px;height:64px;border-radius:50%;flex:none;display:grid;place-items:center;
  font-family:var(--serif);font-size:24px;font-weight:700;color:#fff;letter-spacing:1px;
}
.member-top{display:flex;gap:14px;align-items:flex-start}
.member-top .avatar-img{width:64px;height:64px;border-radius:50%;object-fit:cover;flex:none;border:2px solid var(--gold-400);box-shadow:var(--shadow-sm)}
.member-top .avatar{width:64px;height:64px;flex:none}
.member-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:7px;padding-top:4px}
.member-info h3{font-size:17px;font-weight:600;color:var(--ink)}
.member-tags{display:flex;gap:6px;flex-wrap:wrap}
.mtag{font-size:11.5px;padding:2px 10px;border-radius:999px;background:var(--sky-100);color:var(--sky-600)}
.mtag.gold{background:var(--gold-100);color:var(--gold-600)}
/* 班委徽章：卡片右下角红章（放大、旋转30度） */
.member-role-badge{
  position:absolute;top:8px;right:8px;z-index:2;
  width:86px;height:62px;
  display:flex;align-items:center;justify-content:center;
  transform:rotate(-15deg);
  filter:drop-shadow(0 2px 5px rgba(199,138,36,.35));
}
.member-role-badge svg{width:100%;height:100%;display:block}
.name-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.name-line h3{font-size:17px;font-weight:600;color:var(--ink)}
.name-line .mtag{flex:none}
.member-card .org{font-size:12.5px;color:var(--ink-2);line-height:1.5;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.member-card .hobby{font-size:12.5px;color:var(--ink-3);margin-top:12px;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.member-card .quote{
  font-size:12.5px;color:var(--navy-700);font-family:var(--serif);font-style:italic;line-height:1.6;
  margin-top:12px;padding-top:10px;border-top:1px dashed var(--line);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:40px;
}
.member-card .loc{font-size:12px;color:var(--ink-3);display:flex;align-items:center;gap:5px}
.member-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:auto;padding-top:10px}
.member-foot .mtag{flex:none}

/* ============ 活动时间线 ============ */
.timeline{position:relative;padding-left:0}
.timeline::before{content:"";position:absolute;left:118px;top:6px;bottom:6px;width:2px;background:linear-gradient(var(--gold-400),var(--sky-400))}
.tl-item{display:grid;grid-template-columns:110px 70px 1fr;gap:0;margin-bottom:34px;position:relative}
.tl-date{text-align:right;padding-top:6px;padding-right:18px}
.tl-date b{display:block;font-family:var(--serif);font-size:21px;color:var(--navy-800);line-height:1.2}
.tl-date span{font-size:12px;color:var(--ink-3)}
.tl-node{position:relative;display:flex;justify-content:center}
.tl-node i{
  width:14px;height:14px;border-radius:50%;background:var(--gold-500);
  border:3px solid var(--paper);box-shadow:0 0 0 2px var(--gold-500);margin-top:14px;position:relative;z-index:1;
}
.tl-card{
  background:var(--white);border:1px solid var(--line);border-radius:var(--radius);
  overflow:hidden;box-shadow:var(--shadow-sm);transition:box-shadow .25s,transform .25s;
}
.tl-card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}
.tl-card img{width:100%;height:200px;object-fit:cover}
.tl-body{padding:16px 20px 18px}
.tl-body h3{font-size:17px;font-weight:600;color:var(--ink)}
.tl-body .meta{display:flex;gap:14px;font-size:12.5px;color:var(--ink-3);margin:7px 0 8px;flex-wrap:wrap}
.tl-body p{font-size:14px;color:var(--ink-2);line-height:1.8}

/* ============ 相册 ============ */
.gallery-group{margin-bottom:44px}
.gallery-group h3{font-family:var(--serif);font-size:20px;font-weight:700;color:var(--navy-900);margin-bottom:16px;display:flex;align-items:center;gap:10px}
.gallery-group h3::before{content:"";width:18px;height:2px;background:var(--gold-500)}
.gallery-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.g-item{position:relative;border-radius:12px;overflow:hidden;cursor:zoom-in;box-shadow:var(--shadow-sm)}
.g-item img{width:100%;height:240px;object-fit:cover;transition:transform .5s ease}
.g-item:hover img{transform:scale(1.05)}
.g-item figcaption{
  position:absolute;inset:auto 0 0 0;padding:30px 14px 12px;color:#fff;font-size:13.5px;font-weight:500;
  background:linear-gradient(transparent,rgba(11,33,56,.85));
}
.g-item .g-count{position:absolute;top:10px;right:10px;background:rgba(11,33,56,.65);color:#fff;font-size:11.5px;padding:3px 9px;border-radius:999px;backdrop-filter:blur(4px)}
.lightbox{
  position:fixed;inset:0;z-index:200;display:none;align-items:center;justify-content:center;
  background:rgba(8,20,34,.92);padding:30px;backdrop-filter:blur(6px);
}
.lightbox.open{display:flex}
.lightbox img{max-width:min(1080px,92vw);max-height:84vh;border-radius:10px;box-shadow:var(--shadow-lg)}
.lightbox .lb-cap{position:absolute;bottom:26px;left:0;right:0;text-align:center;color:rgba(255,255,255,.85);font-size:15px}
.lb-btn{
  position:absolute;top:50%;transform:translateY(-50%);width:52px;height:52px;border-radius:50%;
  background:rgba(255,255,255,.12);color:#fff;display:grid;place-items:center;transition:background .2s;
}
.lb-btn:hover{background:rgba(255,255,255,.25)}
.lb-btn.prev{left:24px}.lb-btn.next{right:24px}
.lb-close{position:absolute;top:20px;right:22px;width:48px;height:48px;border-radius:50%;background:rgba(255,255,255,.12);color:#fff;display:grid;place-items:center;transition:background .2s}
.lb-close:hover{background:rgba(255,255,255,.25)}

/* ============ 学习中心 ============ */
.study-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:40px;align-items:start}
.study-grid>*{min-width:0}
.table-wrap{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow-sm)}
.table-wrap h3{font-family:var(--serif);font-size:18px;font-weight:700;color:var(--navy-900);padding:18px 22px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:10px}
.table-scroll{overflow-x:auto}
table.schedule{width:100%;border-collapse:collapse;font-size:13.5px;min-width:560px}
table.schedule th,table.schedule td{padding:11px 12px;text-align:center;border-bottom:1px solid var(--line)}
table.schedule thead th{background:var(--navy-800);color:#fff;font-weight:600;font-size:13px;letter-spacing:.5px}
table.schedule thead th:first-child{background:var(--navy-700)}
table.schedule tbody td:first-child{background:var(--paper-2);font-weight:600;color:var(--navy-800);white-space:nowrap}
table.schedule td.dim{color:var(--ink-3)}
table.schedule td.hot{background:var(--sky-100);color:var(--navy-800);font-weight:500}
table.schedule td.gold{background:var(--gold-100);color:var(--gold-600);font-weight:600}
.files-panel{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow:hidden}
.files-panel h3{font-family:var(--serif);font-size:18px;font-weight:700;color:var(--navy-900);padding:18px 22px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:10px}
.file-item{display:flex;gap:14px;align-items:center;padding:15px 22px;border-bottom:1px dashed var(--line);transition:background .2s}
.file-item:last-child{border-bottom:none}
.file-item:hover{background:var(--sky-100)}
.file-ic{width:42px;height:42px;border-radius:10px;background:var(--navy-800);color:#fff;display:grid;place-items:center;flex:none}
.file-item h4{font-size:14.5px;font-weight:600;color:var(--ink)}
.file-item p{font-size:12.5px;color:var(--ink-3);margin-top:2px}
.file-item .dl{margin-left:auto;color:var(--sky-600);font-size:13px;font-weight:600;display:inline-flex;align-items:center;gap:5px;white-space:nowrap;padding:8px 12px;border-radius:8px}
.file-item .dl:hover{background:var(--white);color:var(--gold-600)}
/* 上课日历：分两段横排（第1-10周 / 第11-19周），列宽自适应 */
.cal-full{margin-bottom:20px}
.cal-body{overflow-x:auto}
.cal-seg{width:100%;table-layout:fixed;border-collapse:collapse;margin-bottom:14px}
.cal-seg:last-child{margin-bottom:0}
.cal-table{min-width:860px !important}
.cal-table th,.cal-table td{padding:8px 6px;text-align:center;vertical-align:top;line-height:1.45;word-break:break-word;font-size:12px}
.cal-table thead th{background:var(--navy-800);color:#fff;font-weight:600;font-size:12px;letter-spacing:.5px;white-space:nowrap}
.cal-table thead th:first-child{background:var(--navy-700);font-size:11.5px;letter-spacing:0}
.cal-table tbody th{background:var(--navy-700);color:#fff;font-weight:600;font-size:12px;letter-spacing:.5px;white-space:nowrap;width:64px}
.cal-table tbody th small{display:block;font-weight:400;opacity:.75;font-size:10.5px;margin-top:3px;letter-spacing:0}
.cal-table td{border-bottom:1px solid var(--line);border-left:1px solid var(--line)}
.cal-table td .cdate{display:block;color:var(--gold-600);font-weight:700;font-size:12px;margin-bottom:3px}
.cal-table td .cname{display:block;font-weight:600;color:var(--navy-900);font-size:12.5px;line-height:1.4}
.cal-table td .cmeta{display:block;color:var(--ink-3);font-size:11px;margin-top:2px}
.cal-table td.cal-off{color:var(--ink-4,#c9cfd8);font-size:12px}
.cal-table td.cal-note{color:var(--ink-3);font-size:11.5px;font-style:italic;line-height:1.5}
.weeks-panel{
  margin-top:0;margin-bottom:20px;background:var(--white);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow-sm);overflow:hidden;
}
.weeks-panel h3{font-family:var(--serif);font-size:18px;font-weight:700;color:var(--navy-900);padding:18px 22px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:10px}
.weeks-chart{overflow-x:auto;padding:18px 22px 8px}
.weeks-chart table{border-collapse:collapse;font-size:12px;width:100%;table-layout:fixed}
.weeks-chart th,.weeks-chart td{padding:4px 2px;text-align:center}
.weeks-chart thead th{font-size:11px;color:var(--ink-3);font-weight:500;padding-bottom:8px}
.weeks-chart thead th:nth-child(odd):not(:first-child){color:var(--ink-4,#c9cfd8);font-size:9px}
.weeks-chart thead th.wk-cname{width:120px;text-align:left;font-weight:600;color:var(--navy-800);font-size:12.5px}
.weeks-chart tbody td.wk-cname{text-align:left;font-weight:600;color:var(--navy-800);font-size:12.5px;white-space:nowrap;padding-right:10px}
.wk-cell{height:18px;border-radius:4px;display:block}
.wk-on{box-shadow:inset 0 0 0 1px rgba(0,0,0,.06)}
.wk-off{background:var(--paper-2);opacity:.55}
.wk-legend{display:flex;flex-wrap:wrap;gap:6px 14px;padding:12px 22px 16px;font-size:12px;color:var(--ink-2);border-top:1px dashed var(--line)}
#wkTip{position:fixed;z-index:9999;background:var(--navy-900);color:#fff;font-size:12.5px;padding:7px 12px;border-radius:8px;pointer-events:none;display:none;box-shadow:0 8px 24px rgba(0,0,0,.28);white-space:nowrap;max-width:80vw}
.wk-legend i{width:12px;height:12px;border-radius:3px;display:inline-block;vertical-align:-1px;margin-right:4px}
.weeks-note{font-size:12.5px;color:var(--ink-3);padding:0 22px 18px;line-height:1.7}
.practice-full{margin-top:20px}
.practice-table tbody td:first-child{background:transparent;text-align:left;padding-left:20px;color:var(--navy-900);white-space:normal}
/* 表头整栏背景统一（覆盖全局首列 navy-700 差异，需更高优先级） */
table.schedule.practice-table thead th:first-child{background:var(--navy-800)}
/* 模块标题：左侧横排加粗、垂直居中，淡淡的半透明底色 */
table.schedule.practice-table tbody td.cat-cell{
  color:var(--navy-900);font-weight:700;font-size:16px;letter-spacing:1px;
  text-align:center;vertical-align:middle;min-width:178px;white-space:normal;
  padding:11px 14px;background:rgba(18,57,95,.08);
}
/* 数据行：宽松行距，统一白底（不设交替色，与模块列背景一致） */
.practice-table tbody td{padding:11px 14px;font-size:13.5px}
/* 第一列（项目名）底色跟随行、内容居中，与右侧协调（排除模块标题格/合计行） */
.practice-table tbody tr:not(.cat):not(.subtotal) td:first-child:not(.cat-cell){background:inherit;text-align:center;color:var(--navy-900);font-weight:400;white-space:normal}
/* 性质标签列居中 */
.practice-table tbody td:nth-child(2){text-align:center;color:inherit}
/* 次数列弱化 */
.practice-table tbody td:nth-child(3){color:var(--ink-3)}
/* 学分列深蓝加粗 */
.practice-table tbody td:nth-child(4){color:var(--navy-900);font-weight:700;font-size:14px}
/* 合计行：浅蓝底 */
.schedule tr.subtotal td{background:var(--sky-100);font-weight:700;color:var(--navy-800)}
.schedule tr.subtotal td:first-child{background:var(--sky-100);text-align:center}
.schedule tr.subtotal td:nth-child(4){color:var(--navy-900);font-size:14.5px}
.schedule td .req{display:inline-block;padding:2px 10px;border-radius:20px;font-size:12px;font-weight:600;letter-spacing:.5px}
.course-overview td.cat{font-size:11px;color:var(--ink-3);line-height:1.45}
.course-overview td.cred{font-weight:700;color:var(--gold-600);font-size:14px}
.course-overview tr.total-row td{background:var(--sky-100)!important;font-weight:600;color:var(--navy-800);font-size:13px}
.course-overview tr.total-row td.cred{color:var(--gold-700);font-size:16px;font-weight:800}
.schedule td .req-on{background:var(--navy-700);color:#fff}
.schedule td .req-opt{background:#fff;color:var(--ink-3);border:1px solid var(--line)}
.practice-total{display:flex;align-items:center;justify-content:center;gap:10px;padding:14px 22px;background:var(--navy-800);color:#fff;font-size:14.5px;letter-spacing:.5px}
.practice-total strong{color:var(--gold-400);font-size:17px}

/* ============ 荣誉墙 ============ */
.honor-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:18px}
.honor-card{
  position:relative;background:var(--white);border:1px solid var(--line);border-radius:var(--radius);
  padding:26px 24px 22px;box-shadow:var(--shadow-sm);overflow:hidden;transition:transform .25s,box-shadow .25s;
}
.honor-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-md)}
.honor-card::before{
  content:"";position:absolute;top:0;left:0;right:0;height:4px;
  background:linear-gradient(90deg,var(--gold-500),var(--gold-400));
}
.honor-badge{width:52px;height:52px;border-radius:14px;background:var(--gold-100);color:var(--gold-600);display:grid;place-items:center;margin-bottom:14px}
.honor-card .year{position:absolute;top:20px;right:20px;font-family:var(--serif);font-size:13px;font-weight:700;color:var(--sky-400);letter-spacing:1px}
.honor-card h3{font-size:16.5px;font-weight:600;color:var(--ink);line-height:1.5}
.honor-card .scope{display:inline-block;margin-top:8px;font-size:12px;color:var(--gold-600);background:var(--gold-100);padding:2px 11px;border-radius:999px;font-weight:600}
.honor-card p{font-size:13.5px;color:var(--ink-2);margin-top:10px;line-height:1.7}
.honor-empty{text-align:center;padding:40px;color:var(--ink-3);background:var(--white);border:1px dashed var(--line);border-radius:var(--radius)}

/* ============ 留言板 ============ */
.msg-layout{display:grid;grid-template-columns:1fr 340px;gap:36px;align-items:start}
.msg-list{display:grid;gap:14px}
.msg-card{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);padding:18px 22px;box-shadow:var(--shadow-sm)}
.msg-card .head{display:flex;align-items:center;gap:12px;margin-bottom:8px}
.msg-card .avatar{width:40px;height:40px;border-radius:11px;font-size:16px}
.msg-card .name{font-size:14.5px;font-weight:600;color:var(--ink)}
.msg-card .time{font-size:12px;color:var(--ink-3)}
.msg-card p{font-size:14.5px;color:var(--ink-2);line-height:1.8}
.msg-card .me-tag{margin-left:auto;font-size:11.5px;color:var(--sky-600);background:var(--sky-100);padding:2px 10px;border-radius:999px}
.msg-form{
  position:sticky;top:88px;background:var(--white);border:1px solid var(--line);
  border-radius:var(--radius);padding:24px;box-shadow:var(--shadow-sm);
}
.msg-form h3{font-family:var(--serif);font-size:18px;font-weight:700;color:var(--navy-900);margin-bottom:16px;display:flex;align-items:center;gap:9px}
.msg-form .icon{color:var(--gold-600)}
.msg-form label{display:block;font-size:13px;color:var(--ink-2);margin:14px 0 6px;font-weight:500}
.msg-form input,.msg-form textarea{
  width:100%;border:1px solid var(--line);border-radius:10px;padding:11px 14px;font-size:14.5px;
  font-family:inherit;color:var(--ink);background:var(--paper);outline:none;transition:border .2s;
}
.msg-form input:focus,.msg-form textarea:focus{border-color:var(--sky-400);background:#fff}
.msg-form textarea{resize:vertical;min-height:110px}
.msg-form .btn{width:100%;justify-content:center;margin-top:18px}
.form-tip{font-size:12px;color:var(--ink-3);margin-top:10px;text-align:center}

/* ============ 页脚 ============ */
.site-footer{background:var(--navy-950);color:rgba(255,255,255,.6);padding:48px 0 30px;margin-top:20px}
.footer-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:36px;padding-bottom:34px;border-bottom:1px solid rgba(255,255,255,.09)}
.footer-brand{display:flex;align-items:center;gap:10px;color:#fff;margin-bottom:14px}
.footer-col h4{color:#fff;font-size:14px;font-weight:600;margin-bottom:14px;letter-spacing:.5px}
.footer-col ul{display:grid;gap:8px}
.footer-col a{font-size:13.5px;transition:color .2s}
.footer-col a:hover{color:var(--gold-400)}
.footer-note{font-size:13px;line-height:1.9}
.footer-bottom{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;padding-top:22px;font-size:12.5px;color:rgba(255,255,255,.4)}
.footer-icp{color:rgba(255,255,255,.4);text-decoration:none;transition:color .2s}
.footer-icp:hover{color:rgba(255,255,255,.85)}
.footer-sig{display:flex;align-items:center;gap:6px;color:rgba(255,255,255,.5)}
.footer-sig .icon{color:var(--gold-500)}

/* ============ 响应式 ============ */
@media (max-width:1024px){
  .timeline::before{left:88px}
  .tl-item{grid-template-columns:80px 50px 1fr}
  .gallery-grid{grid-template-columns:repeat(2,1fr)}
  .study-grid{grid-template-columns:1fr}
  .msg-layout{grid-template-columns:1fr}
  .msg-form{position:static}
  .footer-grid{grid-template-columns:1fr 1fr}
  .home-cols{grid-template-columns:1fr}
  .intro-grid{grid-template-columns:1fr;gap:56px}
  .intro-quote{left:16px;right:16px}
}
@media (max-width:768px){
  .nav-toggle{display:flex}
  .nav{
    position:fixed;top:64px;left:0;right:0;display:none;flex-direction:column;align-items:stretch;
    background:rgba(11,33,56,.98);padding:10px 16px 18px;border-bottom:1px solid rgba(255,255,255,.1);
    box-shadow:var(--shadow-lg);
  }
  .nav.open{display:flex}
  .nav a{padding:13px 14px;font-size:15px;border-radius:10px}
  .nav a.active::after{display:none}
  .nav a.active{background:rgba(229,169,61,.12)}
  .stats{grid-template-columns:repeat(2,1fr)}
  .tl-item{grid-template-columns:64px 34px 1fr;gap:0}
  .timeline::before{left:70px}
  .tl-date{padding-right:10px}
  .tl-date b{font-size:16px}
  .gallery-grid{grid-template-columns:1fr 1fr;gap:10px}
  .g-item img{height:170px}
  .section{padding:48px 0}
  .page-title{font-size:27px}
  .footer-grid{grid-template-columns:1fr}
  .member-grid{grid-template-columns:repeat(auto-fill,minmax(210px,1fr))}
}
@media (max-width:520px){
  .gallery-grid{grid-template-columns:1fr}
  .g-item img{height:210px}
  .stats{grid-template-columns:repeat(2,1fr);gap:6px}
  .flight-line{display:none}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001s !important;transition-duration:.001s !important}
  html{scroll-behavior:auto}
}
.reveal{opacity:0;transform:translateY(24px);transition:opacity .7s ease,transform .7s ease}
.reveal.in{opacity:1;transform:none}


/* ============ 本站新增 ============ */
/* 后台录入的多行文本按原样保留换行 */
.notice-card .detail,.footer-note,.msg-card p,.tl-body p{white-space:pre-line}

/* 首屏数据加载态：避免内容闪烁 */
.site-loading{position:fixed;inset:0;z-index:200;display:grid;place-items:center;background:var(--navy-950);color:rgba(255,255,255,.72);font-size:14px;letter-spacing:2px;transition:opacity .35s}
.site-loading.hide{opacity:0;pointer-events:none}
.site-loading .dot{display:inline-block;width:6px;height:6px;margin:0 3px;border-radius:50%;background:var(--gold-400);animation:ld 1s infinite ease-in-out}
.site-loading .dot:nth-child(2){animation-delay:.15s}
.site-loading .dot:nth-child(3){animation-delay:.3s}
@keyframes ld{0%,100%{opacity:.25;transform:translateY(0)}50%{opacity:1;transform:translateY(-4px)}}

/* 离线/降级提示条：顶栏是 fixed，提示条要贴在它下面，否则会被压住看不见 */
#offlineBar{position:fixed;top:64px;left:0;right:0;z-index:99}
#offlineBar:empty{display:none}
.offline-bar{background:var(--gold-100);color:#8a5a10;border-bottom:1px solid #e9cf9a;font-size:12.5px;padding:7px 0;text-align:center;box-shadow:0 2px 8px rgba(14,42,71,.08)}
.offline-bar b{font-weight:700}

/* 资料下载：可点击的真实下载 */
.file-item .dl{cursor:pointer}
.file-item .dl.off{opacity:.5;cursor:not-allowed}

/* 留言：待审核标记 + 空态 */
.msg-card.pending{border-left:3px solid var(--gold-500)}
.msg-empty{padding:34px 20px;text-align:center;color:var(--ink-3);font-size:14px;background:var(--white);border:1px dashed var(--line);border-radius:var(--radius)}
.msg-form .form-tip{color:var(--ink-3);font-size:12.5px;margin-top:10px}
.msg-form .err{color:#c0392b;font-size:12.5px;margin-top:8px;min-height:18px}
.msg-form input,.msg-form textarea{width:100%;padding:11px 13px;border:1px solid var(--line);border-radius:10px;font-family:inherit;font-size:14.5px;background:var(--white);color:var(--ink);margin-bottom:14px}
.msg-form input:focus,.msg-form textarea:focus{outline:2px solid var(--sky-400);outline-offset:1px}
.msg-form textarea{min-height:96px;resize:vertical}
.msg-form h3{margin-bottom:16px}
.msg-form label{display:block;font-size:13px;color:var(--ink-2);margin-bottom:6px;font-weight:500}

/* 相册：空态 */
.gallery-empty{padding:40px;text-align:center;color:var(--ink-3)}

/* 图片加载占位 */
img{background:linear-gradient(100deg,var(--paper-2) 30%,#e6e1d7 50%,var(--paper-2) 70%);background-size:200% 100%;animation:shim 1.4s infinite linear}
img[src=""],img.loaded{animation:none;background:none}
@keyframes shim{to{background-position:-200% 0}}

/* ============ 北航MBA 资讯（后端定时同步自北航MBA官网） ============ */
.buaa-bar{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:22px}
.buaa-bar .chips{display:flex;gap:8px;flex-wrap:wrap}
.buaa-sync{margin-left:auto;font-size:12.5px;color:var(--ink-3);white-space:nowrap;font-variant-numeric:tabular-nums}

.buaa-grid{display:grid;gap:22px;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}
.buaa-card{
  display:flex;flex-direction:column;background:var(--white);
  border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;
  box-shadow:var(--shadow-sm);
  transition:box-shadow .25s,transform .25s,border-color .25s;
}
.buaa-card:hover{box-shadow:var(--shadow-md);transform:translateY(-3px);border-color:var(--sky-200)}

.buaa-thumb{aspect-ratio:16/10;overflow:hidden;background:var(--paper-2)}
.buaa-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .5s ease}
.buaa-card:hover .buaa-thumb img{transform:scale(1.04)}
/* 没抓到封面时的兜底：不显示破图，改用深蓝底 + 栏目简称 */
.buaa-thumb.is-empty{display:grid;place-items:center;background:linear-gradient(135deg,var(--navy-800),var(--navy-600))}
.buaa-thumb.is-empty span{font-family:var(--serif);font-size:28px;color:rgba(240,190,102,.88);letter-spacing:3px}

.buaa-body{padding:16px 18px 18px;display:flex;flex-direction:column;flex:1;min-height:0}
.buaa-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:9px}
.buaa-src{font-size:11.5px;font-weight:500;padding:2px 9px;border-radius:999px;background:var(--sky-100);color:var(--sky-600)}
.buaa-date{font-size:12.5px;color:var(--ink-3);font-variant-numeric:tabular-nums}

.buaa-card h3{
  font-size:16px;font-weight:600;color:var(--ink);line-height:1.5;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.buaa-sum{
  font-size:13px;color:var(--ink-2);line-height:1.65;margin-top:8px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.buaa-go{
  margin-top:auto;padding-top:14px;display:inline-flex;align-items:center;gap:4px;
  font-size:12.5px;font-weight:500;color:var(--navy-600);
}
.buaa-go .icon{width:14px;height:14px;transition:transform .25s}
.buaa-card:hover .buaa-go{color:var(--gold-600)}
.buaa-card:hover .buaa-go .icon{transform:translate(2px,-2px)}

/* chips 上带条数：一眼知道每个桶有多少条 */
.buaa-bar .chip b{margin-left:4px;font-weight:600;opacity:.62;font-variant-numeric:tabular-nums}

/* 阅读量：只有官网文章有；没有就不渲染，不留空位 */
.buaa-read{font-size:11.5px;color:var(--ink-3);font-variant-numeric:tabular-nums;white-space:nowrap}

/* 「显示更多」 */
.buaa-more-wrap{display:flex;justify-content:center;margin-top:26px}
.buaa-more-wrap .btn{min-width:200px}

@media (max-width:1024px){.buaa-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:18px}}
@media (max-width:520px){.buaa-grid{grid-template-columns:1fr}.buaa-sync{margin-left:0;width:100%}.buaa-more-wrap .btn{width:100%;min-width:0}}
