\
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
:root{--blue:#4361ee;--cyan:#06b6d4;--green:#2ec4b6;--orange:#ff8c42;--pink:#f72585;--purple:#7209b7;--bg:#eef1f8;--card:#fff;--text:#1f2a44;--mute:#7a86a1;--line:#e6ebf5}
body{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}
.phone{position:relative;max-width:430px;margin:0 auto;min-height:100vh;background:var(--bg);display:flex;flex-direction:column}
.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:10px;padding:13px 16px;background:rgba(255,255,255,.92);backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
.topbar .back{font-size:26px;color:var(--blue);text-decoration:none;line-height:1}
.topbar .t{font-size:17px;font-weight:700}
.screen{flex:1;overflow-y:auto;padding:14px 14px 86px}
.card{background:var(--card);border-radius:18px;padding:15px;margin-bottom:13px;box-shadow:0 4px 16px rgba(67,97,238,.06)}
.sec-h{font-size:16px;font-weight:700;margin:2px 0 12px;display:flex;align-items:center;gap:6px}
.sec-h .more{margin-left:auto;font-size:12px;color:var(--mute);font-weight:400}
.muted{color:var(--mute);font-size:13px}
.tag{display:inline-block;background:rgba(67,97,238,.1);color:var(--blue);font-size:11px;padding:2px 9px;border-radius:8px;font-weight:600}
/* banner（主页顶部） */
.banner{background:linear-gradient(135deg,var(--blue),var(--cyan));color:#fff;border-radius:18px;padding:22px 18px;margin-bottom:13px;box-shadow:0 8px 24px rgba(67,97,238,.25)}
.banner .cls{font-size:12px;opacity:.9}
.banner h1{font-size:23px;font-weight:800;margin:3px 0 6px}
.banner .slogan{font-size:13px;opacity:.92}
.banner .meta{display:flex;gap:18px;margin-top:14px}
.banner .meta .n{font-size:18px;font-weight:800}
.banner .meta .l{font-size:11px;opacity:.85}
/* 快捷入口 */
.qgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:11px}
.qcell{background:#fff;border-radius:16px;padding:14px 6px;text-align:center;text-decoration:none;color:var(--text);box-shadow:0 4px 16px rgba(67,97,238,.06)}
.qcell .ic{width:46px;height:46px;border-radius:14px;margin:0 auto 8px;display:flex;align-items:center;justify-content:center;font-size:24px;color:#fff}
.qcell .lb{font-size:13px;font-weight:600}
/* 公告 */
.ntc{display:flex;gap:11px;padding:11px 0;border-bottom:1px solid var(--line)}
.ntc:last-child{border-bottom:none}
.ntc .dot{width:8px;height:8px;border-radius:50%;background:var(--orange);margin-top:6px;flex:none}
.ntc .t{font-size:14px;font-weight:600}
.ntc .d{font-size:12px;color:var(--mute);margin-top:3px}
/* 课程表 */
.day{background:#fff;border-radius:16px;padding:13px;margin-bottom:11px;border-left:4px solid var(--blue)}
.day.today{border-left-color:var(--orange);box-shadow:0 6px 20px rgba(255,140,66,.18)}
.day .dh{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.day .dh .dn{font-size:15px;font-weight:800}
.day .dh .badge{font-size:11px;background:var(--orange);color:#fff;padding:1px 8px;border-radius:8px;font-weight:700}
.les{display:flex;align-items:center;gap:10px;padding:6px 0;border-bottom:1px dashed var(--line)}
.les:last-child{border-bottom:none}
.les .per{width:42px;font-size:11px;color:var(--mute);flex:none}
.les .sub{font-size:14px;font-weight:600}
.les .sub.free{color:var(--green)}
.les .sub.pe{color:var(--orange)}
/* 同学录 */
.group{margin-bottom:14px}
.group .gn{font-size:13px;font-weight:700;color:var(--blue);margin-bottom:8px;display:flex;align-items:center;gap:6px}
.mates{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.mate{display:flex;gap:10px;align-items:center;background:#fff;border-radius:14px;padding:10px;box-shadow:0 3px 12px rgba(67,97,238,.05)}
.mate .av{width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:15px;flex:none}
.mate .nm{font-size:14px;font-weight:600}
.mate .role{font-size:11px;color:var(--mute);margin-top:2px}
/* 作业 */
.hwprog{font-size:13px;color:var(--mute);font-weight:600;margin-bottom:10px}
.hw{display:flex;gap:11px;align-items:flex-start;background:#fff;border-radius:14px;padding:12px;margin-bottom:10px;box-shadow:0 3px 12px rgba(67,97,238,.05);cursor:pointer}
.hw .chk{width:22px;height:22px;border-radius:50%;border:2px solid var(--line);flex:none;margin-top:2px;display:flex;align-items:center;justify-content:center;font-size:13px;color:#fff}
.hw.done .chk{background:var(--green);border-color:var(--green)}
.hw.done .ct{text-decoration:line-through;color:var(--mute)}
.hw .sub{font-size:14px;font-weight:700}
.hw .ct{font-size:13px;margin-top:3px}
.hw .due{font-size:11px;color:var(--orange);margin-top:4px;font-weight:600}
/* 相册 */
.agrid{display:grid;grid-template-columns:repeat(2,1fr);gap:11px}
.photo{height:122px;border-radius:16px;color:#fff;display:flex;flex-direction:column;justify-content:flex-end;padding:12px;box-shadow:0 4px 16px rgba(0,0,0,.08);position:relative;overflow:hidden;cursor:pointer}
.photo .emo{position:absolute;top:10px;left:12px;font-size:34px;opacity:.92}
.photo .cap{font-size:13px;font-weight:700;text-shadow:0 1px 4px rgba(0,0,0,.3)}
.lightbox{position:fixed;inset:0;background:rgba(0,0,0,.85);z-index:90;display:none;align-items:center;justify-content:center;flex-direction:column}
.lightbox.show{display:flex}
.lightbox #lbBox{width:78%;max-width:320px;height:320px;border-radius:22px;display:flex;align-items:center;justify-content:center;font-size:92px;color:#fff}
.lightbox .hint{color:#fff;margin-top:16px;font-size:13px;opacity:.8}
/* 留言 */
.msg{background:#fff;border-radius:14px;padding:12px;margin-bottom:11px;box-shadow:0 3px 12px rgba(67,97,238,.05)}
.msg-h{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.msg-h b{font-size:14px}
.msg-t{font-size:11px;color:var(--mute);margin-left:auto}
.msg-b{font-size:14px;line-height:1.55}
.like{margin-top:8px;background:rgba(247,37,133,.08);color:var(--pink);border:none;border-radius:20px;padding:5px 12px;font-size:12px;font-weight:700}
/* 表单 */
.form{background:#fff;border-radius:16px;padding:14px;margin-bottom:13px}
.form label{font-size:13px;font-weight:600;display:block;margin-bottom:6px}
.form input,.form textarea{width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:12px;font-size:14px;font-family:inherit;margin-bottom:11px;background:#fafbff}
.form textarea{resize:vertical;min-height:74px}
.btn-blue{background:linear-gradient(135deg,var(--blue),var(--cyan));color:#fff;border:none;border-radius:12px;padding:12px;width:100%;font-size:15px;font-weight:700}
/* tabbar */
.tabbar{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:100%;max-width:430px;display:flex;background:#fff;border-top:1px solid var(--line);z-index:30}
.tabbar a{flex:1;text-align:center;padding:7px 0 8px;text-decoration:none;color:var(--mute);font-size:10px;font-weight:600}
.tabbar a span{display:block;font-size:19px;margin-bottom:2px}
.tabbar a.on{color:var(--blue)}
.toast{position:fixed;left:50%;bottom:92px;transform:translateX(-50%);background:rgba(31,42,68,.92);color:#fff;padding:11px 18px;border-radius:22px;font-size:14px;z-index:99;opacity:0;transition:.3s}
.toast.show{opacity:1}
