/* ==========================================================
   马大中文研究生 · 学习门户
   配色取自 UM 校徽：深蓝 + 金黄
   ========================================================== */

:root{
  --um-blue:#003D7C;
  --um-blue-deep:#00264D;
  --um-gold:#F2C230;
  --um-gold-soft:#FDF3D2;
  --ink:#18222F;
  --muted:#6C7684;
  --line:#E7E3DA;
  --paper:#F8F6F1;
  --white:#FFFFFF;
  --ok:#1E9E6A;
  --danger:#C4492F;
  --radius:18px;
  --shadow:0 1px 2px rgba(16,24,40,.05), 0 8px 24px -12px rgba(16,24,40,.12);
}

*{ box-sizing:border-box; }

html,body{
  margin:0; padding:0;
  background:var(--paper);
  color:var(--ink);
  font-family:-apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB",
              "Microsoft YaHei", "Noto Sans SC", sans-serif;
  font-size:15px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
}

button{ font-family:inherit; }

.shell{
  min-height:100vh;
  min-height:100dvh;
  display:flex;
  flex-direction:column;
  padding:env(safe-area-inset-top) 0 env(safe-area-inset-bottom);
}

.wrap{
  width:100%;
  max-width:760px;
  margin:0 auto;
  padding:0 20px;
  flex:1;
  display:flex;
  flex-direction:column;
}

/* ---------- 视图切换 ---------- */
.view{ display:none; flex:1; flex-direction:column; }
.view.on{ display:flex; animation:fade .28s ease both; }

@keyframes fade{
  from{ opacity:0; transform:translateY(6px); }
  to{ opacity:1; transform:none; }
}

/* ---------- 首页 ---------- */
.home{
  flex:1;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  text-align:center;
  padding:40px 0 56px;
}

.home-logo{
  width:168px;
  height:auto;
  margin-bottom:22px;
}

.home h1{
  font-size:23px;
  font-weight:600;
  letter-spacing:.5px;
  margin:0 0 6px;
  color:var(--um-blue-deep);
}

.home .sub{
  font-size:13.5px;
  color:var(--muted);
  letter-spacing:1.5px;
  margin:0 0 34px;
}

.home-actions{
  width:100%;
  max-width:320px;
  display:flex;
  flex-direction:column;
  gap:12px;
}

.home-foot{
  margin-top:46px;
  font-size:12px;
  color:#9AA3AF;
  letter-spacing:.4px;
}

/* ---------- 天气 ---------- */
.wx{
  width:100%;
  max-width:320px;
  margin-top:20px;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:9px;
}

.wx-hub{
  max-width:none;
  margin:0 0 16px;
}

.wx-line{
  display:flex;
  align-items:center;
  flex-wrap:wrap;
  gap:6px;
  font-size:12.5px;
  color:#6B7280;
  letter-spacing:.2px;
}

.wx-meta{
  display:inline-flex;
  align-items:center;
  gap:5px;
  font-size:11.5px;
  letter-spacing:0;
}

.wx-pop{
  color:var(--um-blue);
  background:#EEF3F9;
  border-radius:6px;
  padding:1px 7px;
  font-variant-numeric:tabular-nums;
}

.wx-rain{ color:#8A93A0; }

.wx-sep{
  font-style:normal;
  color:#C7CDD6;
  padding:0 1px;
}

.wx-ico{ font-size:16px; line-height:1; }

.wx-line b{
  color:var(--um-blue-deep);
  font-weight:600;
  letter-spacing:.3px;
}

.wx-temp{
  color:var(--um-blue-deep);
  font-weight:600;
  font-variant-numeric:tabular-nums;
}

.wx-txt{ color:#8A93A0; }

.wx-tips{
  width:100%;
  display:flex;
  flex-direction:column;
  gap:6px;
}

.wx-tip{
  display:flex;
  align-items:center;
  justify-content:center;
  gap:6px;
  padding:8px 12px;
  border-radius:12px;
  background:#FFF6EC;
  border:1px solid #F7E4CB;
  color:#A8611F;
  font-size:12.5px;
  letter-spacing:.2px;
}

.wx-tip i{
  font-style:normal;
  font-size:13px;
  line-height:1;
}

.home-note{
  margin:12px 0 0;
  font-size:12px;
  line-height:1.85;
  color:#9AA3AF;
  letter-spacing:.2px;
  text-align:center;
}

/* ---------- 按钮 ---------- */
.btn{
  display:flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  width:100%;
  height:52px;
  border:none;
  border-radius:14px;
  font-size:15.5px;
  font-weight:500;
  cursor:pointer;
  transition:transform .12s ease, background .16s ease, opacity .16s ease;
  -webkit-tap-highlight-color:transparent;
}
.btn:active{ transform:scale(.985); }
.btn[disabled]{ opacity:.55; cursor:default; }

.btn-primary{
  background:var(--um-blue);
  color:#fff;
  box-shadow:0 6px 18px -8px rgba(0,61,124,.7);
}
.btn-primary:hover{ background:#004a94; }

.btn-ghost{
  background:var(--white);
  color:var(--um-blue);
  border:1px solid var(--line);
}
.btn-ghost:hover{ border-color:#C9D3E0; }

.btn-gold{
  background:var(--um-gold);
  color:#402D00;
  box-shadow:0 6px 18px -8px rgba(242,194,48,.85);
}

.btn-text{
  background:none;
  border:none;
  color:var(--muted);
  font-size:13.5px;
  cursor:pointer;
  padding:10px;
}
.btn-text:hover{ color:var(--um-blue); }

/* ---------- 表单页 ---------- */
.page{
  flex:1;
  padding:28px 0 40px;
}

.page-head{
  display:flex;
  align-items:center;
  gap:10px;
  margin-bottom:26px;
}

.back{
  width:38px; height:38px;
  border-radius:11px;
  border:1px solid var(--line);
  background:var(--white);
  display:flex; align-items:center; justify-content:center;
  cursor:pointer; color:var(--ink);
  flex:none;
}

.page-head h2{
  font-size:19px;
  font-weight:600;
  margin:0;
  color:var(--um-blue-deep);
}

.reg-help{
  margin-top:22px;
  padding:13px 15px;
  border-radius:14px;
  background:#F4F7FC;
  border:1px solid #E3EAF4;
  font-size:12.5px;
  line-height:1.9;
  color:#6B7280;
  text-align:center;
  letter-spacing:.2px;
}
.reg-help b{
  color:var(--um-blue);
  font-weight:600;
  letter-spacing:.4px;
  white-space:nowrap;
}

.field{ margin-bottom:16px; }

.field label{
  display:block;
  font-size:13px;
  color:var(--muted);
  margin-bottom:7px;
  font-weight:500;
}

.field input{
  width:100%;
  height:52px;
  border:1px solid var(--line);
  border-radius:13px;
  background:var(--white);
  padding:0 16px;
  font-size:15.5px;
  color:var(--ink);
  outline:none;
  transition:border-color .15s, box-shadow .15s;
}
.field input:focus{
  border-color:var(--um-blue);
  box-shadow:0 0 0 3px rgba(0,61,124,.1);
}
.field input::placeholder{ color:#AEB6C0; }

.field .hint{
  font-size:12.5px;
  color:var(--muted);
  margin-top:7px;
  line-height:1.5;
}

.field-row{
  display:flex;
  gap:10px;
}
.field-row input{ flex:1; }
.field-row .btn{
  width:auto;
  flex:none;
  padding:0 18px;
  height:52px;
  font-size:14px;
  white-space:nowrap;
}

/* ---------- 提示条 ---------- */
.alert{
  display:none;
  align-items:flex-start;
  gap:9px;
  padding:12px 14px;
  border-radius:12px;
  font-size:13.5px;
  line-height:1.55;
  margin-bottom:16px;
}
.alert.on{ display:flex; }
.alert-error{ background:#FCEDEA; color:#8E2F1C; }
.alert-info{ background:var(--um-gold-soft); color:#6B4E00; }
.alert-ok{ background:#E8F6EF; color:#12684A; }

/* ---------- 欢迎页 ---------- */
.welcome{
  flex:1;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  text-align:center;
  padding:20px 0 48px;
}

.welcome-mark{
  width:74px; height:74px;
  border-radius:50%;
  background:var(--um-gold-soft);
  display:flex; align-items:center; justify-content:center;
  margin-bottom:26px;
}

.welcome h2{
  font-size:22px;
  line-height:1.75;
  font-weight:600;
  margin:0 0 10px;
  color:var(--um-blue-deep);
  letter-spacing:.3px;
}

.welcome p{
  font-size:14px;
  color:var(--muted);
  margin:0 0 40px;
}

.welcome .btn{ max-width:300px; }

/* ---------- 模块导航 ---------- */
.hub-head{
  padding:32px 0 22px;
}

.hub-top{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
}

.hub-head .greet{
  display:flex;
  align-items:baseline;
  gap:8px;
  min-width:0;
  font-size:13px;
  color:var(--muted);
  letter-spacing:.5px;
  margin-bottom:6px;
}

.hub-head .greet #hubGreet{
  min-width:0;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

/* 实时时间：浅色小胶囊，和左侧问候语拉开层级 */
.greet-clock{
  flex:none;
  font-size:11.5px;
  font-weight:500;
  letter-spacing:.4px;
  font-variant-numeric:tabular-nums;
  color:#7C8698;
  background:#EFEDE7;
  border-radius:999px;
  padding:2px 8px 1px;
}

.hub-exit{
  border:1px solid var(--line);
  background:#fff;
  color:var(--muted);
  font-size:12px;
  font-family:inherit;
  line-height:1;
  padding:7px 12px;
  border-radius:999px;
  cursor:pointer;
  flex:none;
  margin-bottom:6px;
}
.hub-exit:hover{ color:#CE4B3E; border-color:#F3C9C3; background:#FFF6F4; }

.hub-head h2{
  font-size:21px;
  font-weight:600;
  margin:0;
  color:var(--um-blue-deep);
}

.hub-grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:12px;
  padding-bottom:34px;
}

.hub-card{
  position:relative;
  background:var(--white);
  border:1px solid var(--line);
  border-radius:var(--radius);
  padding:18px 16px;
  cursor:pointer;
  text-align:left;
  box-shadow:var(--shadow);
  transition:transform .14s ease, border-color .14s ease;
  -webkit-tap-highlight-color:transparent;
}
.hub-card:hover{ transform:translateY(-2px); border-color:#D5DCE6; }
.hub-card:active{ transform:scale(.985); }

.hub-card.wide{ grid-column:1 / -1; }

.hub-ico{
  width:42px; height:42px;
  border-radius:12px;
  background:var(--um-gold-soft);
  display:flex; align-items:center; justify-content:center;
  margin-bottom:13px;
  color:var(--um-blue);
}

.hub-card h3{
  font-size:15.5px;
  font-weight:600;
  margin:0 0 5px;
  color:var(--ink);
}

.hub-card p{
  font-size:12.5px;
  color:var(--muted);
  margin:0;
  line-height:1.5;
}

.hub-card .badge{
  position:absolute;
  top:16px; right:16px;
  font-size:11px;
  padding:2px 8px;
  border-radius:20px;
  background:var(--um-gold-soft);
  color:#7A5A00;
}

/* ---------- 赞助页 ---------- */
.spon-hero{
  text-align:center;
  padding:24px 0 22px;
}

.spon-mark{
  width:52px;
  height:52px;
  border-radius:17px;
  background:#FFEAF4;
  color:#DC4A8E;
  display:flex;
  align-items:center;
  justify-content:center;
  margin:0 auto 14px;
}

.spon-hero h2{
  font-size:17px;
  font-weight:600;
  margin:0 0 7px;
  color:var(--um-blue-deep);
  letter-spacing:.3px;
}

.spon-hero p{
  font-size:12.5px;
  color:var(--muted);
  margin:0;
}

.spon-codes{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:13px;
}

.pay{
  background:var(--white);
  border:1px solid var(--line);
  border-radius:16px;
  padding:9px 9px 11px;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:9px;
  cursor:pointer;
  box-shadow:var(--shadow);
  transition:transform .16s ease, box-shadow .16s ease;
  -webkit-tap-highlight-color:transparent;
}

.pay:hover{
  transform:translateY(-2px);
  box-shadow:0 12px 24px -16px rgba(16,24,40,.45);
}

.pay:active{ transform:scale(.985); }

.pay img{
  width:100%;
  height:auto;
  display:block;
  border-radius:11px;
  background:var(--white);
}

.pay span{
  font-size:12px;
  color:var(--muted);
  letter-spacing:.5px;
}

.spon-tip{
  text-align:center;
  font-size:11.5px;
  color:#9AA3AF;
  margin:15px 0 0;
  line-height:1.5;
}

.spon-board{
  margin:20px 0 6px;
  background:var(--white);
  border:1px solid var(--line);
  border-radius:16px;
  box-shadow:var(--shadow);
  padding:15px 15px 16px;
}

.spon-board-head{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:10px;
  margin-bottom:12px;
}

.spon-board-head h3{
  font-size:14px;
  font-weight:600;
  margin:0;
  color:var(--um-blue-deep);
  letter-spacing:.5px;
}

.spon-board-head span{
  font-size:11px;
  color:#A9B0BA;
}

.spon-names{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
}

.spon-name{
  font-size:12.5px;
  color:#7A4A2A;
  background:#FFF3E4;
  border:1px solid #F6E2CB;
  border-radius:999px;
  padding:5px 12px;
  letter-spacing:.2px;
}

.spon-name i{
  font-style:normal;
  font-size:10.5px;
  color:#B08A66;
  margin-left:5px;
}

.spon-empty{
  font-size:12.5px;
  color:#A9B0BA;
  margin:2px 0 0;
  letter-spacing:.2px;
}

/* ---------- 收款码放大 ---------- */
.paybox{
  position:fixed;
  inset:0;
  z-index:90;
  display:none;
  align-items:center;
  justify-content:center;
  padding:24px;
  background:rgba(10,16,24,.74);
  -webkit-backdrop-filter:blur(7px);
  backdrop-filter:blur(7px);
}

.paybox.on{ display:flex; animation:fade .2s ease both; }

.paybox-inner{ text-align:center; }

.paybox img{
  width:min(74vw, 310px);
  height:auto;
  display:block;
  margin:0 auto;
  border-radius:16px;
  background:var(--white);
  box-shadow:0 26px 60px -22px rgba(0,0,0,.6);
}

.paybox p{
  color:#E9EEF5;
  font-size:13px;
  letter-spacing:1px;
  margin:15px 0 0;
}

.paybox-close{
  color:#D9E1EA;
  border:1px solid rgba(255,255,255,.3);
  border-radius:999px;
  padding:8px 26px;
  margin-top:14px;
  font-size:13px;
  letter-spacing:2px;
}

.paybox-close:hover{ color:#fff; border-color:rgba(255,255,255,.55); }

/* ---------- 顶栏 ---------- */
.topbar{
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:16px 0 6px;
  gap:12px;
}

.topbar .t-title{
  font-size:16px;
  font-weight:600;
  color:var(--um-blue-deep);
  flex:1;
  min-width:0;
}

.topbar .t-user{
  font-size:12.5px;
  color:var(--muted);
  font-variant-numeric:tabular-nums;
}

/* ---------- 校历 ---------- */
.now-card{
  background:var(--white);
  border:1px solid var(--line);
  border-radius:20px;
  padding:17px 17px 15px;
  box-shadow:var(--shadow);
  margin:6px 0 18px;
}

.now-row{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:12px;
}

.now-date b{
  display:block;
  font-size:19px;
  font-weight:600;
  color:var(--um-blue-deep);
  letter-spacing:.3px;
  line-height:1.35;
}

.now-date span{
  font-size:12.5px;
  color:var(--muted);
}

.now-clock{
  font-size:15px;
  font-weight:600;
  color:var(--um-blue);
  font-variant-numeric:tabular-nums;
  letter-spacing:.6px;
  margin-top:5px;
  white-space:nowrap;
}

.now-state{
  display:flex;
  align-items:center;
  gap:8px;
  flex-wrap:wrap;
  margin-top:13px;
}

.now-badge{
  font-size:12px;
  font-weight:600;
  padding:4px 11px;
  border-radius:999px;
  background:#E9F0FF;
  color:#3A57C4;
  letter-spacing:.3px;
  transition:background .35s ease, color .35s ease;
}

.now-stage{
  font-size:12.5px;
  color:var(--muted);
  line-height:1.5;
}

.now-bar{
  height:6px;
  border-radius:6px;
  background:#EEF1F5;
  margin-top:13px;
  overflow:hidden;
}

.now-bar i{
  display:block;
  height:100%;
  border-radius:6px;
  background:var(--um-blue);
  transition:width .6s ease, background .35s ease;
}

.now-foot{
  font-size:12px;
  color:#8A93A0;
  margin-top:9px;
}

.cal-legend{
  display:flex;
  flex-wrap:wrap;
  gap:6px 11px;
  padding:9px 11px;
  margin-bottom:15px;
  background:var(--white);
  border:1px solid var(--line);
  border-radius:14px;
  font-size:11px;
  color:var(--muted);
}

.cal-legend span{
  display:inline-flex;
  align-items:center;
  gap:5px;
}

.cal-legend i{
  width:7px;
  height:7px;
  border-radius:2px;
  display:block;
}

.cal-legend .lg-tip{
  margin-left:auto;
  color:#A9B0BA;
}

/* ---------- 学期卡片（可折叠） ---------- */
.cal-term{
  background:var(--white);
  border:1px solid var(--line);
  border-radius:16px;
  box-shadow:var(--shadow);
  padding:13px 13px 5px;
  margin-bottom:11px;
}

.cal-term-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  width:100%;
  background:none;
  border:0;
  padding:0;
  margin:0 0 11px;
  font:inherit;
  text-align:left;
  cursor:pointer;
  -webkit-tap-highlight-color:transparent;
}

.cth-l{
  display:flex;
  flex-direction:column;
  gap:3px;
  min-width:0;
}

.cth-l b{
  display:flex;
  align-items:center;
  gap:6px;
  font-size:15px;
  font-weight:600;
  color:var(--um-blue-deep);
}

.cth-cur{
  font-style:normal;
  font-size:10px;
  font-weight:600;
  padding:1px 7px;
  border-radius:999px;
  background:var(--um-blue);
  color:#fff;
  letter-spacing:.5px;
}

.cth-l em{
  font-style:normal;
  font-size:11.5px;
  color:var(--muted);
  font-variant-numeric:tabular-nums;
  letter-spacing:.2px;
}

.cth-r{
  display:flex;
  align-items:center;
  gap:5px;
  flex:0 0 auto;
  color:var(--muted);
}

.cth-r i{
  font-style:normal;
  font-size:11.5px;
  font-variant-numeric:tabular-nums;
}

.cth-arrow{
  color:#B4BCC7;
  transition:transform .22s ease;
}

.cal-term.is-open .cth-arrow{ transform:rotate(180deg); }

.cal-strip{
  display:flex;
  gap:2px;
  height:9px;
  position:relative;
}

.cal-strip i{
  display:block;
  flex:1;
  border-radius:2px;
}

.strip-cursor{
  position:absolute;
  top:-4px;
  width:3px;
  height:17px;
  border-radius:2px;
  background:var(--um-blue-deep);
  transform:translateX(-50%);
  box-shadow:0 0 0 2px var(--white), 0 2px 6px rgba(16,24,40,.3);
}

.cal-weeks{
  display:none;
  margin-top:9px;
}

.cal-term.is-open .cal-weeks{ display:block; }

.cal-row{
  display:grid;
  grid-template-columns:46px 1fr auto;
  align-items:center;
  gap:9px;
  padding:10px 8px;
  margin:0 -8px;
  border-radius:10px;
  border-top:1px solid #F4F1EA;
}

.cal-weeks > .cal-row:first-child{ border-top:0; }

.cal-no{
  font-size:12px;
  font-weight:600;
  color:#7A8494;
  font-variant-numeric:tabular-nums;
  white-space:nowrap;
}

.cal-range{
  font-size:12.5px;
  color:#5C6673;
  font-variant-numeric:tabular-nums;
  letter-spacing:.2px;
  white-space:nowrap;
}

.cal-tail{
  display:flex;
  align-items:center;
  gap:5px;
  justify-content:flex-end;
  flex-wrap:wrap;
  min-width:0;
}

.cal-hol-tag{
  font-size:11px;
  font-weight:600;
  padding:2px 8px;
  border-radius:999px;
  background:#FFEAE4;
  color:#C2402A;
  letter-spacing:.2px;
  white-space:nowrap;
}

.cal-hols{
  grid-column:2 / -1;
  display:flex;
  flex-wrap:wrap;
  gap:5px;
}

.cal-row.is-now .cal-hol-tag{
  background:rgba(255,255,255,.85);
}

.cal-name{
  font-size:11px;
  font-weight:600;
  padding:2px 8px;
  border-radius:999px;
  background:var(--k-bg);
  color:var(--k-fg);
  white-space:nowrap;
  letter-spacing:.2px;
}

.cal-row.is-past{ opacity:.58; }

.cal-row.is-now{
  background:var(--k-bg);
  box-shadow:inset 3px 0 0 var(--k-dot);
}

.cal-row.is-now .cal-no,
.cal-row.is-now .cal-range{
  color:var(--k-fg);
}

.cal-row.is-now .cal-no{ font-weight:700; }

.cal-row.is-now .cal-name{
  background:rgba(255,255,255,.8);
  color:var(--k-fg);
}

.now-tag{
  font-size:10px;
  font-weight:600;
  padding:1px 6px;
  border-radius:999px;
  background:var(--k-dot);
  color:#fff;
  letter-spacing:.4px;
  white-space:nowrap;
}

.cal-hol{ margin-top:6px; }

.cal-hol h3{
  font-size:15px;
  font-weight:600;
  margin:0 0 10px;
  color:var(--um-blue-deep);
}

.hol-grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:9px;
}

.hol{
  background:var(--white);
  border:1px solid var(--line);
  border-radius:14px;
  padding:10px 12px;
  display:flex;
  flex-direction:column;
  gap:1px;
  box-shadow:var(--shadow);
}

.hol b{
  font-size:13px;
  color:var(--ink);
  font-variant-numeric:tabular-nums;
  font-weight:600;
}

.hol span{
  font-size:12px;
  color:var(--muted);
}

.hol em{
  font-size:11px;
  color:#A9B0BA;
  font-style:normal;
}

.hol.is-now{
  background:#E3F8EC;
  border-color:#BFEBD2;
}

.hol.is-now b,
.hol.is-now span,
.hol.is-now em{ color:#127F53; }

.hol.is-past{ opacity:.55; }

.cal-note{
  font-size:12px;
  color:#9A6B12;
  background:#FFF7E6;
  border-left:3px solid #F0B429;
  border-radius:0 10px 10px 0;
  padding:10px 13px;
  margin:16px 0 20px;
  line-height:1.55;
}

/* ---------- 教师联系 ---------- */
.teach-grid{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:18px 10px;
  padding:8px 0 6px;
}

.teach-card{
  display:block;
  width:100%;
  padding:0;
  border:0;
  background:none;
  font-family:inherit;
  cursor:pointer;
  text-align:center;
  -webkit-tap-highlight-color:transparent;
}

.teach-photo{
  display:block;
  width:100%;
  aspect-ratio:3 / 4;
  border-radius:13px;
  overflow:hidden;
  background:#EFEDE7;
  border:1px solid var(--line);
  box-shadow:var(--shadow);
  transition:transform .18s ease, box-shadow .18s ease;
}

.teach-photo img{
  width:100%;
  height:100%;
  object-fit:cover;
  display:block;
}

.teach-card:hover .teach-photo{
  transform:translateY(-3px);
  box-shadow:0 14px 26px -16px rgba(16,24,40,.5);
}

.teach-card:active .teach-photo{ transform:scale(.985); }

.teach-cn{
  display:block;
  margin-top:9px;
  font-size:13.5px;
  font-weight:600;
  color:var(--ink);
  letter-spacing:.2px;
  line-height:1.3;
}

.teach-en{
  display:-webkit-box;
  -webkit-line-clamp:2;
  -webkit-box-orient:vertical;
  overflow:hidden;
  margin-top:3px;
  font-size:11px;
  line-height:1.45;
  min-height:2.9em;
  color:var(--muted);
}

/* 宽屏一行放更多，避免桌面端照片过大 */
@media (min-width:600px){
  .teach-grid{ grid-template-columns:repeat(4,1fr); gap:22px 14px; }
}
@media (min-width:760px){
  .teach-grid{ grid-template-columns:repeat(5,1fr); }
}

/* ---------- 教师详情抽屉 ---------- */
.tsheet{
  position:fixed;
  inset:0;
  z-index:60;
  display:flex;
  align-items:flex-end;
  justify-content:center;
  pointer-events:none;
}

.tsheet.on{ pointer-events:auto; }

.tsheet-mask{
  position:absolute;
  inset:0;
  background:rgba(8,14,24,.5);
  opacity:0;
  transition:opacity .22s ease;
}

.tsheet.on .tsheet-mask{ opacity:1; }

.tsheet-card{
  position:relative;
  width:100%;
  max-width:520px;
  max-height:92vh;
  overflow-y:auto;
  background:var(--white);
  border-radius:24px 24px 0 0;
  padding:9px 20px 22px;
  transform:translateY(102%);
  transition:transform .3s cubic-bezier(.2,.9,.25,1);
  box-shadow:0 -12px 40px -14px rgba(16,24,40,.45);
}

.tsheet.on .tsheet-card{ transform:none; }

.tsheet-grab{
  width:38px;
  height:4px;
  border-radius:99px;
  background:#DFDCD4;
  margin:0 auto 12px;
}

.tsheet-head{
  display:flex;
  align-items:center;
  gap:15px;
  padding:2px 0 18px;
}

.tsheet-photo{
  flex:none;
  width:78px;
  height:104px;
  border-radius:13px;
  overflow:hidden;
  background:#EFEDE7;
  border:1px solid var(--line);
}

.tsheet-photo img{
  width:100%;
  height:100%;
  object-fit:cover;
  display:block;
}

.tsheet-id{ min-width:0; }

.tsheet-id h3{
  margin:0;
  font-size:19px;
  font-weight:600;
  color:var(--um-blue-deep);
  letter-spacing:.5px;
}

.tsheet-id p{
  margin:4px 0 0;
  font-size:12.5px;
  color:var(--muted);
  line-height:1.4;
}

.tsheet-post{
  display:inline-block;
  margin-top:8px;
  font-size:11px;
  padding:3px 9px;
  border-radius:99px;
  background:var(--um-gold-soft);
  color:#7A5A00;
  letter-spacing:.3px;
}

.tsheet-rows{ margin-bottom:2px; }

.trow{
  display:flex;
  align-items:center;
  gap:10px;
  width:100%;
  margin-bottom:9px;
  padding:13px 14px;
  background:#F7F6F2;
  border:1px solid transparent;
  border-radius:14px;
  font-family:inherit;
  text-align:left;
  cursor:pointer;
  transition:border-color .15s ease, background .15s ease;
  -webkit-tap-highlight-color:transparent;
}

.trow:hover{ border-color:#D7D2C6; }

.trow-k{
  flex:none;
  width:32px;
  font-size:11.5px;
  color:var(--muted);
}

.trow-v{
  flex:1;
  min-width:0;
  font-size:13.5px;
  color:var(--ink);
  word-break:break-all;
  font-variant-numeric:tabular-nums;
}

.trow-act{
  flex:none;
  font-size:11.5px;
  color:var(--um-blue);
  padding:3px 9px;
  border-radius:99px;
  background:#E8F0FB;
}

.trow.copied{
  border-color:#9ADCC0;
  background:#EAF8F1;
}

.trow.copied .trow-act{
  color:#127F53;
  background:#D6F2E4;
}

.trow.off{
  cursor:default;
  opacity:.6;
}

.trow.off:hover{ border-color:transparent; }

.trow.off .trow-v{ color:var(--muted); }

.tsheet-hint{
  margin:6px 0 14px;
  text-align:center;
  font-size:11.5px;
  color:#9AA3AF;
}

.tsheet-close{
  height:46px;
  font-size:14px;
}

/* ---------- 选课 ---------- */
.pick-tip{
  background:var(--white);
  border:1px solid var(--line);
  border-radius:16px;
  padding:14px 16px;
  margin:6px 0 14px;
  box-shadow:var(--shadow);
}

.pick-tip b{
  display:block;
  font-size:13.5px;
  font-weight:600;
  color:var(--um-blue-deep);
  margin-bottom:5px;
}

.pick-tip p{
  margin:0;
  font-size:12.5px;
  color:var(--muted);
  line-height:1.65;
}

.pick-card{
  width:100%;
  display:flex;
  align-items:center;
  gap:11px;
  padding:15px;
  margin-bottom:9px;
  background:var(--white);
  border:1px solid var(--line);
  border-radius:14px;
  box-shadow:0 1px 2px rgba(16,24,40,.04);
  font-family:inherit;
  text-align:left;
  cursor:pointer;
  transition:border-color .15s ease, background .15s ease, box-shadow .15s ease, transform .12s ease;
  -webkit-tap-highlight-color:transparent;
}

.pick-card:active{ transform:scale(.99); }

.pick-card.on{
  border-color:var(--um-blue);
  background:#F2F7FF;
  box-shadow:0 0 0 1px var(--um-blue) inset;
}

.pick-box{
  width:21px; height:21px;
  flex:none;
  border-radius:7px;
  border:1.6px solid #CFD6DF;
  background:var(--white);
  display:flex;
  align-items:center;
  justify-content:center;
  color:transparent;
  transition:background .15s ease, border-color .15s ease, color .15s ease;
}

.pick-box svg{ width:13px; height:13px; }

.pick-card.on .pick-box{
  background:var(--um-blue);
  border-color:var(--um-blue);
  color:#fff;
}

.pick-code{
  flex:none;
  min-width:46px;
  font-size:12px;
  font-weight:600;
  color:#8A93A0;
  letter-spacing:.3px;
  font-variant-numeric:tabular-nums;
}

.pick-card.on .pick-code{ color:var(--um-blue); }

.pick-cn{
  min-width:0;
  font-size:14.5px;
  font-weight:500;
  color:var(--ink);
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}

.pick-card.on .pick-cn{
  color:var(--um-blue-deep);
  font-weight:600;
}

.pick-bar{
  position:sticky;
  bottom:0;
  display:flex;
  align-items:center;
  gap:14px;
  margin-top:12px;
  padding:12px 0 14px;
  background:linear-gradient(to top, var(--paper) 60%, rgba(248,246,241,0));
}

.pick-count{
  flex:none;
  font-size:12.5px;
  color:var(--muted);
  padding-left:2px;
}

.pick-bar .btn{ flex:1; width:auto; min-width:0; }

.pick-edit{
  flex:none;
  font-family:inherit;
  font-size:12.5px;
  color:var(--um-blue);
  background:var(--white);
  border:1px solid var(--line);
  border-radius:999px;
  padding:6px 13px;
  cursor:pointer;
  -webkit-tap-highlight-color:transparent;
}

.pick-edit:hover{ border-color:#C9D3E0; }

/* ---------- 课程与作业方块 ---------- */
.board-stat{
  display:flex;
  gap:10px;
  padding:12px 0 18px;
  overflow-x:auto;
  scrollbar-width:none;
}
.board-stat::-webkit-scrollbar{ display:none; }

.stat-chip{
  flex:none;
  background:var(--white);
  border:1px solid var(--line);
  border-radius:14px;
  padding:10px 14px;
  min-width:96px;
}
.stat-chip b{
  display:block;
  font-size:19px;
  font-weight:600;
  color:var(--um-blue);
  line-height:1.25;
  font-variant-numeric:tabular-nums;
}
.stat-chip span{
  font-size:11.5px;
  color:var(--muted);
}

.course{
  background:var(--white);
  border:1px solid var(--line);
  border-radius:var(--radius);
  margin-bottom:14px;
  overflow:hidden;
  box-shadow:var(--shadow);
}

.course-head{
  display:flex;
  align-items:center;
  gap:12px;
  padding:16px 18px;
  cursor:pointer;
  -webkit-tap-highlight-color:transparent;
}

.course-dot{
  width:10px; height:34px;
  border-radius:6px;
  flex:none;
}

.course-name{
  flex:1;
  min-width:0;
}
.course-name h3{
  font-size:15px;
  font-weight:600;
  margin:0 0 3px;
  line-height:1.4;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.course-name span{
  font-size:12px;
  color:var(--muted);
}

.course-prog{
  flex:none;
  font-size:12.5px;
  font-weight:600;
  color:var(--um-blue);
  font-variant-numeric:tabular-nums;
}

.course-body{
  padding:0 14px 14px;
  display:none;
}
.course.open .course-body{ display:block; }

.task{
  background:#FBFAF7;
  border:1px solid #EFEDE6;
  border-radius:13px;
  padding:14px 15px;
  margin-top:10px;
}

.task-top{
  display:flex;
  align-items:flex-start;
  gap:8px;
  margin-bottom:8px;
}

.task-title{
  flex:1;
  font-size:14px;
  font-weight:600;
  line-height:1.5;
  color:var(--ink);
}

.task-tag{
  flex:none;
  font-size:11px;
  padding:2px 7px;
  border-radius:6px;
  background:#EFF3F9;
  color:#40516B;
  white-space:nowrap;
}

.task-desc{
  font-size:12.8px;
  color:#5B6472;
  line-height:1.65;
  margin-bottom:11px;
  white-space:pre-line;
}

.task-foot{
  display:flex;
  align-items:center;
  gap:10px;
  flex-wrap:wrap;
  padding-top:11px;
  border-top:1px dashed #E7E3DA;
}

.due{
  display:inline-flex;
  align-items:center;
  gap:5px;
  font-size:12.5px;
  color:#4B5563;
  font-variant-numeric:tabular-nums;
}

.due .left{
  font-weight:600;
  padding:1px 7px;
  border-radius:6px;
  font-size:11.5px;
}
.due .left.soon{ background:#FDECEA; color:#B03A22; }
.due .left.mid{ background:#FDF3D2; color:#8A6500; }
.due .left.far{ background:#E9F5EE; color:#186B4A; }
.due .left.na{ background:#F0F0EE; color:#7A7F87; }

.check{
  margin-left:auto;
  display:inline-flex;
  align-items:center;
  gap:7px;
  font-size:12.5px;
  color:var(--muted);
  cursor:pointer;
  user-select:none;
}

.check input{
  appearance:none;
  width:20px; height:20px;
  border:1.5px solid #C9CFD8;
  border-radius:6px;
  background:#fff;
  cursor:pointer;
  position:relative;
  transition:background .15s, border-color .15s;
}
.check input:checked{
  background:var(--ok);
  border-color:var(--ok);
}
.check input:checked::after{
  content:"";
  position:absolute;
  left:6px; top:2.5px;
  width:5px; height:10px;
  border:solid #fff;
  border-width:0 2px 2px 0;
  transform:rotate(42deg);
}

.task.done{ opacity:.62; }
.task.done .task-title{ text-decoration:line-through; text-decoration-color:#B9C0CA; }

.week-grid{
  display:grid;
  grid-template-columns:repeat(7,1fr);
  gap:7px;
  margin-top:11px;
}

.week-cell{
  border:1px solid #E9E6DE;
  border-radius:9px;
  padding:7px 2px;
  text-align:center;
  cursor:pointer;
  background:#fff;
  transition:background .14s, border-color .14s;
  -webkit-tap-highlight-color:transparent;
}
.week-cell b{ display:block; font-size:11.5px; font-weight:600; color:#3B4655; }
.week-cell span{ display:block; font-size:10px; color:#8A93A0; margin-top:1px; }
.week-cell.on{ background:#E9F5EE; border-color:#9ED5BA; }
.week-cell.on b{ color:#186B4A; }
.week-cell.past{ opacity:.45; }

/* ---------- 占位页 ---------- */
.empty{
  flex:1;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  text-align:center;
  padding:52px 24px;
  color:var(--muted);
}
.empty .ico{
  width:66px; height:66px;
  border-radius:20px;
  background:var(--white);
  border:1px solid var(--line);
  display:flex; align-items:center; justify-content:center;
  margin-bottom:20px;
}
.empty h3{
  font-size:16px;
  font-weight:600;
  color:var(--ink);
  margin:0 0 8px;
}
.empty p{
  font-size:13.5px;
  line-height:1.7;
  margin:0;
  max-width:300px;
}

/* ---------- 底部 ---------- */
.footer{
  padding:18px 0 26px;
  text-align:center;
  font-size:11.5px;
  color:#A6AEBA;
  letter-spacing:.3px;
}

/* ---------- 提示条 ---------- */
#toast{
  position:fixed;
  left:50%;
  bottom:36px;
  transform:translate(-50%, 16px);
  background:rgba(24,34,47,.94);
  color:#fff;
  font-size:13.5px;
  padding:11px 20px;
  border-radius:12px;
  opacity:0;
  pointer-events:none;
  transition:opacity .2s, transform .2s;
  z-index:99;
  max-width:80vw;
  text-align:center;
}
#toast.on{ opacity:1; transform:translate(-50%, 0); }

/* ---------- 小屏 ---------- */
@media (max-width:380px){
  .home-logo{ width:140px; }
  .hub-grid{ gap:10px; }
  .hub-card{ padding:15px 13px; }
  .week-grid{ gap:5px; }
}

/* ---------- 欢迎页 · 姓名 ---------- */
.welcome p.welcome-name{
  font-size:18px;
  font-weight:600;
  color:var(--um-blue);
  letter-spacing:.5px;
  margin:4px 0 8px;
}
.welcome p.welcome-hint{
  font-size:13px;
  color:var(--muted);
  margin:0 0 36px;
}

/* ---------- 下拉与多行输入 ---------- */
.field select,
.field textarea{
  width:100%;
  border:1px solid var(--line);
  border-radius:13px;
  background:var(--white);
  padding:0 16px;
  font-size:15.5px;
  color:var(--ink);
  outline:none;
  font-family:inherit;
  transition:border-color .15s, box-shadow .15s;
}
.field select{ height:52px; }
.field textarea{
  padding:14px 16px;
  line-height:1.65;
  resize:vertical;
  min-height:120px;
}
.field select:focus,
.field textarea:focus{
  border-color:var(--um-blue);
  box-shadow:0 0 0 3px rgba(0,61,124,.1);
}
.field textarea::placeholder{ color:#AEB6C0; }

/* ---------- 信息提交 ---------- */
.submit-who{
  font-size:13.5px;
  color:var(--muted);
  background:var(--um-blue-soft, #EEF3F9);
  border-radius:12px;
  padding:11px 14px;
  margin-bottom:20px;
}
.submit-who b{ color:var(--um-blue); font-weight:600; }

.sub-list{ margin-top:26px; }
.sub-list h3{
  font-size:13px;
  color:var(--muted);
  font-weight:500;
  margin:0 0 12px;
}
.sub-item{
  background:var(--white);
  border:1px solid var(--line);
  border-radius:13px;
  padding:13px 15px;
  margin-bottom:10px;
}
.sub-item .sub-top{
  display:flex;
  align-items:center;
  gap:8px;
  margin-bottom:7px;
}
.sub-item .sub-kind{
  font-size:11.5px;
  color:var(--um-blue);
  background:var(--um-blue-soft, #EEF3F9);
  border-radius:6px;
  padding:2px 8px;
}
.sub-item .sub-time{ font-size:12px; color:#9AA3AF; }
.sub-item .sub-body{
  font-size:14px;
  color:var(--ink);
  line-height:1.65;
  white-space:pre-wrap;
  word-break:break-word;
}
.sub-item .sub-state{
  font-size:12px;
  color:#B8860B;
  margin-top:8px;
}

/* ==========================================================
   学校资讯
   ========================================================== */
.news-list{
  display:flex;
  flex-direction:column;
  gap:12px;
  padding:6px 0 22px;
}

.news-card{
  background:#fff;
  border:1px solid var(--line);
  border-radius:16px;
  padding:15px 16px 16px;
  box-shadow:var(--shadow);
}

.news-top{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  margin-bottom:9px;
}

.news-kind{
  font-size:11.5px;
  color:var(--um-blue);
  background:#EEF3F9;
  border-radius:6px;
  padding:2px 8px;
}

.news-time{ font-size:12px; color:#9AA3AF; }

.news-text{
  margin:0;
  font-size:14px;
  line-height:1.72;
  color:var(--ink);
  white-space:pre-wrap;
  word-break:break-word;
}

/* ==========================================================
   管理后台
   ========================================================== */
.hub-admin .hub-ico{
  background:#EAF0F7;
  color:var(--um-blue);
}

.adm-tabs{
  display:flex;
  gap:8px;
  padding:2px 0 14px;
}

.adm-tab{
  flex:1;
  min-width:0;
  height:38px;
  border-radius:11px;
  border:1px solid var(--line);
  background:#fff;
  color:var(--muted);
  font-size:13px;
  cursor:pointer;
  transition:background .15s ease, color .15s ease, border-color .15s ease;
}

.adm-tab.on{
  background:var(--um-blue);
  border-color:var(--um-blue);
  color:#fff;
  font-weight:600;
}

.adm-body{ padding-bottom:26px; }

.adm-tip{
  font-size:13px;
  color:#9AA3AF;
  text-align:center;
  padding:20px 0;
  margin:0;
}

.adm-bar{
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:10px;
  padding:4px 2px 12px;
}

.adm-bar b{
  font-size:13.5px;
  color:var(--um-blue-deep);
  font-weight:600;
}

.adm-bar span{ font-size:12px; color:#9AA3AF; }

.adm-row{
  display:flex;
  align-items:center;
  gap:12px;
  padding:12px 14px;
  background:#fff;
  border:1px solid var(--line);
  border-radius:14px;
  margin-bottom:9px;
}

.adm-main{
  flex:1;
  min-width:0;
  display:flex;
  flex-direction:column;
  gap:3px;
}

.adm-main b{
  font-size:14.5px;
  font-weight:600;
  color:var(--ink);
  letter-spacing:.2px;
}

.adm-meta{
  font-size:12px;
  color:#8A93A0;
  word-break:break-word;
}

.adm-btn{
  flex:none;
  height:32px;
  padding:0 13px;
  border-radius:9px;
  border:1px solid var(--line);
  background:#fff;
  color:var(--muted);
  font-size:12.5px;
  cursor:pointer;
  transition:background .15s ease, color .15s ease, border-color .15s ease;
}

.adm-btn:hover{ color:var(--um-blue); border-color:#CFDCEB; }

.adm-btn.primary{
  background:var(--um-blue);
  border-color:var(--um-blue);
  color:#fff;
}

.adm-btn.primary:hover{ background:#0A4C90; color:#fff; }

.adm-btn.block{
  width:100%;
  height:42px;
  font-size:13.5px;
  margin-top:2px;
}

.adm-edit{
  display:flex;
  flex-direction:column;
  gap:8px;
  width:100%;
}

.adm-in{
  width:100%;
  height:38px;
  padding:0 12px;
  border-radius:10px;
  border:1px solid var(--line);
  background:#fff;
  font-family:inherit;
  font-size:14px;
  color:var(--ink);
  outline:none;
}

.adm-in:focus{
  border-color:#9FBCDC;
  box-shadow:0 0 0 3px rgba(0,61,124,.07);
}

.adm-form{
  display:flex;
  flex-direction:column;
  gap:8px;
  padding:14px;
  background:#fff;
  border:1px solid var(--line);
  border-radius:14px;
  margin-bottom:14px;
}

.adm-actions{
  display:flex;
  gap:8px;
  justify-content:flex-end;
}

/* 审核卡片 */
.adm-card{
  background:#fff;
  border:1px solid var(--line);
  border-radius:14px;
  padding:13px 14px;
  margin-bottom:10px;
}

.adm-sub-top{
  display:flex;
  align-items:center;
  gap:8px;
  margin-bottom:8px;
}

.adm-kind{
  font-size:11.5px;
  color:var(--um-blue);
  background:#EEF3F9;
  border-radius:6px;
  padding:2px 8px;
}

.adm-st{
  font-size:11.5px;
  border-radius:6px;
  padding:2px 8px;
}

.adm-st.st-wait{ color:#B8860B; background:#FDF3D2; }
.adm-st.st-ok{ color:#1E9E6A; background:#E4F7EE; }
.adm-st.st-no{ color:#9AA3AF; background:#F1F2F4; }

.adm-sub-time{ font-size:12px; color:#9AA3AF; margin-left:auto; }

.adm-sub-text{
  margin:0 0 10px;
  font-size:14px;
  line-height:1.7;
  color:var(--ink);
  white-space:pre-wrap;
  word-break:break-word;
}

.adm-sub-foot{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  flex-wrap:wrap;
}

.adm-who{ font-size:12px; color:#8A93A0; }

/* hidden 属性在 button 等元素上可能被 UA display 覆盖，统一兜底 */
[hidden]{ display:none !important; }

/* 赞助名单序号 */
.adm-idx{
  flex:none;
  width:24px;
  height:24px;
  border-radius:50%;
  background:#EEF3F9;
  color:var(--um-blue);
  font-size:11.5px;
  font-variant-numeric:tabular-nums;
  display:flex;
  align-items:center;
  justify-content:center;
}

/* ==========================================================
   班委联系
   ========================================================== */
.cmt-list{
  display:flex;
  flex-direction:column;
  gap:10px;
  padding:4px 0 20px;
}

.cmt-row{
  display:flex;
  align-items:center;
  gap:12px;
  width:100%;
  padding:15px 16px;
  text-align:left;
  background:#fff;
  border:1px solid var(--line);
  border-radius:14px;
  box-shadow:var(--shadow);
  cursor:pointer;
  -webkit-tap-highlight-color:transparent;
  transition:transform .14s ease, border-color .14s ease;
}

.cmt-row:hover{ transform:translateY(-1px); border-color:#D5DCE6; }
.cmt-row:active{ transform:scale(.99); }

.cmt-role{
  flex:none;
  font-size:11.5px;
  color:var(--um-blue);
  background:#EEF3F9;
  border-radius:7px;
  padding:3px 9px;
  letter-spacing:.3px;
}

.cmt-name{
  flex:1;
  min-width:0;
  font-size:14.5px;
  font-weight:600;
  color:var(--ink);
  letter-spacing:.3px;
}

.cmt-arrow{
  flex:none;
  color:#C0C7D1;
  font-size:18px;
  line-height:1;
}

/* 抽屉里没有照片时，用姓氏占位 */
.tsheet-face{
  flex:none;
  width:52px;
  height:52px;
  border-radius:16px;
  background:#EEF3F9;
  color:var(--um-blue);
  font-size:20px;
  font-weight:600;
  display:flex;
  align-items:center;
  justify-content:center;
}
