*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  --bg:#0f1115; --card:#181b22; --card2:#1e222b; --line:#272c37;
  --tx:#e8eaef; --tx2:#9aa3b2; --tx3:#6b7484;
  --acc:#5b9dff; --acc-d:#3d7de0;
  --ok:#34d399; --warn:#fbbf24; --danger:#f87171; --purple:#a78bfa;
  --r:14px;
}
html,body{height:100%}
body{
  background:var(--bg); color:var(--tx);
  font:15px/1.6 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  -webkit-font-smoothing:antialiased; -webkit-tap-highlight-color:transparent;
  padding-bottom:env(safe-area-inset-bottom);
}
button,input,textarea{font:inherit;color:inherit}
button{background:none;border:none;cursor:pointer}
a{color:var(--acc);text-decoration:none}
a:hover{text-decoration:underline}
[hidden]{display:none!important}

/* ══════ 登录 ══════ */
.auth{
  min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px 18px;
  background:radial-gradient(900px 500px at 50% -10%,#182338,transparent 60%),var(--bg);
}
.auth-card{width:100%;max-width:400px;text-align:center}
.auth-logo{
  width:62px;height:62px;margin:0 auto 16px;border-radius:18px;
  background:linear-gradient(135deg,#5b9dff,#a78bfa);
  display:flex;align-items:center;justify-content:center;font-size:30px;
  box-shadow:0 10px 30px -8px rgba(91,157,255,.55);
}
.auth h1{font-size:21px;font-weight:700;letter-spacing:-.3px;margin-bottom:6px}
.auth-sub{color:var(--tx3);font-size:13px;margin-bottom:26px}
.tabs2{
  display:flex;gap:4px;background:var(--card);border:1px solid var(--line);
  border-radius:11px;padding:4px;margin-bottom:18px;
}
.tabs2 button{
  flex:1;padding:9px;border-radius:8px;font-size:14px;font-weight:600;color:var(--tx2);
  transition:.15s;
}
.tabs2 button.on{background:var(--acc);color:#fff}
.fld{text-align:left;margin-bottom:13px}
.fld label{display:block;font-size:12.5px;color:var(--tx3);margin-bottom:6px;font-weight:500}
.fld input{
  width:100%;background:var(--card);border:1px solid var(--line);border-radius:10px;
  padding:12px 14px;font-size:15px;outline:none;transition:.15s;
}
.fld input:focus{border-color:var(--acc);background:var(--card2)}
.fld input::placeholder{color:var(--tx3)}
.err{color:var(--danger);font-size:13px;min-height:19px;text-align:left;margin-bottom:4px}
.btn{
  border-radius:11px;font-weight:600;transition:.15s;
}
.btn.primary{
  width:100%;padding:13px;background:var(--acc);color:#fff;font-size:15.5px;
}
.btn.primary:hover{background:var(--acc-d)}
.btn.primary:disabled{opacity:.55;cursor:default}
.auth-foot{color:var(--tx3);font-size:12.5px;margin-top:18px}

/* ══════ 顶栏 ══════ */
.top{
  position:sticky;top:0;z-index:30;
  display:flex;align-items:center;justify-content:space-between;
  padding:11px 16px;background:rgba(15,17,21,.86);backdrop-filter:blur(14px);
  border-bottom:1px solid var(--line);
}
.top-l{display:flex;align-items:center;gap:10px;min-width:0}
.avatar{
  width:36px;height:36px;border-radius:11px;flex-shrink:0;
  background:linear-gradient(135deg,#5b9dff,#a78bfa);
  display:flex;align-items:center;justify-content:center;
  font-weight:700;font-size:15px;color:#fff;
}
.me-name{font-size:14.5px;font-weight:600;line-height:1.25}
.me-sub{font-size:11.5px;color:var(--tx3)}
.icon-btn{
  width:34px;height:34px;border-radius:9px;color:var(--tx2);font-size:18px;
  display:flex;align-items:center;justify-content:center;transition:.15s;flex-shrink:0;
}
.icon-btn:hover{background:var(--card2);color:var(--tx)}

/* ══════ 标签栏 ══════ */
.tabbar{
  position:sticky;top:59px;z-index:29;display:flex;
  background:rgba(15,17,21,.86);backdrop-filter:blur(14px);
  border-bottom:1px solid var(--line);
}
.tabbar button{
  flex:1;padding:11px 4px 9px;font-size:12.5px;font-weight:600;color:var(--tx3);
  display:flex;flex-direction:column;align-items:center;gap:3px;
  border-bottom:2px solid transparent;transition:.15s;
}
.tabbar button span{font-size:17px;line-height:1}
.tabbar button.on{color:var(--acc);border-bottom-color:var(--acc)}

/* ══════ 主体 ══════ */
main{padding:16px 14px 90px;max-width:760px;margin:0 auto}
.card{
  background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  padding:15px;margin-bottom:12px;
}
.card-t{font-size:14px;font-weight:700;margin-bottom:12px;display:flex;align-items:center;gap:8px}
.card-t .n{margin-left:auto;font-size:12px;color:var(--tx3);font-weight:500}
.muted{color:var(--tx3);font-size:13px}
.empty{text-align:center;color:var(--tx3);padding:34px 16px;font-size:13.5px;line-height:1.9}
.empty .e{font-size:34px;display:block;margin-bottom:8px;opacity:.6}

/* 打卡 */
.big-check{
  width:100%;padding:22px;border-radius:var(--r);text-align:center;
  background:linear-gradient(135deg,#1d3a64,#2a2450);border:1px solid #2d4570;
  transition:.18s;
}
.big-check:hover{transform:translateY(-2px)}
.big-check:active{transform:translateY(0)}
.big-check.done{
  background:linear-gradient(135deg,#14342a,#1a2c3a);border-color:#26553f;cursor:default;
}
.big-check .e{font-size:34px;display:block;margin-bottom:7px}
.big-check .t{font-size:17px;font-weight:700;margin-bottom:4px}
.big-check .s{font-size:12.5px;color:#a8c4e8}
.big-check.done .s{color:var(--ok)}
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin-bottom:12px}
.stat{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:13px 8px;text-align:center}
.stat .v{font-size:22px;font-weight:700;line-height:1.15}
.stat .k{font-size:11px;color:var(--tx3);margin-top:3px}
.stat.hi .v{color:var(--acc)}

/* 列表项 */
.row{display:flex;gap:10px;padding:11px 0;border-bottom:1px solid var(--line)}
.row:last-child{border-bottom:none}
.row .av{
  width:32px;height:32px;border-radius:9px;flex-shrink:0;font-size:13px;font-weight:700;
  display:flex;align-items:center;justify-content:center;color:#fff;
  background:linear-gradient(135deg,#4b7fd6,#7c6bd6);
}
.row .bd{flex:1;min-width:0}
.row .hd{display:flex;align-items:baseline;gap:7px;flex-wrap:wrap}
.row .nm{font-size:13.5px;font-weight:600}
.row .tm{font-size:11px;color:var(--tx3);margin-left:auto;white-space:nowrap}
.row .ct{font-size:14px;margin-top:3px;word-break:break-word;white-space:pre-wrap}
.badge{
  font-size:10px;font-weight:700;padding:1px 6px;border-radius:20px;
  background:#2a2210;color:var(--warn);flex-shrink:0;
}
.badge.me{background:#2e1a1a;color:var(--danger)}

/* 发帖 */
.post-box{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:13px;margin-bottom:12px}
.post-box textarea{
  width:100%;background:transparent;border:none;outline:none;resize:none;
  font-size:14.5px;min-height:56px;line-height:1.6;
}
.post-box textarea::placeholder{color:var(--tx3)}
.post-box .bar{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}
.btn-sm{padding:8px 17px;border-radius:9px;background:var(--acc);color:#fff;font-size:13.5px;font-weight:600}
.btn-sm:hover{background:var(--acc-d)}
.btn-sm:disabled{opacity:.45}
.btn-sm.ghost{background:var(--card2);color:var(--tx2)}
.btn-sm.ghost:hover{background:var(--line);color:var(--tx)}

/* 互动条 */
.acts{display:flex;gap:16px;margin-top:9px;font-size:12.5px;color:var(--tx3)}
.acts button{display:flex;align-items:center;gap:5px;color:var(--tx3);transition:.15s;padding:2px 0}
.acts button:hover{color:var(--tx)}
.acts button.on{color:var(--acc);font-weight:600}
.cmts{margin-top:10px;padding-top:10px;border-top:1px dashed var(--line)}
.cmt{display:flex;gap:8px;font-size:13px;padding:4px 0}
.cmt b{color:var(--tx2);font-weight:600;flex-shrink:0}
.cmt-input{display:flex;gap:7px;margin-top:8px}
.cmt-input input{
  flex:1;background:var(--card2);border:1px solid var(--line);border-radius:9px;
  padding:8px 11px;font-size:13px;outline:none;
}
.cmt-input input:focus{border-color:var(--acc)}

/* 资源 */
.res{display:block;background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:14px;margin-bottom:10px;transition:.15s}
.res:hover{border-color:#3a4354;transform:translateY(-1px)}
.res .h{display:flex;align-items:flex-start;gap:9px;margin-bottom:5px}
.res .ttl{font-size:15px;font-weight:650;flex:1;word-break:break-word}
.res .tg{font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:20px;background:#1d2432;color:#8fb4e6;flex-shrink:0;white-space:nowrap}
.res .ds{font-size:13px;color:var(--tx2);line-height:1.55;margin-bottom:7px}
.res .ft{display:flex;align-items:center;gap:12px;font-size:12px;color:var(--tx3)}
.res .ft button{color:var(--tx3);display:flex;align-items:center;gap:4px}
.res .ft button.on{color:var(--acc);font-weight:600}

/* 通知 */
.notice{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:15px;margin-bottom:11px;position:relative;transition:.15s}
.notice.pin{border-color:#3d3a1e;background:linear-gradient(180deg,#1e1f1a,#181b22)}
.notice.unread{border-left:3px solid var(--acc)}
.pin-tag{font-size:10.5px;font-weight:700;color:var(--warn);background:#2a2210;padding:2px 8px;border-radius:20px;display:inline-block;margin-bottom:7px}
.notice h3{font-size:15.5px;font-weight:700;margin-bottom:7px;line-height:1.4}
.notice .bd{font-size:14px;color:#cfd5e0;white-space:pre-wrap;word-break:break-word;line-height:1.65}
.notice .mt{margin-top:11px;padding-top:10px;border-top:1px solid var(--line);display:flex;align-items:center;gap:10px;font-size:11.5px;color:var(--tx3);flex-wrap:wrap}
.notice .mt .sp{margin-left:auto}

/* 悬浮按钮 */
.fab{
  position:fixed;right:18px;bottom:calc(22px + env(safe-area-inset-bottom));
  width:54px;height:54px;border-radius:50%;background:var(--acc);color:#fff;
  font-size:26px;line-height:1;display:flex;align-items:center;justify-content:center;
  box-shadow:0 8px 26px -6px rgba(91,157,255,.6);z-index:40;transition:.18s;
}
.fab:hover{background:var(--acc-d);transform:translateY(-2px)}

/* 弹层 */
.sheet{position:fixed;inset:0;z-index:95;display:flex;align-items:flex-end;justify-content:center}
.sheet-bg{position:absolute;inset:0;background:rgba(0,0,0,.6);backdrop-filter:blur(3px)}
.sheet-panel{
  position:relative;width:100%;max-width:560px;max-height:86vh;overflow:auto;
  background:var(--card);border:1px solid var(--line);border-radius:18px 18px 0 0;
  padding:18px 18px calc(22px + env(safe-area-inset-bottom));
  animation:up .22s ease;
}
@keyframes up{from{transform:translateY(30px);opacity:.4}to{transform:none;opacity:1}}
.sheet-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:15px}
.sheet-head b{font-size:16.5px}
.sheet-body .fld:last-child{margin-bottom:0}
.sheet-body textarea{
  width:100%;background:var(--card2);border:1px solid var(--line);border-radius:10px;
  padding:11px 13px;font-size:14.5px;outline:none;resize:vertical;min-height:110px;line-height:1.6;
}
.sheet-body textarea:focus{border-color:var(--acc)}
.sheet-body input[type=text],.sheet-body input[type=url]{
  width:100%;background:var(--card2);border:1px solid var(--line);border-radius:10px;
  padding:11px 13px;font-size:14.5px;outline:none;
}
.sheet-body input:focus{border-color:var(--acc)}
.chk{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--tx2);margin-bottom:14px;cursor:pointer}
.chk input{width:17px;height:17px;accent-color:var(--acc)}
.tags-pick{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:14px}
.tags-pick button{
  padding:6px 13px;border-radius:20px;background:var(--card2);border:1px solid var(--line);
  font-size:12.5px;color:var(--tx2);transition:.15s;
}
.tags-pick button.on{background:var(--acc);border-color:var(--acc);color:#fff;font-weight:600}

/* 菜单 */
.menu{
  position:fixed;top:56px;right:14px;z-index:92;min-width:180px;
  background:var(--card);border:1px solid var(--line);border-radius:13px;
  padding:6px;box-shadow:0 14px 40px -10px rgba(0,0,0,.7);
  animation:up .16s ease;
}
.menu button{
  display:block;width:100%;text-align:left;padding:11px 13px;border-radius:9px;
  font-size:14px;color:var(--tx);transition:.13s;
}
.menu button:hover{background:var(--card2)}
.menu button.danger{color:var(--danger)}

/* toast */
.toast{
  position:fixed;left:50%;bottom:88px;transform:translateX(-50%);z-index:120;
  background:#2a3140;color:#fff;padding:11px 20px;border-radius:11px;font-size:13.5px;
  box-shadow:0 10px 32px -8px rgba(0,0,0,.7);animation:up .2s ease;max-width:86vw;text-align:center;
}

/* 成员列表 */
.mem{display:flex;align-items:center;gap:11px;padding:11px 0;border-bottom:1px solid var(--line)}
.mem:last-child{border-bottom:none}
.mem .inf{flex:1;min-width:0}
.mem .nm2{font-size:14px;font-weight:600}
.mem .sb{font-size:11.5px;color:var(--tx3)}
.mem .cnt{font-size:12.5px;color:var(--acc);font-weight:700;white-space:nowrap}

@media(max-width:420px){
  .stats{gap:7px}
  .stat .v{font-size:19px}
  main{padding:14px 11px 88px}
}

/* ══════════ 新增:交友 / 主页 / 课表 ══════════ */
.badge.fr{background:#122e22;color:var(--ok)}
.srch{
  width:100%;background:var(--card2);border:1px solid var(--line);border-radius:10px;
  padding:10px 13px;font-size:14px;outline:none;margin-top:4px;
}
.srch:focus{border-color:var(--acc)}

.chips{display:flex;gap:7px;flex-wrap:wrap}
.chip{
  padding:6px 12px;border-radius:20px;background:var(--card2);border:1px solid var(--line);
  font-size:12.5px;color:var(--tx2);transition:.15s;white-space:nowrap;
}
.chip:hover{border-color:#3a4354;color:var(--tx)}
.chip.on{background:var(--acc);border-color:var(--acc);color:#fff;font-weight:600}

/* 同学卡片 */
.pcard{
  display:flex;gap:12px;align-items:flex-start;background:var(--card);
  border:1px solid var(--line);border-radius:var(--r);padding:14px;margin-bottom:10px;transition:.15s;
}
.pcard:hover{border-color:#3a4354}
.pav{
  width:44px;height:44px;border-radius:13px;flex-shrink:0;font-size:22px;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  box-shadow:inset 0 -10px 20px -10px rgba(0,0,0,.35);
}
.pinfo{flex:1;min-width:0;cursor:pointer}
.pn{font-size:14.5px;font-weight:650;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.pm{font-size:12.5px;color:var(--tx2);margin-top:3px}
.pshared{font-size:11.5px;color:var(--acc);margin-top:5px}
.pbio{font-size:12.5px;color:var(--tx3);margin-top:6px;line-height:1.55;
  overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.pcard .btn-sm{flex-shrink:0;align-self:center;padding:7px 13px;font-size:12.5px;white-space:nowrap}

/* 个人主页 */
.home-top{display:flex;gap:13px;align-items:center;margin-bottom:16px}
.home-av{
  width:58px;height:58px;border-radius:17px;flex-shrink:0;font-size:29px;
  display:flex;align-items:center;justify-content:center;
  box-shadow:inset 0 -14px 26px -12px rgba(0,0,0,.35);
}
.home-n{font-size:17.5px;font-weight:700;display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.home-m{font-size:12.5px;color:var(--tx2);margin-top:4px}
.home-sec{margin-bottom:16px}
.home-lb{font-size:12px;color:var(--tx3);font-weight:600;margin-bottom:7px;
  text-transform:uppercase;letter-spacing:.4px;display:flex;align-items:center;gap:6px}
.home-lb .n{color:var(--tx3);font-weight:500;text-transform:none;letter-spacing:0}
.home-tx{font-size:14px;color:#cfd5e0;line-height:1.7;white-space:pre-wrap;word-break:break-word}
.home-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:18px}
.home-stats>div{background:var(--card2);border-radius:11px;padding:11px 6px;text-align:center}
.home-stats b{display:block;font-size:19px;font-weight:700;color:var(--acc);line-height:1.2}
.home-stats span{font-size:11px;color:var(--tx3)}
.home-res{
  display:flex;align-items:center;gap:8px;padding:9px 12px;background:var(--card2);
  border-radius:9px;margin-bottom:6px;font-size:13.5px;color:var(--tx);text-decoration:none;
}
.home-res:hover{background:var(--line);text-decoration:none}
.home-res .tg{font-size:10px;background:#1d2432;color:#8fb4e6;padding:2px 7px;border-radius:20px;margin-left:auto;flex-shrink:0}
.home-post{
  font-size:13.5px;color:#cfd5e0;padding:10px 12px;background:var(--card2);
  border-radius:9px;margin-bottom:6px;line-height:1.55;position:relative;
}
.home-post .tm{display:block;font-size:11px;color:var(--tx3);margin-top:5px}

.me-btns{display:flex;gap:9px;margin-top:14px}
.me-btns .btn-sm{flex:1;text-align:center;padding:10px}

/* 课表 */
.today-box{background:linear-gradient(135deg,#1d3a64,#2a2450);border:1px solid #2d4570;border-radius:12px;padding:13px 15px;margin-bottom:14px}
.today-box.empty-day{background:var(--card2);border-color:var(--line);color:var(--tx3);text-align:center;font-size:13.5px}
.today-lb{font-size:12.5px;color:#a8c4e8;font-weight:600;margin-bottom:8px}
.today-row{font-size:14px;padding:3px 0;color:var(--tx)}
.today-row b{color:#fff;font-weight:700;margin-right:4px}
.wk{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}
.wk-day{min-width:0}
.wk-h{font-size:11px;color:var(--tx3);text-align:center;padding:5px 0;font-weight:600;border-radius:7px;margin-bottom:5px}
.wk-h.now{background:var(--acc);color:#fff}
.wk-item{
  background:var(--card2);border:1px solid var(--line);border-radius:8px;
  padding:7px 5px;margin-bottom:5px;cursor:pointer;transition:.15s;text-align:center;
}
.wk-item:hover{border-color:var(--danger);background:#2a1a1a}
.wk-p{font-size:9.5px;color:var(--acc);font-weight:700;margin-bottom:2px}
.wk-n{font-size:10.5px;line-height:1.35;word-break:break-word;color:var(--tx)}
.wk-pl{font-size:9px;color:var(--tx3);margin-top:3px;word-break:break-word}
.wk-empty{font-size:11px;color:#333a46;text-align:center;padding:6px 0}

@media(max-width:420px){
  .tabbar button{font-size:11px;padding:10px 2px 8px}
  .tabbar button span{font-size:15px}
  .pav{width:40px;height:40px;font-size:20px;border-radius:11px}
  .pcard{padding:12px;gap:10px}
  .pcard .btn-sm{padding:6px 10px;font-size:11.5px}
  .home-stats{grid-template-columns:repeat(4,1fr);gap:6px}
  .home-stats b{font-size:17px}
  .wk{gap:3px}
  .wk-item{padding:5px 3px}
  .wk-n{font-size:9.5px}
}

/* ══════════ 职位徽章 + 班委管理 ══════════ */
.badge.duty{
  background:linear-gradient(135deg,#3a2f10,#2a2410);
  color:#f5c451; border:1px solid #4a3a12;
}
.badge.me-tag{background:#1d2a3e;color:#8fb4e6;border:1px solid #26364f}

.cmem{
  display:flex;gap:11px;align-items:center;padding:11px 0;border-bottom:1px solid var(--line);
}
.cmem:last-of-type{border-bottom:none}
.cav{
  width:40px;height:40px;border-radius:12px;flex-shrink:0;font-size:20px;
  display:flex;align-items:center;justify-content:center;
}
.cinf{flex:1;min-width:0}
.cnm{font-size:14px;font-weight:650;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.csb{font-size:11.5px;color:var(--tx3);margin-top:2px}
.cmem .btn-sm{flex-shrink:0;padding:7px 13px;font-size:12.5px}

/* 职位选择器里的 chip 稍大一点 */
#dyPick .chip{padding:8px 13px;font-size:13px}

/* ══════════ 密码提醒 ══════════ */
.pwarn{
  background:linear-gradient(135deg,#2a1f10,#241a12);
  border:1px solid #4a3a12;border-radius:11px;padding:12px 14px;margin-bottom:13px;
  text-align:left;font-size:12.5px;line-height:1.65;color:#e0c88a;
}
.pwarn b{color:#f5c451}
.pwarn div{margin-top:5px;color:#c9b48a}

/* ══════════ 新手教程 ══════════ */
.tour{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:18px}
.tour-bg{position:absolute;inset:0;background:rgba(8,10,14,.86);backdrop-filter:blur(6px)}
.tour-box{
  position:relative;width:100%;max-width:400px;background:var(--card);
  border:1px solid var(--line);border-radius:20px;padding:26px 22px 20px;text-align:center;
  box-shadow:0 24px 60px -16px rgba(0,0,0,.85);animation:pop .26s cubic-bezier(.2,.9,.3,1.2);
}
@keyframes pop{from{transform:scale(.9) translateY(14px);opacity:0}to{transform:none;opacity:1}}
.tour-skip{
  position:absolute;top:12px;right:14px;font-size:12.5px;color:var(--tx3);
  padding:5px 10px;border-radius:8px;
}
.tour-skip:hover{background:var(--card2);color:var(--tx2)}
.tour-pic{
  font-size:52px;line-height:1;margin:6px 0 16px;
  filter:drop-shadow(0 6px 18px rgba(91,157,255,.35));
}
.tour-title{font-size:19px;font-weight:700;margin-bottom:12px;letter-spacing:-.3px}
.tour-text{font-size:14px;line-height:1.75;color:#c3cad6;text-align:left;min-height:92px}
.tour-text b{color:var(--acc);font-weight:650}
.tour-dots{display:flex;gap:6px;justify-content:center;margin:20px 0 16px}
.tour-dots span{width:6px;height:6px;border-radius:50%;background:#333a48;transition:.2s}
.tour-dots span.on{background:var(--acc);width:18px;border-radius:3px}
.tour-btns{display:flex;gap:9px}
.tour-btns .btn-sm{padding:12px;font-size:14.5px}
.tour-step{font-size:11px;color:var(--tx3);margin-top:12px}

/* ══════════ 课表导入 ══════════ */
.imp-opt{
  display:flex;align-items:center;gap:12px;background:var(--card2);border:1px solid var(--line);
  border-radius:13px;padding:14px;margin-bottom:10px;cursor:pointer;transition:.15s;
}
.imp-opt:hover{border-color:var(--acc);background:#212836;transform:translateY(-1px)}
.imp-opt.danger:hover{border-color:var(--danger);background:#2a1a1a}
.imp-ico{font-size:23px;line-height:1;flex-shrink:0;width:30px;text-align:center}
.imp-bd{flex:1;min-width:0}
.imp-t{font-size:14.5px;font-weight:650;display:flex;align-items:center;gap:7px}
.imp-d{font-size:12.5px;color:var(--tx2);margin-top:3px;line-height:1.55}
.imp-d b{color:var(--acc)}
.imp-go{font-size:12.5px;color:var(--acc);font-weight:600;flex-shrink:0;white-space:nowrap}
.imp-hot{font-size:10px;font-weight:700;color:#fff;background:var(--acc);padding:2px 7px;border-radius:20px}
.imp-tip{
  margin-top:16px;padding:13px 15px;background:#141922;border:1px solid var(--line);
  border-radius:11px;font-size:12.5px;line-height:1.85;color:var(--tx2);
}
.imp-tip b{color:var(--tx)}
.imp-sec{font-size:12px;color:var(--tx3);font-weight:600;margin:18px 0 10px;letter-spacing:.4px}

.xls-prev{margin:12px 0 6px}
.xp-ok{font-size:13px;color:var(--ok);background:#12271e;border:1px solid #1e4a35;
  border-radius:10px;padding:10px 13px;margin-bottom:10px}
.xp-ok b{color:#5eead4}
.xp-err{font-size:13px;color:#f0a0a0;background:#2a1a1a;border:1px solid #4a2626;
  border-radius:10px;padding:11px 13px;line-height:1.65}
.xp-err b{color:#ffc9c9}
.xp-list{max-height:230px;overflow:auto;background:var(--card2);border:1px solid var(--line);
  border-radius:10px;padding:10px 12px}
.xp-day{font-size:12.5px;padding:5px 0;line-height:1.9;border-bottom:1px solid #232833}
.xp-day:last-child{border-bottom:none}
.xp-day>b{color:var(--acc);margin-right:8px;font-size:12px}
.xp-c{display:inline-block;background:#1e2430;border-radius:6px;padding:2px 8px;margin:2px 4px 2px 0;font-size:11.5px}
.xp-c i{color:var(--tx3);font-style:normal;margin-left:4px;font-size:10.5px}
.fmt{background:#141922;border:1px solid var(--line);border-radius:9px;padding:11px 13px;
  font-family:ui-monospace,monospace;font-size:11.5px;line-height:1.9;color:var(--tx2);word-break:break-all}

/* ══════════ 意见箱 ══════════ */
.fb-intro{
  background:linear-gradient(135deg,#1a2740,#182030);border:1px solid #24344f;border-radius:12px;
  padding:13px 15px;font-size:13px;line-height:1.75;color:#a8c4e8;margin-bottom:16px;
}
.fb-intro b{color:#dce9ff}
.fb-hd{font-size:13px;font-weight:600;color:var(--tx2);margin:18px 0 10px;display:flex;align-items:center;gap:9px}
.fb-badge{font-size:11px;font-weight:700;background:#3a2f10;color:var(--warn);padding:2px 9px;border-radius:20px}
.fb-card{
  background:var(--card2);border:1px solid var(--line);border-radius:13px;
  padding:14px;margin-bottom:10px;transition:.15s;
}
.fb-card.done{border-color:#1e4a35;background:linear-gradient(180deg,#141f1a,#181b22)}
.fb-card.read{border-color:#243a5c}
.fb-top{display:flex;align-items:center;gap:9px;margin-bottom:9px;flex-wrap:wrap}
.fb-cat{font-size:10.5px;font-weight:700;background:#1d2432;color:#8fb4e6;padding:2px 9px;border-radius:20px}
.fb-st{font-size:11.5px;font-weight:600}
.fb-time{font-size:11px;color:var(--tx3);margin-left:auto}
.fb-content{font-size:14px;line-height:1.7;color:#d5dae4;white-space:pre-wrap;word-break:break-word}
.fb-from{display:flex;align-items:center;gap:10px;margin-top:11px;padding-top:10px;border-top:1px solid var(--line)}
.fb-who{font-size:11.5px;color:var(--tx3)}
.fb-sp{flex:1}
.fb-act{
  font-size:11.5px;color:var(--acc);padding:4px 9px;border-radius:7px;transition:.13s;
}
.fb-act:hover{background:#1d2a3e}
.fb-act.danger{color:var(--danger)}
.fb-act.danger:hover{background:#2a1a1a}
.fb-reply{
  margin-top:11px;padding:11px 13px;background:#1a2233;border-left:3px solid var(--acc);border-radius:0 9px 9px 0;
}
.fb-reply-h{font-size:11.5px;color:var(--acc);font-weight:600;margin-bottom:5px}
.fb-reply-b{font-size:13.5px;line-height:1.65;color:#c3cad6;white-space:pre-wrap;word-break:break-word}
.fb-quote{
  background:var(--card2);border-left:3px solid var(--acc);border-radius:0 9px 9px 0;
  padding:11px 13px;font-size:13.5px;line-height:1.65;color:#c3cad6;white-space:pre-wrap;word-break:break-word;
  max-height:150px;overflow:auto;
}

/* ══════════ 管理后台 ══════════ */
.admin{position:fixed;inset:0;z-index:90;background:var(--bg);display:flex;flex-direction:column}
.adm-top{
  display:flex;align-items:center;justify-content:space-between;padding:13px 18px;
  border-bottom:1px solid var(--line);background:rgba(15,17,21,.92);backdrop-filter:blur(12px);flex-shrink:0;
}
.adm-title{font-size:16px;font-weight:700}
.adm-tabs{display:flex;border-bottom:1px solid var(--line);background:rgba(15,17,21,.85);flex-shrink:0;overflow-x:auto}
.adm-tabs button{
  flex:1;min-width:88px;padding:12px 8px;font-size:13.5px;font-weight:600;color:var(--tx3);
  border-bottom:2px solid transparent;transition:.15s;white-space:nowrap;
}
.adm-tabs button.on{color:var(--acc);border-bottom-color:var(--acc)}
.adm-main{flex:1;overflow:auto;padding:18px 16px 60px;max-width:820px;width:100%;margin:0 auto}

.adm-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:9px;margin-bottom:20px}
.adm-card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:13px 8px;text-align:center}
.adm-cv{font-size:20px;font-weight:700;color:var(--acc);line-height:1.2}
.adm-ck{font-size:11px;color:var(--tx3);margin-top:4px}

.adm-block{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:16px;margin-bottom:14px}
.adm-bt{font-size:14px;font-weight:700;margin-bottom:14px;display:flex;align-items:center;gap:9px}
.adm-n{margin-left:auto;font-size:12px;color:var(--tx3);font-weight:500}

.adm-chart{display:flex;align-items:flex-end;gap:4px;height:120px;padding:0 2px}
.adm-bar{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%;position:relative}
.adm-bf{width:100%;background:linear-gradient(180deg,var(--acc),#2c5a99);border-radius:4px 4px 0 0;min-height:3px;transition:.3s}
.adm-bar span{position:absolute;bottom:-15px;font-size:9.5px;color:var(--tx3)}
.adm-chart-x{display:flex;gap:4px;margin-top:20px}
.adm-chart-x span{flex:1;text-align:center;font-size:9.5px;color:var(--tx3)}

.adm-table{font-size:13px}
.adm-tr{display:grid;grid-template-columns:34px 1.6fr repeat(4,46px) 1fr;gap:6px;align-items:center;
  padding:9px 4px;border-bottom:1px solid var(--line)}
.adm-tr.head{color:var(--tx3);font-size:11.5px;font-weight:600;border-bottom:1px solid var(--line)}
.adm-tr:last-child{border-bottom:none}
.adm-idx{color:var(--tx3);font-size:12px;text-align:center}
.adm-nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.adm-duty{font-style:normal;font-size:10px;color:var(--warn);background:#2a2210;padding:1px 6px;border-radius:20px}
.adm-dim{color:var(--tx3);font-size:11.5px;text-align:right}

.adm-mem{display:flex;align-items:center;gap:11px;padding:11px 0;border-bottom:1px solid var(--line)}
.adm-mem:last-child{border-bottom:none}
.adm-mav{width:40px;height:40px;border-radius:12px;flex-shrink:0;font-size:20px;display:flex;align-items:center;justify-content:center}
.adm-minfo{flex:1;min-width:0}
.adm-mn{font-size:14px;font-weight:650;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.adm-ms{font-size:11.5px;color:var(--tx3);margin-top:2px}
.adm-mact{display:flex;gap:5px;flex-shrink:0}
.adm-mact .btn-sm{padding:6px 10px;font-size:12px}
.btn-sm.danger{color:var(--danger)}
.btn-sm.ghost.danger:hover{background:#2a1a1a}

.adm-item{display:flex;align-items:center;gap:12px;padding:11px 0;border-bottom:1px solid var(--line)}
.adm-item:last-child{border-bottom:none}
.adm-ii{flex:1;min-width:0}
.adm-it{font-size:13.5px;line-height:1.55;word-break:break-word;
  overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.adm-is{font-size:11.5px;color:var(--tx3);margin-top:3px}

.adm-btns{display:flex;gap:9px;flex-wrap:wrap}
.adm-btns .btn-sm{padding:9px 16px}
.danger-zone{border-color:#4a2626;background:linear-gradient(180deg,#1e1618,#181b22)}

@media(max-width:560px){
  .adm-tr{grid-template-columns:26px 1.4fr repeat(2,38px) 1fr;font-size:12px}
  .adm-tr>*:nth-child(4),.adm-tr>*:nth-child(5){display:none}
  .adm-mact{flex-direction:column}
  .adm-main{padding:14px 11px 50px}
}

.auth-forgot{
  display:block;margin:16px auto 0;font-size:13px;color:var(--tx3);
  padding:6px 12px;border-radius:8px;transition:.15s;
}
.auth-forgot:hover{color:var(--acc);background:var(--card)}

.code-hint{font-size:12.5px;margin-top:6px;min-height:17px;line-height:1.4}
.code-hint.ok{color:var(--ok)}
.code-hint.bad{color:var(--danger)}

/* 邀请码列表 */
.adm-codes{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:7px}
.adm-code{
  display:flex;align-items:center;gap:7px;background:var(--card2);border:1px solid var(--line);
  border-radius:9px;padding:8px 11px;font-size:13px;
}
.adm-code.used{opacity:.45}
.adm-cn{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.adm-cc{font-family:ui-monospace,monospace;font-weight:700;color:var(--acc);letter-spacing:1px;font-size:12.5px}
.adm-cs{font-size:13px}

/* ══════════ 子页切换 ══════════ */
.sub-tabs{display:flex;gap:6px;background:var(--card);border:1px solid var(--line);
  border-radius:12px;padding:4px;margin-bottom:14px}
.sub-tabs button{flex:1;padding:9px;border-radius:9px;font-size:13.5px;font-weight:600;
  color:var(--tx3);transition:.15s}
.sub-tabs button.on{background:var(--acc);color:#fff}

/* ══════════ 在线组队 ══════════ */
.tm-filter{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:14px}
.tm-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  padding:14px;margin-bottom:11px;transition:.15s}
.tm-card:hover{border-color:#3a4354}
.tm-card.done{opacity:.5}
.tm-h{display:flex;align-items:center;gap:9px;margin-bottom:8px;flex-wrap:wrap}
.tm-tag{font-size:10.5px;font-weight:700;padding:2px 9px;border-radius:20px;flex-shrink:0}
.tm-title{font-size:15px;font-weight:650;flex:1;min-width:0;word-break:break-word}
.tm-need{font-size:11.5px;font-weight:700;color:var(--ok);white-space:nowrap}
.tm-need.full{color:var(--tx3)}
.tm-desc{font-size:13.5px;color:var(--tx2);line-height:1.65;margin-bottom:8px;white-space:pre-wrap;word-break:break-word}
.tm-meta{font-size:12.5px;color:var(--tx3);margin-bottom:10px}
.tm-mem{display:flex;align-items:center;gap:5px;margin-bottom:11px;flex-wrap:wrap}
.tm-av{width:30px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;
  font-size:15px;flex-shrink:0}
.tm-av.empty{background:transparent;border:1.5px dashed #333a48;color:#3a4354;font-size:14px}
.tm-names{font-size:12px;color:var(--tx3);margin-left:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tm-act{display:flex;align-items:center;gap:9px;padding-top:11px;border-top:1px solid var(--line)}
.tm-by{font-size:11.5px;color:var(--tx3);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tm-act .btn-sm{padding:7px 15px;font-size:13px;flex-shrink:0}

.ver-row{display:flex;align-items:center;gap:10px;margin-top:14px;padding-top:12px;
  border-top:1px solid var(--line);font-size:11.5px;color:var(--tx3)}
.ver-row b{color:var(--tx2);font-family:ui-monospace,monospace}
.ver-row .fb-act{margin-left:auto}

/* ══════════ 文件 / 图片上传 ══════════ */
.up-btn{font-size:18px;width:34px;height:34px;border-radius:10px;transition:.15s}
.up-btn:hover{background:var(--card2)}
textarea.drag{border-color:var(--acc);background:#1a2333}

.up-list{display:flex;flex-direction:column;gap:6px;margin-top:9px}
.up-list:empty{margin-top:0}
.up-item{display:flex;align-items:center;gap:9px;background:var(--card2);border:1px solid var(--line);
  border-radius:10px;padding:7px 10px;font-size:12.5px}
.up-item.uping{opacity:.6;border-style:dashed}
.up-item img{width:34px;height:34px;object-fit:cover;border-radius:7px;flex-shrink:0}
.up-ico{width:34px;height:34px;display:flex;align-items:center;justify-content:center;font-size:19px;flex-shrink:0}
.up-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.up-size{color:var(--tx3);font-size:11.5px;flex-shrink:0}
.up-del{color:var(--tx3);font-size:14px;padding:2px 5px;border-radius:6px;flex-shrink:0}
.up-del:hover{color:var(--danger);background:#2a1a1a}

/* 帖子/资源里的附件展示 */
.fx-imgs{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:6px;margin-top:10px}
.fx-imgs a{display:block;aspect-ratio:1;border-radius:10px;overflow:hidden;background:var(--card2);
  border:1px solid var(--line);transition:.15s}
.fx-imgs a:hover{border-color:var(--acc);transform:scale(1.02)}
.fx-imgs img{width:100%;height:100%;object-fit:cover;display:block}
.fx-imgs a:only-child{grid-column:span 2}
.fx-files{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.fx-file{display:flex;align-items:center;gap:9px;background:var(--card2);border:1px solid var(--line);
  border-radius:10px;padding:9px 12px;font-size:13px;transition:.15s;color:inherit;text-decoration:none}
.fx-file:hover{border-color:var(--acc);background:#212836}
.fx-ico{font-size:18px;flex-shrink:0}
.fx-nm{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fx-sz{color:var(--tx3);font-size:11.5px;flex-shrink:0}

/* 大图 */
.lightbox{position:fixed;inset:0;z-index:200;background:rgba(8,10,14,.94);
  display:flex;align-items:center;justify-content:center;padding:22px;backdrop-filter:blur(6px)}
.lightbox img{max-width:100%;max-height:100%;border-radius:12px;box-shadow:0 20px 60px rgba(0,0,0,.6)}
.lb-x{position:absolute;top:18px;right:18px;font-size:20px;color:#fff;background:rgba(255,255,255,.12);
  width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center}
.lb-x:hover{background:rgba(255,255,255,.24)}

/* 文件选择框 */
.file-drop{
  border:2px dashed #333a48;border-radius:14px;padding:26px 18px;text-align:center;
  cursor:pointer;transition:.18s;background:var(--card2);margin-bottom:14px;
}
.file-drop:hover,.file-drop.drag{border-color:var(--acc);background:#1b2433}
.fd-ico{font-size:34px;line-height:1;margin-bottom:9px}
.fd-t{font-size:15px;font-weight:650;margin-bottom:4px}
.fd-d{font-size:12.5px;color:var(--tx3);margin-bottom:6px}
.fd-fmt{font-size:11.5px;color:var(--tx3);opacity:.75}

/* 课表时间显示 */
.today-time{
  display:inline-block;font-size:11.5px;color:var(--acc);font-weight:600;
  background:#182740;border-radius:6px;padding:1px 7px;margin:0 6px 0 2px;
  font-family:ui-monospace,Menlo,monospace;letter-spacing:.2px;
}
.wk-t{
  font-size:10px;color:var(--acc);font-weight:600;line-height:1.25;margin-top:1px;
  font-family:ui-monospace,Menlo,monospace;
}

/* 周课表时间:只显示起始,不折行 */
.wk-t{white-space:nowrap;font-size:10.5px}

/* 通知里的附件:图片限高,保持通知紧凑 */
.notice .fx-imgs{grid-template-columns:repeat(auto-fill,minmax(76px,1fr));max-width:100%}
.notice .fx-imgs a{aspect-ratio:auto;max-height:150px}
.notice .fx-imgs a:only-child{grid-column:auto;max-width:200px}
.notice .fx-imgs img{height:150px;width:auto;max-width:100%;object-fit:cover}
.notice .fx-files{margin-top:8px}
.notice .fx-file{padding:7px 11px;font-size:12.5px}

/* ══════════ 资源分区导航 ══════════ */
.res-bar{
  display:flex;gap:7px;flex-wrap:wrap;margin-bottom:6px;
  position:sticky;top:0;z-index:12;
  background:linear-gradient(180deg,var(--bg) 70%,rgba(15,17,21,.85));
  padding:2px 0 9px;
}
.res-bar .chip{font-size:12.5px;padding:6px 12px}
.res-bar .chip i{font-style:normal;opacity:.55;font-size:11px;margin-left:3px}
.res-bar .chip.on i{opacity:.85}
.res-sec{scroll-margin-top:70px}
