/* ============================================================
   湖中医大助手 v2 —— 视觉还原老版本（WeUI 2.4.4 基础上定制）
   老版规范：#ededed 灰底 / 黑体 / topsl 横幅卡 / 学期卡片 /
   25% 图标九宫格 / 黑头课表 / 底部图标导航
   ============================================================ */

html { max-width: 480px; margin: 0 auto; overflow-x: hidden; }

body {
    background: #ededed;
    font-family: 'SimHei', '黑体', 'Microsoft YaHei', sans-serif;
    padding-bottom: 60px; /* 底部固定导航留白 */
    overflow-x: hidden; /* 微信 webview 里整页左右拖拽/回弹（内容并无横向溢出也会发生） */
}

a { text-decoration: none; }

/* ---------- 顶部横幅卡（成绩/考试/绑定页共用） ---------- */
.topsl {
    width: 90%;
    height: 95px;
    margin: 30px auto;
    background-image: url(https://ae01.alicdn.com/kf/Hf8357363e6754981a4817b006ebda93c5.png);
    background-size: 100% 100%;
    border-radius: 10px;
}

.topsl .info {
    width: 95%;
    text-align: right;
    color: #fff;
    font-size: 1em;
    line-height: 40px;
    margin: 0 auto;
    text-shadow: 0 1px 2px rgba(0,0,0,.15);
}

/* 横幅下的胶囊按钮排 */
.navbar {
    font-weight: 600;
    width: 95%;
    margin: 10px auto 0;
    overflow: hidden;
}

.navbar > a {
    width: 80px;
    height: 20px;
    line-height: 20px;
    float: right;
    text-align: center;
    background: #fff;
    border-radius: 20px;
    color: #7696C7;
    border: 2px solid #fff;
    font-size: 1em;
    position: relative;
    margin-left: 10px;
}

.navbar > a:first-of-type {
    float: left;
    margin-left: 0;
    margin-right: 10px;
    animation-name: none;
    -webkit-animation-name: none;
}

/* 中间那颗呼吸红光（老版 onePulse） */
.navbar > a.pulse {
    animation-duration: 2.5s;
    animation-iteration-count: infinite;
    animation-name: onePulse;
    -webkit-animation-name: onePulse;
}

.navbar > a:last-of-type {
    color: #fff;
    background: #414046;
    animation-name: none;
    -webkit-animation-name: none;
}

@-webkit-keyframes onePulse {
    from { box-shadow: 0 0 20px #ff8076; }
    50%  { box-shadow: 0 0 30px #ed4334; }
    to   { box-shadow: 0 0 20px #ff8076; }
}
@keyframes onePulse {
    from { box-shadow: 0 0 20px #ff8076; }
    50%  { box-shadow: 0 0 30px #ed4334; }
    to   { box-shadow: 0 0 20px #ff8076; }
}

/* ---------- 学期卡片（成绩/考试） ---------- */
.grades { width: 90%; margin: 20px auto; }

.grades .term {
    text-align: center;
    font-weight: 600;
    font-size: 1.2em;
    color: #686868;
    height: 40px;
    line-height: 50px;
    background: #fff;
    border-radius: 15px 15px 0 0;
}

/* 票根打孔分隔条：纯 CSS 绘制（原图 ../img/xx.png 经 ?r=asset 通道下发时相对路径解析到站点根 → 404，故弃用图片） */
.grades .tiao {
    position: relative;
    width: 100%;
    height: 32px;
    margin: 0 auto;
    background-color: #fff;
    background-image: radial-gradient(circle 2.5px at 7px 16px, #d2cfcf 2.5px, transparent 3px);
    background-size: 14px 32px;
    background-repeat: repeat-x;
}
.grades .tiao::before,
.grades .tiao::after {
    content: '';
    position: absolute;
    top: 50%;
    width: 18px;
    height: 18px;
    margin-top: -9px;
    border-radius: 50%;
    background: #ededed; /* 页面底色，形成票根两侧挖孔 */
}
.grades .tiao::before { left: -9px; }
.grades .tiao::after { right: -9px; }

.grades .table table {
    color: #212121;
    border-collapse: collapse;
    width: 100%;
    background: #fff;
    table-layout: fixed;
    border-radius: 0 0 15px 15px;
}

.grades .table table tr td,
.grades .table table tr th {
    line-height: 2.2em;
    text-align: left;
    padding-left: 0.6em;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: #8c8282;
}

.grades .table table tr td {
    border-bottom: 1px dotted #e2dede;
    font-size: 14px;
    color: #212121;
}

.grades .table tbody tr:last-of-type td { border-bottom: none; }

.grades .table td.hb-fail { color: #e64340; font-weight: 600; }
.grades .table tr.hb-fail-tr td { color: #e64340; }

/* ---------- 考试安排 · 周视图（views/ks/index.php，2026-10-03） ----------
   教务 kssj 原文「第2周,周3,(2026-09-09),16:00-17:40」四段可解析，
   服务端按真实日期的自然周分组；已结束的周默认折叠（展开状态存 localStorage）。 */
.ks-view.is-hide { display: none; }

/* 视图切换条：两个胶囊 + 右侧概况文字 */
.ksv-tabs {
    width: 90%; margin: 0 auto 12px;
    display: flex; align-items: center; gap: 6px;
}
.ksv-tab {
    flex: 0 0 auto; padding: 5px 16px; border-radius: 16px;
    font-size: 13px; line-height: 20px; color: #8c8282;
    background: #fff; border: 1px solid #e6e6e6;
}
.ksv-tab.on { background: #7696C7; border-color: #7696C7; color: #fff; font-weight: 600; }
.ksv-sum { margin-left: auto; font-size: 12px; color: #a0a0a0; }

.ksv-empty {
    width: 90%; margin: 0 auto 12px; padding: 26px 16px;
    background: #fff; border-radius: 14px;
    font-size: 13px; color: #a0a0a0; text-align: center; line-height: 1.7;
}

/* 周卡片 */
.ksw-week {
    width: 90%; margin: 0 auto 12px;
    background: #fff; border-radius: 14px; overflow: hidden;
    box-shadow: 0 1px 6px rgba(0, 0, 0, .04);
}
.ksw-hd {
    display: flex; align-items: center; gap: 8px;
    padding: 12px 14px; cursor: pointer; -webkit-tap-highlight-color: transparent;
}
.ksw-bar { flex: 0 0 auto; width: 3px; height: 16px; border-radius: 2px; background: #d8d8d8; }
.ksw-no { flex: 0 0 auto; font-size: 15px; font-weight: 700; color: #212121; }
.ksw-range { flex: 0 0 auto; font-size: 12px; color: #8c8282; }
.ksw-state {
    flex: 0 0 auto; font-size: 11px; line-height: 16px;
    padding: 0 6px; border-radius: 4px; background: #f2f2f2; color: #a0a0a0;
}
.ksw-cnt { margin-left: auto; flex: 0 0 auto; font-size: 12px; color: #8c8282; }
.ksw-arrow {
    flex: 0 0 auto; font-size: 12px; color: #b2b2b2;
    transition: transform .2s ease;
}
.ksw-week.is-fold .ksw-arrow { transform: rotate(-90deg); }
.ksw-week.is-fold .ksw-bd { display: none; }

/* 周状态配色：本周绿（站内主色）/ 待考蓝（沿用考试页胶囊蓝）/ 已结束灰 */
.ksw-week.is-now .ksw-bar { background: #07c160; }
.ksw-week.is-now .ksw-state { background: rgba(7, 193, 96, .1); color: #06ae56; }
.ksw-week.is-future .ksw-bar { background: #7696C7; }
.ksw-week.is-future .ksw-state { background: rgba(118, 150, 199, .14); color: #5d7fae; }
.ksw-week.is-past .ksw-no { color: #8c8282; }
.ksw-week.is-past .ksw-bar { background: #d8d8d8; }

.ksw-bd { border-top: 1px solid #f2f2f2; }

/* 单场考试：左「日期/星期」 中「时段」 右「课程 + 地点」 */
.ksw-item {
    display: flex; align-items: center; gap: 10px;
    padding: 11px 14px; border-bottom: 1px solid #f5f5f5;
}
.ksw-item:last-child { border-bottom: none; }
.ksw-when { flex: 0 0 60px; text-align: center; }
.ksw-when b { display: block; font-size: 13px; font-weight: 600; color: #212121; }
.ksw-when span { font-size: 11px; color: #8c8282; }
.ksw-clock {
    flex: 0 0 56px; text-align: center;
    border-left: 2px solid #eee; padding-left: 8px;
}
.ksw-clock b {
    display: block; font-size: 14px; font-weight: 600; color: #212121;
    letter-spacing: -.3px; line-height: 1.35;
}
/* 开始/结束时间同字号同加粗（结束仅用灰色弱化） */
.ksw-clock span {
    display: block; font-size: 14px; line-height: 1.35;
    font-weight: 600; color: #8c8282; letter-spacing: -.3px;
}
.ksw-main { flex: 1 1 auto; min-width: 0; }
.ksw-km { font-size: 15px; font-weight: 600; color: #212121; word-break: break-word; line-height: 1.4; }
/* 地点行：校区 · 考试地点（· N 号座位） */
.ksw-loc { margin-top: 4px; font-size: 12px; line-height: 1.5; color: #8c8282; word-break: break-word; }
.ksw-meta { margin-top: 3px; font-size: 12px; line-height: 1.6; color: #8c8282; word-break: break-word; }
.ksw-week.is-past .ksw-km,
.ksw-item.is-ended .ksw-km { color: #6b6b6b; }
.ksw-item.is-ended .ksw-clock b { color: #8c8282; }

/* ---------- 大厅：顶部通栏图 + 两个半宽入口 ---------- */
.hb-banner-link { display: block; }
.hb-banner { display: block; width: 100%; }

/* 多条 banner：横向 scroll-snap 滑动（手势原生），圆点指示 + 可选自动播放 */
.hb-swiper { position: relative; background: #fff; }
.hb-swiper-track {
    display: flex;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
}
.hb-swiper-track::-webkit-scrollbar { display: none; }
.hb-swiper-item {
    flex: 0 0 100%;
    width: 100%;
    scroll-snap-align: start;
    display: block;
}
.hb-swiper-item img { display: block; width: 100%; }
.hb-swiper-dots {
    position: absolute; left: 0; right: 0; bottom: 8px;
    display: flex; justify-content: center; gap: 5px;
}
.hb-dot {
    width: 6px; height: 6px; border-radius: 50%;
    background: rgba(255, 255, 255, .55);
    box-shadow: 0 0 2px rgba(0, 0, 0, .25);
    transition: width .2s;
}
.hb-dot.on { width: 14px; border-radius: 3px; background: #fff; }

/* 两列块：默认 2 个并排（与旧版一致），条目多于 2 个时自动换行 */
.hb-cells2 { display: flex; flex-wrap: wrap; background: #fff; }
.hb-cells2 .weui-cell {
    flex: 0 0 50%;
    max-width: 50%;
    box-sizing: border-box;
    border-right: 1px solid #D9D9D9;
    border-bottom: 1px solid #f2f2f2;
    padding: 10px 0;
    display: flex;
    align-items: center;
}
.hb-cells2 .weui-cell:nth-child(2n) { border-right: none; }
.hb-cells2 .weui-cell:last-child { border-right: none; }
.hb-cells2 .weui-cell__hd { margin: 0 15px; flex-shrink: 0; }
.hb-cells2 .weui-cell__hd img { width: 30px; height: 30px; object-fit: contain; display: block; }
.hb-cells2 .weui-cell__bd { min-width: 0; }
.hb-cell-name { font-size: 15px; color: #30293f; margin: 0; }
.hb-cell-desc { font-size: 13px; color: #b2afb8; margin: 2px 0 0; }
.hb-cells2 .weui-btn_mini {
    width: 40px; height: 20px; padding: 0; line-height: 20px;
    margin-right: 10px; font-size: 10px; color: #fff;
    background-color: #414046;
}

/* 自定义「列表」分区（我的页功能行那种单列样式） */
.hb-ui-icon { width: 26px; height: 26px; object-fit: contain; display: block; margin-right: 8px; }
.hb-ui-muted { color: #9aa3ad; font-size: 13px; }

/* 大厅九宫格：4 列、白底 */
.hb-grids { display: flex; flex-wrap: wrap; }
.hb-grids .weui-grid { width: 25%; box-sizing: border-box; background: #fff; padding: 20px 8px; }
.hb-grids .weui-grid__icon { height: 28px; }
.hb-grids .weui-grid__icon img { width: 28px; height: 28px; object-fit: contain; }
.hb-grids .weui-grid__label { color: #000; font-family: inherit; }

/* 提示条（文案可在后台配置，长文本自动换行，不再按单行裁掉）
   2026-10-02：改为 flex 布局 —— ① 上下间距取等（padding 上下同值、margin 归零）
   ② 🔥 图标由背景图改为 ::before 元素，align-items:center 让文字与图标严格同一水平线 */
.hb-notice {
    display: flex;
    align-items: center;
    padding: 7px 0 7px 5px;
    margin: 0;
    font-size: 14px;
    line-height: 20px;
}
.hb-notice::before {
    content: '';
    flex: 0 0 auto;
    width: 15px;
    height: 15px;
    margin-right: 2px;
    background: url(https://ae01.alicdn.com/kf/Hdfceb92fe32f48c08c7777fb3a422f522.png) no-repeat center / 100% 100%;
}
.hb-notice ul { flex: 1 1 auto; min-width: 0; margin: 0; padding: 0; list-style: none; }
.hb-notice li { margin: 0; padding: 0; }
.hb-notice a { color: #272636; font-size: 14px; line-height: 20px; display: block; word-break: break-word; }

/* 微信资料补全提示条（wx_profile_notice）：只在该 openid 无头像/无昵称或头像已失效时渲染 */
.hb-wxfix {
    display: flex;
    align-items: center;
    margin: 0 0 12px;
    padding: 10px 12px;
    background: #fff8e6;
    border: 1px solid #ffe2a8;
    border-radius: 10px;
}
.hb-wxfix-t {
    flex: 1 1 auto;
    min-width: 0;
    color: #7a5600;
    font-size: 13px;
    line-height: 19px;
    word-break: break-word;
}
.hb-wxfix-btn {
    flex: 0 0 auto;
    margin-left: 10px;
    padding: 5px 13px;
    background: #FAC775;
    color: #633806;
    font-size: 12px;
    line-height: 18px;
    border-radius: 999px;
    text-decoration: none;
    white-space: nowrap;
}

/* 底部 tabbar 图标（WeUI2 用 img） */
.weui-tabbar { background: #fff; }
.weui-tabbar__icon { height: 25px; width: 25px; margin: 2.3px; }
.hb-tabbar { position: fixed; bottom: 0; left: 0; right: 0; z-index: 500; }

/* 底部 tabbar 状态配色：选中绿（当前配色）/ 未选中灰（图标两态 PNG） */
.hb-tabbar .weui-tabbar__item .hb-tab-ic {
    display: flex; align-items: center; justify-content: center;
    height: 25px; color: #9aa3ad;
}
.hb-tabbar .weui-tabbar__item .weui-tabbar__label { color: #9aa3ad; }
.hb-tabbar .weui-tabbar__item .hb-tab-ic img { display: block; height: 25px; width: 25px; }
.hb-tabbar .weui-tabbar__item.weui-bar__item_on .weui-tabbar__label { color: #07c160; }

/* ---------- 课表页（老版 timetable 风格） ---------- */
.kbc-wrap { margin: 0; }

.kbc-wrap table {
    width: 100%;
    border-collapse: collapse;
    overflow: hidden;
    text-align: center;
    position: relative;
    table-layout: fixed;
    word-wrap: break-word;
}

.kbc-wrap table tr.hb-kbc-head th {
    background: #fff;
    color: #333;
    font-size: 12px;
    height: 3rem;
    font-weight: normal;
}

.kbc-wrap table tr.hb-kbc-head th a { color: #333; }

.kbc-wrap table th {
    background: #fff;
    width: 13%;
    height: 3rem;
    color: #5A5A5A;
    border-bottom: 1px solid #D6DFE1;
    font-weight: normal;
}

.kbc-wrap table tr th:first-of-type { width: 8%; }

.kbc-wrap table td {
    border-left: 0;
    border-right: 1px solid #fff;
    border-bottom: 1px dashed rgba(211, 213, 214, 0.27);
    /* 行高（kb / bjkb / xskb 三页共用） */
    height: 3.5rem;
    color: #fff;
    padding: 0 1px;
    font-size: 10px;
    position: relative;
    background: #fff;
    border-radius: 5px;
    overflow: hidden;
}

.kbc-wrap table tr td:first-of-type {
    color: #000;
    font-size: 11px;
    line-height: 1.2;
}

/* 今天列高亮（老版 .now 绿色） */
.kbc-wrap table th.now a { color: #04BE01; }

/* 课程 12 色（老版调色板） */
.kbc-c0  { background: #13CA9A !important; }
.kbc-c1  { background: #BA8ADE !important; }
.kbc-c2  { background: #FD8C40 !important; }
.kbc-c3  { background: #C9C9C9 !important; }
.kbc-c4  { background: #3DB5E7 !important; }
.kbc-c5  { background: #FFB81E !important; }
.kbc-c6  { background: #FF828A !important; }
.kbc-c7  { background: #EA69A2 !important; }
.kbc-c8  { background: #FE3E65 !important; }
.kbc-c9  { background: #7E57C6 !important; }
.kbc-c10 { background: #B3D465 !important; }
.kbc-c11 { background: #F29C77 !important; }

/* 冲突课右上角小三角（老版 add() 的角标） */
.kbc-corner {
    width: 0; height: 0;
    border-left: 10px solid #000;
    position: absolute; right: 0; top: 0;
}

/* 课表底部固定导航（老版 nav） */
.kbc-nav {
    display: flex;
    border-top: 1px solid #CFD1D1;
    border-bottom: 1px solid #EDEDED;
    background: #fff;
    width: 100%;
    margin-top: 10px;
    height: 52px;
    background: #fff;
}
.kbc-nav a { color: inherit; text-decoration: none; flex: 1; text-align: center; font-size: 12px; }
.kbc-nav img { height: 24px; margin: 6px auto 4px; display: block; }
.kbc-nav .on { color: #04BE01; }

/* ---------- 绑定页 · 已绑定态（2026-10-04 视觉重做：品牌头 + 卡片 + 主色按钮） ----------
   站点自己的视觉语言：主色绿 #07c160（tabbar 高亮 / 消息模块同款）、浅底圆角卡片、
   正文 #1f2937、辅助文字 #8a8a8e。宽度自适应，不再写死像素。
   ⚠️ 只作用于**已绑定**的资料卡（.hb-bind-wrap 内的元素）；未绑定表单见下方
   「.hb-bind-legacy」段 —— 用户明确只要已绑定态保持这套新视觉。 */
.hb-bind-page {
    --hb-bind-ink: #1f2937;      /* 主文字 */
    --hb-bind-sub: #8a8a8e;      /* 辅助文字 */
    --hb-bind-line: #ececf0;     /* 分隔线 */
    --hb-bind-soft: #f7f8fa;     /* 浅底（卡片 / 输入区） */
    --hb-bind-main: #07c160;     /* 品牌绿 */
    background: #fff;
    min-height: 100vh;
    padding: 0 0 40px;
}
.hb-bind-wrap {
    width: 100%;
    max-width: 340px;
    margin: 0 auto;
    padding: 34px 22px 0;
    box-sizing: border-box;
}

/* 头部：品牌小字 + 大标题 */
.hb-bind-hero { text-align: center; margin-bottom: 18px; }
.hb-bind-logo {
    margin: 0 0 9px;
    font-size: 13px; font-weight: 600;
    color: var(--hb-bind-main);
    letter-spacing: 1px;
}
.hb-bind-title {
    margin: 0;
    font-size: 25px; font-weight: 600;
    color: var(--hb-bind-ink);
    letter-spacing: 6px;
    text-indent: 6px; /* 抵消末字字距，保证视觉居中 */
}

/* 提示条：按 flash 类型着色（成功绿 / 失败红），左侧竖条用 currentColor */
.hb-bind-msg {
    display: flex; align-items: stretch; gap: 8px;
    margin: 0 0 14px; padding: 10px 12px;
    border-radius: 10px;
    background: #fef1f1; color: #c62828;
    font-size: 13px; line-height: 1.6;
    word-break: break-word;
}
.hb-bind-msg::before {
    content: ''; flex: 0 0 auto; width: 3px;
    border-radius: 2px; background: currentColor; opacity: .7;
}
.hb-bind-msg.ok { background: #eaf9f1; color: #0a8f4d; }

/* 表单卡片：浅底 + 字段名在输入框上方（不再只靠 placeholder） */
.hb-bind-card {
    padding: 4px 14px;
    border-radius: 14px;
    background: var(--hb-bind-soft);
}
.hb-bind-field { padding: 9px 0; }
.hb-bind-field + .hb-bind-field { border-top: 1px solid var(--hb-bind-line); }
.hb-bind-label {
    display: block;
    margin-bottom: 2px;
    font-size: 12px; color: var(--hb-bind-sub);
    letter-spacing: .3px;
}
.hb-bind-field:focus-within .hb-bind-label { color: var(--hb-bind-main); }
.hb-bind-input {
    display: block; width: 100%; height: 32px;
    padding: 0; border: none; outline: none;
    background: transparent;
    color: var(--hb-bind-ink);
    font-size: 16px; line-height: 32px;   /* ≥16px：避免 iOS 聚焦时自动放大页面 */
    caret-color: var(--hb-bind-main);
    -webkit-appearance: none; appearance: none;
}
.hb-bind-input::-webkit-input-placeholder { color: #b9bcc4; font-size: 14px; }
.hb-bind-input::placeholder { color: #b9bcc4; font-size: 14px; }

/* 两个勾选项：同族浅底卡片，与表单连成一片 */
.hb-bind-checks { margin-top: 12px; }
.hb-bind-agree {
    display: flex; align-items: flex-start; gap: 9px;
    padding: 10px 12px;
    border-radius: 12px;
    background: var(--hb-bind-soft);
    font-size: 12px; line-height: 1.65; color: #55606b;
}
.hb-bind-agree + .hb-bind-agree { margin-top: 8px; }
.hb-bind-agree-lb { flex: 0 0 auto; display: flex; padding-top: 1px; }
.hb-bind-agree-ck {
    width: 17px; height: 17px; margin: 0;
    -webkit-appearance: checkbox; appearance: checkbox;
    accent-color: var(--hb-bind-main);
}
.hb-bind-agree-txt { flex: 1 1 auto; }
.hb-bind-agree-txt a { color: var(--hb-bind-main); text-decoration: none; }

/* 按钮：主按钮品牌绿；次要按钮白底描边 */
.hb-bind-btn {
    display: block; width: 100%; height: 46px; line-height: 46px;
    margin-top: 18px;
    box-sizing: border-box;
    border: none; border-radius: 12px;
    font-size: 16px; font-weight: 500;
    text-align: center; text-decoration: none;
    -webkit-tap-highlight-color: transparent;
}
.hb-bind-btn-main { background: var(--hb-bind-main); color: #fff; }
.hb-bind-btn-main:active { background: #06ad56; }
.hb-bind-btn-main[disabled] { opacity: .6; }
.hb-bind-btn-ghost {
    margin-top: 10px;
    border: 1px solid #e2e2e8;
    background: #fff; color: var(--hb-bind-ink);
}
.hb-bind-btn-ghost:active { background: #f5f5f7; }

/* 已绑定：资料卡 + 明细行 */
.hb-bind-profile {
    padding: 20px 14px 16px;
    border-radius: 14px;
    background: var(--hb-bind-soft);
    text-align: center;
}
.hb-bind-avatar {
    width: 56px; height: 56px; margin: 0 auto 10px;
    border-radius: 50%;
    background: var(--hb-bind-main); color: #fff;
    font-size: 24px; font-weight: 500; line-height: 56px;
    text-align: center; overflow: hidden;
}
.hb-bind-pname { margin: 0; font-size: 17px; font-weight: 600; color: var(--hb-bind-ink); }
.hb-bind-pmeta { margin: 5px 0 0; font-size: 12.5px; color: var(--hb-bind-sub); }

.hb-bind-rows {
    margin-top: 12px; padding: 2px 14px;
    border-radius: 14px;
    background: var(--hb-bind-soft);
}
.hb-bind-row {
    display: flex; align-items: center; justify-content: space-between;
    padding: 12px 0;
    font-size: 14px;
}
.hb-bind-row + .hb-bind-row { border-top: 1px solid var(--hb-bind-line); }
.hb-bind-row span { flex: 0 0 auto; margin-right: 12px; color: var(--hb-bind-sub); }
.hb-bind-row b {
    flex: 1 1 auto; text-align: right;
    color: var(--hb-bind-ink); font-weight: 500;
    word-break: break-word;
}

/* 危险操作：解绑降级为文字按钮，与正向按钮用分隔线隔开（防误触） */
.hb-bind-danger {
    margin-top: 22px; padding-top: 18px;
    border-top: 1px solid var(--hb-bind-line);
    text-align: center;
}
.hb-bind-unbind {
    padding: 4px 8px; border: none; background: none;
    font-size: 14px; color: #e54545;
    -webkit-appearance: none; appearance: none;
    -webkit-tap-highlight-color: transparent;
}
.hb-bind-unbind:active { opacity: .6; }

/* 页脚：底部说明（后台富文本）+ 反馈入口 */
.hb-bind-foot { margin-top: 20px; }
.hb-bind-desc {
    padding: 12px 14px;
    border-radius: 12px;
    background: var(--hb-bind-soft);
    font-size: 12px; line-height: 1.85; color: #767c85;
    word-break: break-word;
}
.hb-bind-desc a { color: var(--hb-bind-main); text-decoration: none; }
.hb-bind-tip {
    display: block; margin-top: 14px;
    text-align: center; font-size: 13px;
    color: #e54545; text-decoration: none;
}

/* ---------- 绑定页 · 未绑定态（回退：老版「登录/更新页」外观，2026-10-05） ----------
   用户口径：只有「已绑定」用户的 r=bind 保留 10-04 的新视觉；未绑定（绑定表单）
   按原样回退。上面的 `.hb-bind-*` 新样式仍服务已绑定态，这里用 `.hb-bind-legacy`
   作用域把两态共用的类名（大标题 / 提示 / 勾选项 / 底部说明）覆盖回老版观感，
   再加回老版表单专属的 `.hb-login-*`（当年这些类名只有这个表单用过）。
   字体：老版用宋体大字标题，与现在站点默认字体（SimHei）不同，故显式指定。 */
.hb-bind-legacy .hb-bind-box { width: 270px; margin: 0 auto; padding-top: 30px; }
.hb-bind-legacy .hb-bind-title {
    font-family: 'SimSun', '宋体', serif;
    font-size: 34px; font-weight: 400; color: #000;
    text-align: center;
    letter-spacing: 14px;
    text-indent: 14px; /* 抵消最后一个字的字距，保证视觉居中 */
    margin: 46px 0 30px;
}
/* 老版提示是居中一行小字（不做卡片、不带左侧竖条）；
   .ok（成功）保留绿字 —— 原来成功提示也是红字，看着像报错。 */
.hb-bind-legacy .hb-bind-msg {
    display: block; margin: 2% 0 0; padding: 0;
    border-radius: 0; background: none;
    font-size: 12px; line-height: 1.6; color: #f8092c;
    min-height: 18px; text-align: center;
}
.hb-bind-legacy .hb-bind-msg::before { content: none; }
.hb-bind-legacy .hb-bind-msg.ok { background: none; color: #0a8f4d; }

.hb-bind-legacy .hb-login-form { width: 270px; margin: 0 auto; }
.hb-bind-legacy .hb-login-field { margin-bottom: 5px; }
.hb-bind-legacy .hb-login-input {
    width: 100%;
    height: 38px;
    line-height: 38px;
    padding: 0 10px;
    box-sizing: border-box;
    border: 1px solid #e5e5e8;
    border-radius: 4px;
    background: #fff;
    color: #333;
    font-size: 14px;
    -webkit-appearance: none;
    appearance: none;
}
.hb-bind-legacy .hb-login-input::-webkit-input-placeholder { color: #898989; }
.hb-bind-legacy .hb-login-input::placeholder { color: #898989; }
.hb-bind-legacy .hb-login-btnarea { width: 270px; margin: 22px auto 0; }
.hb-bind-legacy .hb-login-btn { width: 100%; }
.hb-bind-legacy .hb-login-btn[disabled] { opacity: .6; }

/* 勾选项：老版是裸排版（无浅底卡片），与输入框同宽对齐 */
.hb-bind-legacy .hb-bind-agree {
    display: flex; align-items: flex-start; gap: 7px;
    margin: 18px 0 2px; padding: 0 2px;
    border-radius: 0; background: none;
    font-size: 12px; line-height: 1.7; color: #41464b;
}
.hb-bind-legacy .hb-bind-agree-lb { display: block; padding-top: 0; }
.hb-bind-legacy .hb-bind-agree-ck { width: 16px; height: 16px; margin: 1px 0 0; }
.hb-bind-legacy .hb-bind-notice { margin-bottom: 0; }
.hb-bind-legacy .hb-bind-notice + .hb-bind-agree { margin-top: 8px; }

/* 底部说明：老版是纯文字块（无卡片底色），反馈入口红字居中 */
.hb-bind-legacy .hb-bind-desc {
    margin-top: 4%; padding: 0; border-radius: 0; background: none;
    font-size: 12px; line-height: 1.8; color: #41464b;
}
.hb-bind-legacy .hb-bind-tip { margin-top: 14px; color: #FF0000; }

/* ---------- 独立文档页（用户服务协议 r=fwxy） ---------- */
.hb-doc-page { background: #fff; min-height: 100vh; padding: 22px 18px 40px; }
.hb-doc-title {
    font-size: 18px; font-weight: 600; color: #22292f;
    text-align: center; margin: 0 0 14px;
}
.hb-doc-intro {
    font-size: 12px; color: #7a838c; line-height: 1.8;
    margin: 0 0 16px; padding: 10px 12px; border-radius: 8px; background: #f6f8f8;
}
.hb-doc-body { font-size: 13px; line-height: 1.85; color: #41464b; word-break: break-word; }
.hb-doc-body h3 {
    font-size: 14px; font-weight: 600; color: #22292f;
    margin: 20px 0 8px; padding-left: 9px; border-left: 3px solid #07c160;
}
.hb-doc-body h3:first-child { margin-top: 4px; }
.hb-doc-body p { margin: 0 0 9px; }
.hb-doc-body a { color: #07c160; }
.hb-doc-body strong { color: #22292f; }
.hb-doc-footer {
    margin: 26px 0 0; padding-top: 14px; border-top: 1px solid #eef1f2;
    font-size: 12px; color: #a6adb4; text-align: center;
}
.hb-doc-actions { margin: 22px 0 0; }
.hb-doc-btn {
    display: block; height: 44px; line-height: 44px; border-radius: 22px;
    background: #07c160; color: #fff; font-size: 16px; font-weight: 500;
    text-align: center;
}
.hb-doc-btn:active { background: #06ae56; }

/* ---------- 通用小字页脚 ---------- */
.hb-footer { padding-bottom: 20px; }
.hb-footer .weui-footer__text { font-size: 12px; }

/* 学期汇总小字（老版被注释的 GPA 行） */
.hb-gpa-line {
    text-align: center; color: #6f8cbe; font-size: 13px; margin: -12px 0 4px;
}

/* ---------- 通用页面骨架（WeUI 示例页类，官方 css 不含，自行补齐） ---------- */
.page { min-height: 100%; }
.page__hd { padding: 24px 15px 12px; }
.page__title { font-size: 21px; font-weight: 600; color: #1c1c1e; margin: 0; }
.page__desc { font-size: 13px; color: #8a8a8e; margin: 4px 0 0; }
.page__bd { padding-bottom: 24px; }

/* ---------- 我的（个人中心，对照老版 showmy.php 重做） ---------- */
.hb-me-page { padding-bottom: 80px; }
.hb-me-page .weui-cells { margin-top: 15px; }
.hb-me-page .weui-cells__title { margin-top: 24px; }

/* 资料卡 */
.hb-me-profile { margin-top: 20px !important; }
.hb-me-profile .weui-cell__hd { margin-right: 18px; }
/* 尺寸 / 圆角 / 底色由 avatar_html()（.hb-ava）内联下发，这里只保留外边距 */
.hb-me-avatar {
    margin: 5px 0;
}
.hb-me-name { color: #30293f; font-weight: 500; font-size: 16px; }
.hb-me-xh  { font-size: 13px; color: #b2afb8; margin-top: 4px; }
.hb-me-toggle { font-size: 12.5px; color: #07c160; }
.hb-me-icon { width: 20px; height: 20px; margin-right: 5px; display: block; }
.hb-me-muted { font-size: 13px; color: #b2afb8; }
.hb-me-badge {
    display: inline-block; font-size: 11px; color: #fff;
    background: #fa5151; border-radius: 9px; padding: 1px 7px;
    line-height: 16px; font-weight: 400;
}

/* 学籍信息折叠块（默认收起，点资料卡展开） */
.hb-me-acad { display: none; }
.hb-me-acad .weui-cells { margin-top: 0; }
.hb-me-acad .weui-cell__ft { max-width: 62%; word-break: break-all; }
.hb-me-note { font-size: 12px; color: #b2afb8; padding: 8px 15px 0; line-height: 1.6; }

/* 账号区 */
.hb-me-danger span { color: #586c94; }
.hb-me-footer { position: static; margin-top: 30px; padding-bottom: 10px; }
.hb-me-footer .weui-footer__text { font-size: 12px; }

/* ---------- 我的：通用底部弹层（隐私说明 / 清除数据 / 邀请 / 解绑） ---------- */
.hb-me-mask {
    position: fixed; top: 0; right: 0; bottom: 0; left: 0;
    background: rgba(0, 0, 0, .45);
    z-index: 900; opacity: 0; visibility: hidden;
    transition: opacity .24s ease, visibility .24s;
}
.hb-me-mask.show { opacity: 1; visibility: visible; }
.hb-me-sheet {
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 901;
    max-width: 480px; margin: 0 auto;
    background: #fff;
    border-radius: 16px 16px 0 0;
    max-height: 76vh;
    display: flex; flex-direction: column;
    transform: translateY(102%); visibility: hidden;
    transition: transform .26s ease, visibility .26s;
}
.hb-me-sheet.show { transform: translateY(0); visibility: visible; }
.hb-me-sheet-hd {
    display: flex; align-items: center; justify-content: space-between;
    padding: 16px 18px 10px;
    border-bottom: 1px solid #f2f2f2;
}
.hb-me-sheet-hd b { font-size: 16px; color: #1c1c1e; font-weight: 600; }
.hb-me-sheet-x { color: #b2afb8; font-size: 15px; padding: 0 2px; }
.hb-me-sheet-bd {
    padding: 14px 18px calc(20px + env(safe-area-inset-bottom, 0px));
    overflow-y: auto; -webkit-overflow-scrolling: touch;
}
.hb-me-p { font-size: 13.5px; color: #4a4a4a; line-height: 1.75; margin: 0 0 10px; }
.hb-me-p-dim { color: #9a9a9a; font-size: 12.5px; }
.hb-me-kv {
    display: flex; align-items: flex-start;
    padding: 9px 0; border-top: 1px solid #f5f5f5;
    font-size: 13px;
}
.hb-me-kv b { flex: 0 0 84px; margin-right: 10px; color: #07c160; font-weight: 500; }
.hb-me-kv span { flex: 1; color: #4a4a4a; line-height: 1.65; }
.hb-me-linkbox {
    margin: 12px 0 0; padding: 10px 12px;
    background: #f7f8fa; border-radius: 8px;
    font-size: 12.5px; color: #576b95;
    word-break: break-all; line-height: 1.6;
}
.hb-me-actrow { display: flex; margin-top: 16px; }
.hb-me-actrow > * + * { margin-left: 10px; }
.hb-me-btn {
    flex: 1; height: 44px; line-height: 44px; text-align: center;
    background: #07c160; color: #fff; border: 0; border-radius: 8px;
    font-size: 15.5px; font-family: inherit; padding: 0;
    -webkit-appearance: none;
}
.hb-me-btn:active { opacity: .85; }
.hb-me-btn-plain { background: #f2f2f2; color: #4a4a4a; }
.hb-me-btn-danger { background: #fa5151; }

/* ---------- 课表周次滚轮选择条 ---------- */
.kbc-weekbar {
    display: flex; align-items: center; justify-content: center;
    background: #fff; padding: 10px 0;
    border-bottom: 1px solid #EDEDED;
    font-size: 15px; color: #30293f; font-weight: 500;
    cursor: pointer; -webkit-tap-highlight-color: transparent;
}
.kbc-weekbar:active { background: #f5f5f5; }
.kbc-weekbar .now-badge {
    margin-left: 8px; font-size: 11px; font-weight: 400;
    color: #1aad19; border: 1px solid #1aad19; border-radius: 4px;
    padding: 0 5px; line-height: 16px;
}
.kbc-weekbar .arr { margin-left: 8px; color: #b2afb8; font-size: 10px; }

/* ---------- 课表右下角悬浮更新按钮 ---------- */
.hb-fab {
    position: fixed;
    right: 16px;
    bottom: calc(64px + env(safe-area-inset-bottom, 0px));
    width: 48px; height: 48px;
    border-radius: 50%;
    background: #fff;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.18);
    display: flex; align-items: center; justify-content: center;
    z-index: 400;
    -webkit-tap-highlight-color: transparent;
}
.hb-fab:active { background: #f0f0f0; }
.hb-fab img { width: 24px; height: 24px; display: block; }

/* ---------- 学业情况摘要（成绩页顶部） ---------- */
/* ---------- 学业情况摘要（成绩页顶部，边距与成绩卡 .grades 一致） ---------- */
.hb-xyqk {
    width: 90%;
    background: #fff; margin: 20px auto; border-radius: 15px;
    padding: 12px 10px; box-shadow: 0 1px 3px rgba(0,0,0,.06);
    box-sizing: border-box;
}
.hb-xyqk-row { display: flex; text-align: center; }
.hb-xyqk-item { flex: 1; }
.hb-xyqk-item b { display: block; font-size: 22px; color: #30293f; }
.hb-xyqk-item b.red { color: #fa5151; }
.hb-xyqk-item span { font-size: 11px; color: #8a8a8e; line-height: 1.4; display: inline-block; }
.hb-xyqk-line { font-size: 12px; color: #666; margin-top: 8px; line-height: 1.6; }
.hb-xyqk .red { color: #fa5151; }

/* ---------- 班级课表 ---------- */
.hb-bjkb-sec { font-size: 11px; color: #555; background: #f7f7f7; white-space: nowrap; }
.hb-bjkb-note { font-size: 11px; color: #8a8a8e; margin: 6px 10px 0; line-height: 1.6; }
.hb-bjkb-list .weui-cell__bd p.hb-sub { font-size: 12px; color: #b2afb8; margin-top: 2px; }

/* 悬浮按钮：返回（班级课表页左侧） */
.hb-fab-back { right: auto; left: 16px; }

/* 搜索框微调（微信端 weui-search-bar 基础样式来自 weui.min.css） */
.weui-search-bar { background: #fff; }
.weui-search-bar__label { max-height: 28px; }

/* （原「登录/更新页」的 .hb-bind-title / .hb-login-* 样式已并入上方「绑定页」段：
     标题改为系统字体、输入框改为卡片内字段行，270px 写死宽度改为自适应。
     这些类名只有绑定页用过，故直接移除，不再保留兼容定义。） */

.hb-btn-dark {
    display: block;
    width: 100%;
    height: 40px;
    line-height: 40px;
    border: none;
    border-radius: 4px;
    background: #414046;
    color: #fff;
    font-size: 15px;
    text-align: center;
    -webkit-tap-highlight-color: transparent;
}
.hb-btn-dark:active { background: #2e2d32; }
.weui-btn.hb-btn-dark { height: 44px; line-height: 44px; }
/* 后台文案里的行内链接色（协议链接等）。原 #7AE2DB 在白底上对比度约 1.7:1，
   远低于可读性底线，改为站点主色绿。 */
.hb-link-teal { color: #07c160; }

/* ---------- 空教室查询页头（老版还原） ---------- */
.hb-kjs-head { text-align: center; padding-top: 6px; }
.hb-kjs-gap { height: 14px; margin: 0; }
.hb-kjs-title {
    font-size: 25px;
    font-weight: 600;
    color: #303039;
    margin: 0 0 8px;
}
.hb-kjs-desc { font-size: 13px; color: #8a8a8e; margin: 0 0 4px; }
.hb-kjs-head + .page__bd .kbc-weekbar { margin-top: 12px; }

/* 空教室结果：教学楼分组标题（前置粗竖杠 + 可点击折叠） */
.hb-kjs-group {
    width: 90%;
    margin: 16px auto 8px;
    display: flex;
    align-items: center;
    cursor: pointer;
    user-select: none;
    -webkit-tap-highlight-color: transparent;
}
.hb-kjs-gbar {
    flex: none;
    width: 4px;
    height: 16px;
    border-radius: 2px;
    background: #07c160;
    margin-right: 8px;
}
.hb-kjs-gname { font-size: 15px; font-weight: 700; color: #303039; }
.hb-kjs-gnum { font-size: 12px; color: #07c160; margin-left: 8px; }
.hb-kjs-garrow {
    margin-left: auto;
    font-size: 11px;
    color: #b2afb8;
    transition: transform .2s ease;
}
.hb-kjs-group.collapsed .hb-kjs-garrow { transform: rotate(-90deg); }

/* 空教室结果：教室内网格（一行多个，省行数） */
.hb-kjs-rooms {
    width: 90%;
    margin: 0 auto 14px;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
    gap: 8px;
}
.hb-kjs-room {
    min-width: 0;
    background: #fff;
    border-radius: 8px;
    padding: 9px 12px;
}
.hb-kjs-room-name {
    display: block;
    font-size: 14px;
    font-weight: 500;
    color: #303039;
    white-space: nowrap;
    overflow: hidden;
}
.hb-kjs-room-meta {
    display: block;
    font-size: 11px;
    color: #b2afb8;
    margin-top: 2px;
    white-space: nowrap;
    overflow: hidden;
}

/* ---------- 班级课表：年级-学院-专业 三级联动选择条 ---------- */
.hb-pickers {
    width: 90%;
    margin: 15px auto 0;
    background: #fff;
    border-radius: 10px;
    overflow: hidden;
    box-shadow: 0 1px 3px rgba(0,0,0,.06);
}
.hb-picker-bar {
    border-bottom: 1px solid #EDEDED;
    padding: 12px 0;
    display: flex;
    justify-content: center;
}
.hb-picker-bar:last-child { border-bottom: none; }
.hb-picker-bar .hb-picker-label {
    color: #8a8a8e; font-size: 14px; font-weight: 400;
    margin-right: 14px;
}
.hb-picker-bar .hb-picker-val {
    color: #30293f; font-weight: 500;
    max-width: 200px;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* ---------- 班级课表：选择条与班级列表边距对齐 ---------- */
.hb-bjkb-count {
    width: 90%;
    margin: 18px auto 8px;
    text-align: center;
}
.hb-bjkb-list {
    width: 90%;
    margin: 0 auto 20px;
    border-radius: 10px;
    overflow: hidden;
    background: #fff;
}
.hb-bjkb-list .weui-cell:first-child::before { display: none; }

/* ---------- 考试安排：长文本（考试时间等）防溢出换行 ---------- */
.grades .table table tr td {
    overflow-wrap: anywhere;
    word-break: break-word;
}
.grades .table table { table-layout: fixed; }
.grades .table table td:first-child { width: 25%; }

/* ---------- 课表/成绩可点击条目 ---------- */
.hb-kb-click { cursor: pointer; }
.hb-cj-click { cursor: pointer; }
.hb-kb-click:active { filter: brightness(0.92); }

/* ---------- GPA 计算器 ---------- */
.hb-gpa-page {
    /* 底部固定结果条留白，防止页脚被遮挡 */
    padding-bottom: calc(78px + env(safe-area-inset-bottom, 0px));
}
.hb-gpa-termpick {
    width: 90%;
    margin: 14px auto 0;
    border: 1px solid #EDEDED;
    border-radius: 10px;
}
.hb-gpa-tip {
    width: 90%; margin: 8px auto 0;
    font-size: 12px; color: #999; text-align: center;
}
.hb-gpa-term {
    width: 90%;
    margin: 8px auto;
    background: #fff;
    border-radius: 10px;
    overflow: hidden;
}
.hb-gpa-term::before { display: none; }
.hb-gpa-term .weui-cell { padding: 12px 15px; }
/* 全部学期视图下每个学期的小标题 */
.hb-gpa-termname {
    padding: 9px 15px 5px;
    font-size: 12.5px;
    font-weight: 600;
    color: #07c160;
    background: #f8fdfa;
    border-bottom: 1px solid #f0f0f0;
}
.hb-gpa-term[style*="display: none"] .hb-gpa-termname { display: none; }
.hb-gpa-term .weui-cell::before { left: 15px; }
/* 类别快选 chips：可换行、不挤压 */
.hb-gpa-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    justify-content: center;
    width: 90%;
    margin: 12px auto 0;
}
.hb-gpa-chip {
    display: inline-block;
    padding: 5px 16px;
    font-size: 13px;
    line-height: 1.4;
    color: #1aad19;
    background: #fff;
    border: 1px solid #1aad19;
    border-radius: 16px;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}
.hb-gpa-chip:active { background: #eaf8ea; }
/* 全选/反选/清空 */
.hb-gpa-actions {
    display: flex;
    gap: 10px;
    justify-content: center;
    margin: 14px auto 0;
    width: 90%;
}
.hb-gpa-actions .weui-btn_mini { margin: 0; padding: 0 22px; }
/* 底部实时结果条 */
.hb-gpa-bar {
    position: fixed;
    left: 0; right: 0;
    bottom: 0;
    max-width: 480px;
    margin: 0 auto;
    background: #fff;
    border-top: 1px solid #EDEDED;
    box-shadow: 0 -2px 8px rgba(0,0,0,.04);
    display: flex;
    padding: 8px 0 calc(8px + env(safe-area-inset-bottom, 0px));
    z-index: 500;
}
.hb-gpa-bar-item { flex: 1; text-align: center; }
.hb-gpa-bar-item b { display: block; font-size: 20px; color: #1aad19; }
.hb-gpa-bar-item span { font-size: 11px; color: #999; }

/* ---------- 冲突课多卡槽（每门课独立色块 + ≡N 角标） ---------- */
.kbc-wrap table td.kbc-slot {
    position: relative;
    padding: 2px;
    background: #fff !important;
}
.kbc-slot .kbc-card {
    box-sizing: border-box;
    border-radius: 6px;
    padding: 5px 3px;
    font-size: 12px;
    line-height: 1.4;
    color: #fff;
    margin-bottom: 2px;
    word-break: break-all;
}
.kbc-slot .kbc-card:last-of-type { margin-bottom: 0; }

/* 冲突多课：卡片装进绝对定位容器铺满格子，内容不再参与行高计算，
   表格行高恒定一致（此前多门课堆叠会把跨的行撑高导致行距不齐） */
.kbc-slot-box {
    position: absolute;
    left: 2px; right: 2px; top: 2px; bottom: 2px;
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.kbc-slot-box .kbc-card {
    flex: 1 1 0;          /* 单卡撑满整格，多卡等分高度 */
    min-height: 0;        /* 允许压缩到格子高度以内 */
    margin-bottom: 0;     /* 间距交给容器 gap */
    overflow: hidden;
}

/* 自定义课程色块：虚线描边 + 右上「自」角标，与教务课程区分 */
.kbc-slot .kbc-card.kbc-custom { position: relative; }
.kbc-slot .kbc-card.kbc-custom::after {
    content: ''; position: absolute; left: 0; top: 0; right: 0; bottom: 0;
    border-radius: 6px; border: 1px dashed rgba(255, 255, 255, .9);
    pointer-events: none;
}
.kbc-cust-tag {
    position: absolute; top: 2px; right: 3px;
    font-style: normal; font-size: 8px; line-height: 1;
    color: #fff; opacity: .85; padding: 1px 2px;
    border: 1px solid rgba(255, 255, 255, .85); border-radius: 3px;
}
.kbc-slot .kbc-badge {
    position: absolute;
    right: 4px; bottom: 4px;
    background: rgba(255, 255, 255, .92);
    color: #666;
    border-radius: 9px;
    font-size: 10px;
    padding: 0 6px;
    line-height: 17px;
    box-shadow: 0 1px 3px rgba(0, 0, 0, .12);
}

/* ---------- 新生课表：水印层（覆盖课表区域，不拦截点击） ---------- */
/* 周次条中的班级名（班级课表 / 新生课表共用）：加粗 + 与周次文字留间距 */
.hb-bjkb-classname {
    font-weight: 600;
    margin-right: 10px;
    max-width: 55%;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.kbc-wm-host { position: relative; overflow: hidden; }
.kbc-wm {
    position: absolute;
    left: -30%; top: -12%;
    width: 160%; height: 135%;
    display: flex; flex-wrap: wrap; align-content: flex-start;
    transform: rotate(-22deg);
    transform-origin: center center;
    pointer-events: none;
    z-index: 5;
    user-select: none;
}
.kbc-wm span {
    display: block;
    width: 46%;
    padding: 24px 0;
    text-align: center;
    font-size: 15px;
    font-weight: 700;
    letter-spacing: 2px;
    color: #07c160;
    opacity: .09;
    white-space: nowrap;
}

/* ---------- 新生课表：底部预览提示 / 年级固定行 ---------- */
.hb-xskb-tip {
    width: 90%;
    margin: 16px auto 0;
    padding: 11px 14px;
    box-sizing: border-box;
    background: #FFF9E8;
    border: 1px solid #FFE7A6;
    border-radius: 10px;
    color: #8a6a2f;
    font-size: 13px;
    line-height: 1.65;
}
.hb-xskb-grade { cursor: default; }
.hb-xskb-grade:active { background: transparent; }

/* ---------- 培养方案 ---------- */
.hb-pyfa-sum {
    width: 90%;
    margin: 12px auto 0;
    padding: 14px 10px;
    box-sizing: border-box;
    background: #fff;
    border-radius: 12px;
    box-shadow: 0 1px 3px rgba(0, 0, 0, .06);
    display: flex;
}
.hb-pyfa-sum-item { flex: 1; text-align: center; }
.hb-pyfa-sum-item b {
    display: block;
    font-size: 21px;
    font-weight: 600;
    color: #07c160;
    line-height: 1.25;
}
.hb-pyfa-sum-item span { font-size: 11px; color: #8a8a8e; }

.hb-pyfa-tip {
    width: 90%;
    margin: 12px auto 0;
    padding: 10px 13px;
    box-sizing: border-box;
    background: #F2FBF5;
    border: 1px solid #CBEBD6;
    border-radius: 10px;
    color: #3d8a5c;
    font-size: 12px;
    line-height: 1.6;
}

.hb-pyfa-list {
    width: 90%;
    margin: 0 auto 16px;
    background: #fff;
    border-radius: 10px;
    overflow: hidden;
}
.hb-pyfa-item { padding: 11px 14px; border-bottom: 1px solid #F2F2F5; }
.hb-pyfa-item:last-child { border-bottom: none; }
.hb-pyfa-name {
    font-size: 15px;
    font-weight: 500;
    color: #303039;
    white-space: nowrap;
    overflow: hidden;
}
.hb-pyfa-meta {
    margin-top: 3px;
    display: flex;
    align-items: center;
    font-size: 11px;
    color: #b2afb8;
}
.hb-pyfa-kch { margin-right: 10px; }
.hb-pyfa-xf { margin-right: 10px; }
.hb-pyfa-type {
    margin-left: auto;
    padding: 0 6px;
    font-size: 10px;
    line-height: 16px;
    color: #07c160;
    border: 1px solid #B7E6C8;
    border-radius: 8px;
}
.hb-pyfa-foot {
    margin: 2px 0 72px;
    text-align: center;
    font-size: 12px;
    color: #b2afb8;
}

/* ---------- 失物招领 ---------- */
.hb-swzl-notice {
    display: flex; align-items: center; gap: 8px;
    margin: 0 0 10px; padding: 10px 12px;
    background: #EAF3DE; border-radius: 12px;
    font-size: 13px; color: #27500A; text-decoration: none;
}
.hb-swzl-notice-static { margin: 0 0 6px; }
.hb-swzl-notice-dot {
    width: 8px; height: 8px; border-radius: 50%;
    background: #e24b4a; flex: 0 0 auto;
    animation: hbSwzlPulse 1.2s infinite;
}
@keyframes hbSwzlPulse { 50% { opacity: .35; } }
.hb-swzl-notice-txt { flex: 1; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.hb-swzl-notice-go {
    color: #fff; background: #07c160; border: 0;
    border-radius: 10px; padding: 2px 10px; font-size: 12px;
    font-family: inherit;
}
.hb-swzl-cats {
    display: flex; gap: 8px; overflow-x: auto;
    padding: 2px 0 10px; -webkit-overflow-scrolling: touch;
}
.hb-swzl-cat {
    flex: 0 0 auto; padding: 4px 12px;
    font-size: 12px; color: #576b95; background: #f6f7f9;
    border-radius: 14px; text-decoration: none;
}
.hb-swzl-cat.on { color: #fff; background: #07c160; }
.hb-swzl-card {
    display: flex; align-items: flex-start; flex-wrap: wrap;
    margin-bottom: 10px; padding: 13px 14px;
    background: #fff; border-radius: 12px; text-decoration: none;
}
.hb-swzl-card-main { flex: 1; min-width: 0; }
/* 列表缩略图：240px 低清图以 CSS 背景图渲染 —— 不能点开放大，
   微信长按也不会出现「保存图片」（img 标签才会有）。
   pointer-events:none 让点击穿透到整张卡片，整卡仍可点进详情。 */
.hb-swzl-card-thumb {
    flex: 0 0 auto; width: 58px; height: 58px; margin-right: 11px;
    border-radius: 9px; background: #f2f3f5 center / cover no-repeat;
    pointer-events: none;
    -webkit-user-select: none; user-select: none;
    -webkit-touch-callout: none;
}
.hb-swzl-card-thumb.is-empty {
    display: flex; align-items: center; justify-content: center;
    color: #c6c6cc;
}
/* 「仅失主 2024**645 可见」里的打码号：轻描一下，便于失主一眼扫到 */
.hb-swzl-owner-hint { font-weight: 600; color: #9a97a1; }
.hb-swzl-card-title {
    font-size: 15px; color: #1f1f1f; font-weight: 500;
    display: flex; align-items: center; gap: 6px;
}
.hb-swzl-badge {
    flex: 0 0 auto; font-size: 10px; line-height: 16px;
    padding: 0 6px; color: #07c160;
    border: 1px solid #B7E6C8; border-radius: 8px; font-weight: 400;
}

/* 详情页「管理员补录」小标（跟在拾得者姓名后） */
.hb-swzl-admin-tag {
    display: inline-block; font-size: 10px; line-height: 16px;
    padding: 0 6px; margin-left: 4px; vertical-align: 1px;
    color: #576b95; border: 1px solid #c3d0e0; border-radius: 8px;
}
/* 已认领：整体降饱和，一眼区分于在架招领 */
.hb-swzl-card.is-claimed { opacity: .62; }
.hb-swzl-badge.is-claimed { color: #8a8a8a; border-color: #d9d9d9; background: #f6f6f6; }
.hb-swzl-card.is-claimed .hb-swzl-card-title { color: #666; }
.hb-swzl-card-meta { margin-top: 5px; font-size: 12px; color: #888; display: flex; gap: 8px; flex-wrap: wrap; }
/* 「拾到」行独占一行（flex-basis 100% 换行）：从缩略图底部起、与缩略图左缘对齐 */
.hb-swzl-card-sub { flex: 0 0 100%; margin-top: 4px; font-size: 11px; color: #b2afb8; }
.hb-swzl-card-arrow { margin-left: 8px; color: #c8c8c8; font-size: 20px; align-self: center; }
.hb-swzl-pager {
    display: flex; justify-content: center; align-items: center; gap: 14px;
    padding: 8px 0 4px; font-size: 13px; color: #888;
}
.hb-swzl-pager a { color: #576b95; text-decoration: none; }
.hb-swzl-guide { margin: 14px 0 0; padding: 14px; background: #fff; border-radius: 12px; text-align: center; }
.hb-swzl-guide-title { margin: 0; font-size: 14px; color: #1f1f1f; font-weight: 500; }
.hb-swzl-guide-desc { margin: 6px 0 10px; font-size: 12px; color: #888; }
.hb-swzl-guide-btn {
    display: inline-block; padding: 6px 18px;
    border: 1px solid #07c160; color: #07c160;
    border-radius: 16px; font-size: 13px; text-decoration: none;
}
.hb-swzl-privacy { margin: 10px 2px 0; font-size: 11px; color: #b2afb8; text-align: center; }
/* 失主匹配结果条（详情页 · 发布者可见）：ok 已推送 / wait 命中未绑定 / none 未命中 */
.hb-swzl-match {
    display: flex; align-items: flex-start; gap: 8px;
    margin: 10px 0; padding: 12px 14px;
    border-radius: 12px; font-size: 13px; line-height: 1.5;
}
.hb-swzl-match-ico {
    flex: 0 0 auto; width: 18px; height: 18px; margin-top: 1px;
    border-radius: 50%; font-size: 12px; line-height: 18px; text-align: center;
    color: #fff; font-weight: 600;
}
.hb-swzl-match-ok { background: #eafaf1; color: #14875a; border: 1px solid #c6ecd8; }
.hb-swzl-match-ok .hb-swzl-match-ico { background: #07c160; }
.hb-swzl-match-wait { background: #fff8e6; color: #a8730a; border: 1px solid #ffe3a3; }
.hb-swzl-match-wait .hb-swzl-match-ico { background: #f0a020; }
.hb-swzl-match-none { background: #f4f5f7; color: #606266; border: 1px solid #e5e6eb; }
.hb-swzl-match-none .hb-swzl-match-ico { background: #9aa0a6; }
.hb-swzl-match-go {
    display: inline-block; margin-left: 4px; padding: 0 8px;
    font-size: 12px; line-height: 20px; border-radius: 10px;
    color: #fff; background: #07c160; text-decoration: none;
}
.hb-swzl-preview {
    width: 100%; max-height: 260px; object-fit: contain;
    border-radius: 10px; background: #f6f7f9; display: block;
}
.hb-swzl-upload-box {
    padding: 26px 10px; text-align: center;
    color: #888; font-size: 13px;
    border: 1px dashed #d5d5d5; border-radius: 10px;
}
.hb-swzl-upload-box p { margin: 2px 0; }
.hb-swzl-upload-hint { font-size: 11px; color: #b2afb8; }
.hb-swzl-ai-badge {
    display: inline-block; margin-right: 6px;
    padding: 0 8px; font-size: 10px; line-height: 18px;
    color: #fff; background: #07c160; border-radius: 9px;
}
.hb-swzl-ai-result { font-size: 13px; color: #333; line-height: 1.5; }
.hb-swzl-ai-result.warn { color: #e24b4a; }
.hb-swzl-ai-ok { color: #07c160; }
.hb-swzl-ai-warn { color: #e24b4a; }
.hb-swzl-ai-loading { color: #888; }
.hb-swzl-d-title {
    font-size: 16px; color: #1f1f1f; font-weight: 500;
    display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
}
.hb-swzl-d-state { font-size: 10px; line-height: 16px; padding: 0 6px; border-radius: 8px; }
.hb-swzl-d-state.st1 { color: #07c160; border: 1px solid #B7E6C8; }
.hb-swzl-d-state.st0 { color: #888; border: 1px solid #d5d5d5; }
.hb-swzl-d-state.st2 { color: #b2afb8; background: #f0f0f0; border: 1px solid #f0f0f0; }
.hb-swzl-photo-wrap { margin: 10px 0; text-align: center; background: #fff; border-radius: 12px; padding: 10px; }
.hb-swzl-photo { max-width: 100%; max-height: 420px; border-radius: 8px; }
.hb-swzl-photo-tip { margin: 6px 0 0; font-size: 11px; color: #b2afb8; }
.hb-swzl-d-desc { white-space: pre-wrap; word-break: break-all; }
.hb-swzl-contact { color: #1f1f1f; font-size: 16px; letter-spacing: .5px; }
.hb-swzl-empty { padding: 18px 16px; font-size: 13px; color: #888; background: #fff; border-radius: 12px; }
.hb-swzl-empty a { color: #576b95; }
.hb-swzl-unread { color: #1f1f1f; font-weight: 500; }
.hb-swzl-notify-body { margin-top: 2px; font-size: 12px; color: #b2afb8; }
.hb-swzl-back { display: block; margin: 16px 0 0; text-align: center; font-size: 13px; color: #576b95; text-decoration: none; }
.hb-fab.hb-fab-pill {
    width: auto; padding: 0 14px; border-radius: 24px;
    font-size: 13px; color: #07c160; font-weight: 500; gap: 3px;
    text-decoration: none;
}
.hb-fab-ico { font-size: 16px; line-height: 1; }

/* 课表页：自定义课程入口（悬在更新按钮上方，避免遮挡表格） */
.hb-fab.hb-fab-custom {
    bottom: calc(122px + env(safe-area-inset-bottom, 0px));
    color: #07c160; font-weight: 600;
}
.hb-fab.hb-fab-custom em {
    font-style: normal; font-size: 11px; font-weight: 400;
    line-height: 15px; padding: 0 5px; margin-left: 4px;
    background: #07c160; color: #fff; border-radius: 9px;
}
/* 课表页：明日课程推送入口（悬在「自定」上方） */
.hb-fab.hb-fab-push {
    bottom: calc(178px + env(safe-area-inset-bottom, 0px));
    color: #07c160; font-weight: 600;
}
/* 课表页三按钮统一图标：线性绿 SVG（风格对齐 icons/*.svg：#07c160 / 2.8 粗 / 圆角），
   22px 等大、6px 图文间距；hb-fab-kb 只挂课表页三按钮，不影响 swzl「发布招领」 */
.hb-fab-svg { display: block; }
.hb-fab.hb-fab-kb { gap: 6px; }
.hb-fab.hb-fab-kb .hb-fab-svg { width: 22px; height: 22px; }
.hb-swzl-cats { scrollbar-width: none; }
.hb-swzl-cats::-webkit-scrollbar { display: none; }

/* ---------- 失物招领 · 页面边距与细节打磨（.hb-swzl-page 仅作用于 swzl 视图） ---------- */
/* 页面统一左右留白；底部留出悬浮「发布招领」按钮高度 */
.hb-swzl-page { padding: 2px 14px calc(88px + env(safe-area-inset-bottom, 0px)); }

/* 卡片式分组：与列表卡同圆角 + 轻投影，隐藏 WeUI 通栏 hairline */
.hb-swzl-page .weui-cells {
    margin-top: 10px;
    border-radius: 12px;
    box-shadow: 0 1px 3px rgba(0, 0, 0, .05);
}
.hb-swzl-page .weui-cells:before,
.hb-swzl-page .weui-cells:after { display: none; }

/* 分组小标题与卡内文字左缘对齐（页面已内缩 14px，标题去掉 WeUI 自带的 16px 通栏对位） */
.hb-swzl-page .weui-cells__title { padding-left: 2px; }

/* 列表卡：稍收紧上下、轻投影、按压反馈 */
.hb-swzl-card,
.hb-swzl-empty,
.hb-swzl-photo-wrap { box-shadow: 0 1px 3px rgba(0, 0, 0, .05); }
.hb-swzl-card { padding: 14px 15px; }
.hb-swzl-card:active { background: #f7f7f7; }

/* 提醒条：页面内缩后顶部留一点呼吸感 */
.hb-swzl-page .hb-swzl-notice { margin-top: 6px; }

/* 表单内的分类胶囊去掉列表页专用的 10px 底距 */
.hb-swzl-page .weui-cell .hb-swzl-cats { padding: 2px 0 0; }
.hb-swzl-cat { padding: 5px 14px; }
.hb-swzl-page .hb-swzl-cats { padding: 4px 2px 10px; }

/* 引导块与隐私小字 */
/* 引导块现固定排在列表最前（分类筛选之下、卡片之上），故用下边距与卡片对齐 */
.hb-swzl-guide { margin: 0 0 10px; padding: 16px 14px; }
.hb-swzl-guide-desc { line-height: 1.6; }
.hb-swzl-guide-btn:active { background: #07c160; color: #fff; }
.hb-swzl-privacy { margin: 12px 4px 0; line-height: 1.6; }

/* 详情页操作按钮：抵消 WeUI btn-area 的 15px 水平外距（页面已内缩）；
   WeUI 的 .weui-btn 基础样式是「width:184px + 左右 auto」的居中胶囊，
   宽度会比上下卡片窄一截 —— 这里拉满，使按钮与卡片左右完全对齐 */
.hb-swzl-page .hb-swzl-btn-area { margin: 16px 0 0; }
.hb-swzl-page .hb-swzl-btn-area .weui-btn { width: 100%; margin-left: 0; margin-right: 0; }
.hb-swzl-page .hb-swzl-btn-area .weui-btn + .weui-btn { margin-top: 10px; }

/* 发布按钮与返回链接 */
.hb-swzl-page .hb-swzl-submit { margin-top: 20px; }
.hb-swzl-back { margin-top: 20px; padding: 6px 0; }

/* 分页 */
.hb-swzl-pager { padding: 12px 0 2px; }

/* 我的页：空态块与提醒列表的间距 */
.hb-swzl-page .hb-swzl-empty { margin-top: 10px; }
.hb-swzl-page .hb-swzl-notify-body { line-height: 1.5; }

/* ---------- 绑定页：提交中状态 ---------- */
.hb-bind-loading {
    margin: 10px 0 0; text-align: center;
    font-size: 12px; color: #8a8a8e; line-height: 1.6;
}

/* ---------- 成绩/GPA：旧数据兜底提示（教务暂时不可用时展示上次缓存） ---------- */
.hb-cache-stale {
    width: 90%; margin: 8px auto 0; padding: 8px 12px;
    background: #FFF7E6; border: 1px solid #FFE0A3; border-radius: 8px;
    font-size: 12px; line-height: 1.5; color: #8a6d3b;
}
.hb-cache-stale b { color: #a8641a; font-weight: 500; }
.hb-cache-foot {
    width: 90%; margin: 14px auto 6px; text-align: center;
    font-size: 12px; line-height: 1.6; color: #b2afb8;
}
.hb-cache-foot a { color: #576b95; text-decoration: none; }

/* ---------- 全局「更新中」遮罩（点更新按钮 → 跳转重抓教务数据期间显示） ---------- */
.hb-updating {
    position: fixed;
    top: 0; right: 0; bottom: 0; left: 0;
    z-index: 999;
    display: none;
    align-items: center;
    justify-content: center;
    background: rgba(255, 255, 255, .95);
}
.hb-updating.show { display: flex; }
.hb-updating-box { text-align: center; padding: 0 40px; }
.hb-updating .weui-loading {
    width: 34px;
    height: 34px;
    margin: 0 auto;
    display: block;
}
.hb-updating-t {
    margin-top: 14px;
    font-size: 16px;
    font-weight: 500;
    color: #30293f;
}
.hb-updating-s {
    margin-top: 6px;
    font-size: 12.5px;
    line-height: 1.6;
    color: #b2afb8;
}

/* ---------- 我的 OpenID（诊断页） ---------- */
.hb-openid-page { padding-bottom: 28px; }
.hb-openid-hero {
    background: #fff;
    padding: 26px 20px 24px;
    text-align: center;
    border-bottom: 1px solid #ececec;
}
.hb-openid-hero-t { margin: 0; font-size: 17px; font-weight: 600; color: #30293f; }
.hb-openid-hero-s { margin: 6px 0 0; font-size: 12.5px; color: #b2afb8; }
.hb-openid-code {
    margin: 18px auto 0;
    padding: 12px 14px;
    background: #f7f7f7;
    border-radius: 8px;
    font-family: ui-monospace, Menlo, Consolas, monospace;
    font-size: 14px;
    line-height: 1.55;
    color: #30293f;
    word-break: break-all;
    user-select: all;
}
.hb-openid-code-empty { color: #b2afb8; }
.hb-openid-copy {
    margin-top: 14px;
    display: inline-block;
    padding: 9px 28px;
    font-size: 14px;
    color: #fff;
    background: #07c160;
    border: none;
    border-radius: 22px;
}
.hb-openid-copy:active { opacity: .85; }
.hb-openid-avatar {
    display: block;
    width: 40px;
    height: 40px;
    margin-right: 12px;
    border-radius: 50%;
    background: #f2f2f2;
    object-fit: cover;
}
.hb-openid-tag {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 4px;
    font-size: 12px;
}
.hb-openid-tag-ok   { color: #06ae56; background: rgba(6, 174, 86, .1); }
.hb-openid-tag-warn { color: #fa9d3b; background: rgba(250, 157, 59, .1); }
.hb-openid-tag-bad  { color: #fa5151; background: rgba(250, 81, 81, .1); }
.hb-openid-tag-dim  { color: rgba(0, 0, 0, .4); background: rgba(0, 0, 0, .05); }
.hb-openid-muted { color: #b2afb8; }
.hb-openid-note { margin: 16px 16px 0; font-size: 12.5px; line-height: 1.7; color: #888; }
.hb-openid-note-dim { color: #b2afb8; }
.hb-openid-acts { margin: 22px 16px 0; }
.hb-openid-btn {
    display: block;
    padding: 12px 0;
    text-align: center;
    font-size: 15px;
    color: #07c160;
    background: #fff;
    border-radius: 8px;
    text-decoration: none;
}
.hb-openid-btn:active { background: #f7f7f7; }
.hb-openid-fullbox { margin-top: 12px; padding: 0 16px; }
.hb-openid-btn-plain { margin-top: 0; font-size: 14.5px; padding: 11px 0; }
.hb-openid-fullmsg { margin: 0 0 8px; font-size: 12.5px; line-height: 1.6; color: #fa5151; }
.hb-openid-fullmsg-ok { color: #06ae56; }
.hb-openid-hint { margin: 8px 0 0; font-size: 12px; line-height: 1.6; color: #b2afb8; }

/* ---------- 明日课程提醒（r=remind）---------- */
.hb-remind-hero {
    margin: 14px 16px 4px;
    padding: 18px 16px;
    border-radius: 14px;
    background: linear-gradient(135deg, #e8f8ee, #f2fbf5);
}
.hb-remind-hero-t { margin: 0; font-size: 19px; font-weight: 700; color: #1aad19; }
.hb-remind-hero-s { margin: 6px 0 0; font-size: 12.5px; color: #6b8f77; }
.hb-remind-course { margin: 6px 0 0; font-size: 13px; color: #576b95; }
.hb-remind-opt-t { margin: 0; font-size: 16px; }
.hb-remind-opt-d { margin: 3px 0 0; font-size: 12px; color: #b2afb8; }
/* 选中行兜底高亮（.is-on 由页面脚本维护） */
.hb-remind-opt.is-on .hb-remind-opt-t { color: #1aad19; font-weight: 600; }
.hb-remind-opt.is-on .hb-remind-opt-d { color: #7cae8c; }
.hb-remind-opt.is-on { background: #f4fbf6; }
.hb-remind-opt.is-on .hb-remind-opt-t::before {
    content: ""; display: inline-block; width: 6px; height: 6px; margin-right: 7px;
    border-radius: 50%; background: #1aad19; vertical-align: 3px;
}
.hb-remind-save { margin: 22px 16px 0; }
/* 后台全局关闭时的提示条（设置保留，仅暂停下发） */
.hb-remind-off {
    margin: 10px 16px 0;
    padding: 10px 12px;
    border: 1px solid #ffe2a8;
    border-radius: 10px;
    background: #fff8e6;
    color: #8a6100;
    font-size: 12.5px;
    line-height: 1.7;
}
.hb-remind-save .weui-btn_mini { width: auto; }
.hb-remind-faq-q { margin: 0; font-size: 14.5px; font-weight: 600; color: #1f1f1f; }
.hb-remind-faq-a { margin: 6px 0 0; font-size: 12.5px; line-height: 1.7; color: #888; }
.hb-remind-back { margin: 24px 0 30px; text-align: center; }
.hb-remind-back .weui-btn_mini { width: auto; padding: 0 1.6em; }

/* ---------- 学霸排行榜（r=top）---------- */
.hb-top-page { padding-bottom: 30px; }

/* 头部 */
.hb-top-hero {
    margin: 14px 16px 4px;
    padding: 18px 16px;
    border-radius: 14px;
    background: linear-gradient(135deg, #e8f8ee, #f2fbf5);
}
.hb-top-hero-t { margin: 0; font-size: 19px; font-weight: 700; color: #1aad19; }
.hb-top-hero-s { margin: 6px 0 0; font-size: 12.5px; line-height: 1.5; color: #6b8f77; }

/* 榜别切换（学院榜 / 专业榜） */
.hb-top-tabs { display: flex; margin: 14px 16px 0; padding: 4px; background: #fff; border-radius: 12px; }
.hb-top-tab { flex: 1; padding: 8px 0; text-align: center; border-radius: 9px; }
.hb-top-tab-t { display: block; font-size: 15px; font-weight: 500; color: #4a4a4a; }
.hb-top-tab-n { display: block; margin-top: 2px; font-size: 11px; color: #b2afb8; }
.hb-top-tab.is-on { background: #f4fbf6; }
.hb-top-tab.is-on .hb-top-tab-t { color: #1aad19; font-weight: 600; }
.hb-top-tab.is-on .hb-top-tab-n { color: #7cae8c; }

/* 榜单范围 */
.hb-top-scope { margin: 16px 16px 8px; }
.hb-top-scope-t { font-size: 15px; font-weight: 600; color: #30293f; }
.hb-top-scope-s { margin-left: 8px; font-size: 12px; color: #b2afb8; }

/* 空态（本榜还没有同学参与 / 学籍信息不全）：.weui-msg 默认按整页提示设计
   （通栏白底、padding-top 48px、无下边距、无圆角），内嵌时收成与 .hb-top-list 一致的白卡片 */
.hb-top-page .weui-msg {
    min-height: 0;
    margin: 4px 16px 0;
    padding: 10px 0 30px;
    border-radius: 12px;
}
.hb-top-page .weui-msg__icon-area { margin-bottom: 14px; }
.hb-top-page .weui-msg__text-area { margin-bottom: 0; padding: 0 28px; }
.hb-top-page .weui-msg__title { font-size: 18px; }
.hb-top-page .weui-msg__desc { margin-bottom: 0; font-size: 14px; line-height: 1.7; }
.hb-top-page .weui-msg__opr-area { margin-top: 18px; }
.hb-top-page .weui-msg__opr-area .weui-btn { margin: 0 28px; width: auto; }


/* 榜单列表 */
.hb-top-list { margin: 0 16px; background: #fff; border-radius: 12px; overflow: hidden; }
.hb-top-row { display: flex; align-items: center; padding: 10px 12px; border-bottom: 1px solid #f2f0f0; }
.hb-top-row:last-child { border-bottom: none; }
.hb-top-row.is-me { background: #f4fbf6; }
.hb-top-rank {
    flex: 0 0 28px; text-align: center; font-size: 15px; font-weight: 700;
    color: #b2afb8; letter-spacing: -0.5px;
}
.hb-top-rank.r1 { color: #f0a020; font-size: 20px; }
.hb-top-rank.r2 { color: #9aa7b4; font-size: 19px; }
.hb-top-rank.r3 { color: #cf8b52; font-size: 18px; }
/* 尺寸 / 圆角 / 底色由 avatar_html()（.hb-ava）内联下发，这里只保留定位 */
.hb-top-av {
    flex: 0 0 auto; margin: 0 12px;
}
.hb-top-bd { flex: 1; min-width: 0; }
.hb-top-name { margin: 0; font-size: 15px; font-weight: 500; color: #30293f; }
.hb-top-metag {
    display: inline-block; margin-left: 6px; padding: 0 5px; border-radius: 4px;
    font-size: 10px; line-height: 15px; color: #fff; background: #1aad19; vertical-align: 2px;
}
.hb-top-nick {
    margin: 3px 0 0; font-size: 12px; color: #b2afb8;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.hb-top-gpa { flex: 0 0 auto; margin-left: 8px; text-align: right; }
.hb-top-gpa b { display: block; font-size: 17px; font-weight: 700; color: #1aad19; }
.hb-top-gpa span { display: block; font-size: 10px; color: #b2afb8; }
.hb-top-more { margin: 10px 16px 0; font-size: 12px; text-align: center; color: #b2afb8; }

/* 我的排名 / 参与设置 */
.hb-top-mine { margin: 0 16px; background: #fff; border-radius: 12px; overflow: hidden; }
.hb-top-mine-hd { display: flex; align-items: center; padding: 14px 12px; }
.hb-top-mine-hd .hb-top-av { margin-left: 0; }
.hb-top-mine-bd { flex: 1; min-width: 0; }
.hb-top-mine-t { margin: 0; font-size: 15px; color: #30293f; }
.hb-top-mine-t b { color: #1aad19; }
.hb-top-mine-s { margin: 5px 0 0; font-size: 12px; line-height: 1.6; color: #b2afb8; }
.hb-top-mine-s b { color: #1aad19; }
.hb-top-dot { margin: 0 4px; color: #d8d5d5; }
.hb-top-link { color: #576b95; }
.hb-top-join { width: auto; margin: 0 12px 14px; }
.hb-top-set .weui-cells { margin-top: 0; }
.hb-top-cell-s { margin: 3px 0 0; font-size: 12px; color: #b2afb8; }
.hb-top-save { margin: 18px 16px 0; }

/* 说明与页脚 */
/* 「你需要知道」FAQ：.weui-cells 默认通栏白底 + 直角，收成与榜单卡片一致的圆角白卡
   （只作用于本块，页面内「我的排名-参与设置」的 weui-cells 不受影响） */
.hb-top-faq {
    margin: 0 16px;
    border-radius: 12px;
    font-size: 14px;
}
.hb-top-faq:before,
.hb-top-faq:after { display: none; }
.hb-top-faq .weui-cell { padding: 12px 14px; }
.hb-top-faq .weui-cell:last-child:after { display: none; }
.hb-top-faq-q { margin: 0; font-size: 14.5px; font-weight: 600; color: #1f1f1f; }
.hb-top-faq-a { margin: 6px 0 0; font-size: 12.5px; line-height: 1.7; color: #888; }
.hb-top-foot { margin: 24px 0 30px; text-align: center; }
.hb-top-foot .weui-btn_mini { width: auto; padding: 0 1.6em; }

/* ---------- 自定义课程（个人课表补充，r=kbcustom）---------- */
.hb-cc-page { padding-bottom: 34px; }
.hb-cc-head { background: #fff; padding: 16px 16px 14px; border-bottom: 1px solid #EDEDED; }
.hb-cc-head h1 { margin: 0 0 6px; font-size: 18px; font-weight: 600; color: #30293f; }
.hb-cc-head p { margin: 0; font-size: 12.5px; line-height: 1.6; color: #8a8a8a; }
.hb-cc-head b { color: #1aad19; font-weight: 600; }

/* 校验错误 */
.hb-cc-errors {
    margin: 12px 16px 0; padding: 10px 12px;
    background: #FFF1F0; border: 1px solid #FFD5D2; border-radius: 8px;
    font-size: 12.5px; line-height: 1.6; color: #c33;
}
.hb-cc-errors p { margin: 0; }

/* 可点选择行 */
.hb-cc-pick { cursor: pointer; -webkit-tap-highlight-color: transparent; }
.hb-cc-pick:active { background: #f7f7f7; }
.hb-cc-val { font-size: 15px; color: #1f1d25; }
.hb-cc-caret { font-size: 13px; color: #b2afb8; }
.hb-cc-tip { margin: 6px 16px 0; font-size: 12px; line-height: 1.6; color: #b2afb8; }

/* 周次多选 */
.hb-cc-quick { display: flex; gap: 8px; margin-bottom: 10px; }
.hb-cc-quick a {
    padding: 4px 12px; border-radius: 999px; background: #f4f5f7;
    border: 1px solid #e8e8e8; color: #576b95; font-size: 12.5px; text-decoration: none;
}
.hb-cc-quick a:active { background: #ececec; }
.hb-cc-weeks { display: flex; flex-wrap: wrap; gap: 8px; }
.hb-cc-w {
    width: 38px; height: 34px; line-height: 34px; text-align: center;
    border-radius: 8px; background: #f4f5f7; border: 1px solid #e8e8e8;
    color: #5a5a5a; font-size: 13px; text-decoration: none;
    -webkit-tap-highlight-color: transparent;
}
.hb-cc-w.on { background: #07c160; border-color: #07c160; color: #fff; font-weight: 600; }
.hb-cc-weeks-hint { margin: 10px 0 0; font-size: 11.5px; line-height: 1.6; color: #b2afb8; }

/* 提交区 */
.hb-cc-submit { margin: 22px 16px 0; }
.hb-cc-submit .weui-btn + .weui-btn { margin-top: 10px; }

/* 已有课程列表 */
.hb-cc-empty {
    margin: 0 16px; padding: 16px; background: #fff; border-radius: 12px;
    font-size: 12.5px; line-height: 1.7; color: #b2afb8;
}
.hb-cc-list { margin: 0 16px; background: #fff; border-radius: 12px; overflow: hidden; }
.hb-cc-item { display: flex; align-items: center; padding: 12px; border-bottom: 1px solid #f2f0f0; }
.hb-cc-item:last-child { border-bottom: none; }
.hb-cc-item.is-edit { background: #f4fbf6; }
.hb-cc-item-bd { flex: 1; min-width: 0; }
.hb-cc-item-t { margin: 0; font-size: 15px; font-weight: 500; color: #30293f; }
.hb-cc-item-tag {
    display: inline-block; margin-left: 6px; padding: 0 5px; line-height: 15px;
    font-size: 10px; font-weight: 400; color: #1aad19;
    background: #ebf9ef; border-radius: 4px; vertical-align: 2px;
}
.hb-cc-item-s { margin: 4px 0 0; font-size: 12px; line-height: 1.5; color: #8a8a8a; word-break: break-all; }
.hb-cc-item-op { flex: 0 0 auto; display: flex; align-items: center; gap: 4px; }
.hb-cc-item-op form { margin: 0; }
.hb-cc-op {
    display: inline-block; padding: 6px 10px; border: none; background: none;
    font-size: 13px; color: #576b95; text-decoration: none; cursor: pointer;
}
.hb-cc-op-del { color: #fa5151; }
.hb-cc-foot { margin: 26px 0 0; text-align: center; }
.hb-cc-foot .weui-btn_mini { width: auto; padding: 0 1.6em; }

/* 详情弹层里的操作链接（自定义课程 → 编辑 / 删除） */
.hb-dtl-link { color: #576b95; text-decoration: none; }

/* ---------- 微信授权提示页（非微信环境，views/auth/need_wx.php）---------- */
.hb-auth-page { padding: 26px 16px 40px; }
.hb-auth-card {
    background: #fff; border-radius: 14px; padding: 28px 20px 22px;
    text-align: center; box-shadow: 0 2px 12px rgba(0, 0, 0, .05);
}
.hb-auth-ico { color: #07c160; margin-bottom: 12px; line-height: 0; }
/* 图标（官方 logo img / 之前的 svg）块级居中，避免基线对齐留白 */
.hb-auth-ico .hb-auth-wx { display: block; margin: 0 auto; }
.hb-auth-title { font-size: 19px; font-weight: 600; color: #191919; margin: 0 0 10px; }
.hb-auth-desc { font-size: 14px; color: #888; line-height: 1.75; margin: 0 0 20px; text-align: center; }
.hb-auth-desc b { color: #07c160; font-weight: 700; }
.hb-auth-qr {
    width: 200px; height: 200px; margin: 0 auto 16px; padding: 8px;
    border: 1px solid #eee; border-radius: 10px; background: #fff;
}
.hb-auth-qr img { width: 100%; height: 100%; display: block; border-radius: 6px; }
.hb-auth-steps {
    list-style: none; margin: 0 0 22px; padding: 0;
    font-size: 13px; color: #666; line-height: 2; text-align: center;
    counter-reset: hbauth;
}
.hb-auth-steps li {
    counter-increment: hbauth;
    display: flex; align-items: center; justify-content: center; gap: 8px;
}
.hb-auth-steps li::before {
    content: counter(hbauth); flex: 0 0 auto;
    width: 18px; height: 18px; line-height: 18px; text-align: center;
    border-radius: 50%; background: #e8f7ee; color: #07c160;
    font-size: 11px; font-weight: 600;
}
.hb-auth-steps b { color: #333; font-weight: 700; }
.hb-auth-actions { display: flex; flex-direction: column; gap: 10px; align-items: stretch; }
.hb-auth-actions .weui-btn { margin: 0; width: 100%; }
.hb-auth-foot { font-size: 12px; color: #b2b2b2; margin: 16px 0 0; }

/* ---------- 失物招领 · 站内沟通入口（swzl/detail.php）----------
   留言本身已迁到独立的站内沟通系统（r=msg），详情页只留一个入口卡。 */
.hb-swzl-msg-ico { display: block; width: 22px; height: 22px; margin-right: 10px; }
.hb-swzl-msg-dot {
    display: inline-block; box-sizing: border-box; min-width: 18px; height: 18px;
    padding: 0 5px; line-height: 18px; text-align: center;
    font-size: 11px; color: #fff; background: #fa5151; border-radius: 9px;
}

/* ---------- 强制浅色主题 ----------
   本站整体为浅色视觉（白卡/灰底/硬编码文字色）。WeUI 自带的暗色适配只覆盖
   cells 等组件背景，与本站的硬编码浅色混排会出现黑白相间的斑马样式。
   方案：系统夜间模式下把 WeUI 暗色变量重钉回浅色值（本文件在 weui.min.css
   之后加载，同选择器同优先级，后者胜出），并声明 color-scheme:light 阻止
   浏览器把输入框/滚动条等原生控件染黑。 */
:root { color-scheme: light; }
@media (prefers-color-scheme: dark) {
    body:not([data-weui-theme=light]) {
        --weui-BG-0: #ededed; --weui-BG-1: #f7f7f7; --weui-BG-2: #fff; --weui-BG-3: #f7f7f7;
        --weui-BG-4: #4c4c4c; --weui-BG-5: #fff;
        --weui-FG-0: rgba(0, 0, 0, .9); --weui-FG-HALF: rgba(0, 0, 0, .9);
        --weui-FG-1: rgba(0, 0, 0, .5); --weui-FG-2: rgba(0, 0, 0, .3); --weui-FG-3: rgba(0, 0, 0, .1);
        --weui-RED: #fa5151; --weui-ORANGE: #fa9d3b; --weui-YELLOW: #ffc300; --weui-GREEN: #91d300;
        --weui-LIGHTGREEN: #95ec69; --weui-BRAND: #07c160; --weui-BLUE: #10aeff; --weui-INDIGO: #1485ee;
        --weui-PURPLE: #6467f0; --weui-WHITE: #fff; --weui-LINK: #576b95; --weui-LINK-ACTIVE: rgba(87, 107, 149, .5);
        --weui-TEXTGREEN: #06ae56; --weui-FG: #000; --weui-BG: #fff;
        --weui-TAG-TEXT-ORANGE: #fa9d3b; --weui-TAG-BACKGROUND-ORANGE: rgba(250, 157, 59, .1);
        --weui-TAG-TEXT-GREEN: #06ae56; --weui-TAG-BACKGROUND-GREEN: rgba(6, 174, 86, .1);
        --weui-TAG-TEXT-BLUE: #10aeff; --weui-TAG-BACKGROUND-BLUE: rgba(16, 174, 255, .1);
        --weui-TAG-TEXT-BLACK: rgba(0, 0, 0, .5); --weui-TAG-BACKGROUND-BLACK: rgba(0, 0, 0, .05);
        --weui-BTN-DEFAULT-BG: #f2f2f2; --weui-BTN-DEFAULT-COLOR: #06ae56;
        --weui-BTN-DEFAULT-ACTIVE-BG: #e6e6e6; --weui-BTN-DISABLED-FONT-COLOR: rgba(0, 0, 0, .2);
        --weui-DIALOG-LINE-COLOR: rgba(0, 0, 0, .1);
    }
}

/* ============================================================
   弹窗推送（后台配置 → 指定页面定点投放）
   见 app/views/partials/popup.php；主色沿用微信绿 #07c160
   ============================================================ */
.hb-pop-mask {
    position: fixed; left: 0; right: 0; top: 0; bottom: 0; z-index: 9999;
    background: rgba(0, 0, 0, .5);
    display: -webkit-box; display: -webkit-flex; display: flex;
    -webkit-box-align: center; -webkit-align-items: center; align-items: center;
    -webkit-box-pack: center; -webkit-justify-content: center; justify-content: center;
    padding: 0 26px; box-sizing: border-box;
    opacity: 0; visibility: hidden;
    -webkit-transition: opacity .22s ease; transition: opacity .22s ease;
}
.hb-pop-mask.show { opacity: 1; visibility: visible; }

.hb-pop-card {
    position: relative; width: 100%; max-width: 320px;
    background: #fff; border-radius: 16px;
    padding: 24px 20px 20px; box-sizing: border-box;
    text-align: center;
    box-shadow: 0 12px 40px rgba(0, 0, 0, .18);
    -webkit-transform: scale(.94); transform: scale(.94);
    -webkit-transition: -webkit-transform .22s ease; transition: transform .22s ease;
}
.hb-pop-mask.show .hb-pop-card { -webkit-transform: scale(1); transform: scale(1); }

.hb-pop-close {
    position: absolute; right: 4px; top: 2px; width: 34px; height: 34px;
    border: 0; background: transparent; padding: 0; cursor: pointer;
    font-size: 22px; line-height: 32px; color: #b2afb8;
}
.hb-pop-close:active { color: #8a8a8e; }

.hb-pop-title {
    margin: 0 0 12px; font-size: 17px; font-weight: 600; color: #1f1f1f;
    line-height: 1.45; word-break: break-word;
}

.hb-pop-img { display: block; width: 100%; border-radius: 10px; margin: 0 0 12px; }
.hb-pop-img[hidden] { display: none; }

.hb-pop-body {
    font-size: 14px; line-height: 1.75; color: #57616b; text-align: left;
    white-space: pre-wrap; word-break: break-word;
    max-height: 42vh; overflow-y: auto; -webkit-overflow-scrolling: touch;
}
.hb-pop-body:empty { display: none; }

.hb-pop-actions { margin-top: 18px; }
.hb-pop-actions[hidden] { display: none; }
.hb-pop-btn {
    display: block; width: 100%; height: 44px; line-height: 44px;
    border-radius: 22px; background: #07c160; color: #fff;
    font-size: 16px; font-weight: 500; text-align: center;
}
.hb-pop-btn:active { background: #06ae56; }

/* ---------- 通用头像（真实微信头像 + 姓氏兜底，见 helpers.php avatar_html）----------
   底层永远是姓氏首字圆形底，真实头像盖在上面；头像加载失败（学生换过微信头像、
   库里的旧地址失效）时 onerror 把 img 摘掉，露出姓氏，视觉上不出现破图。 */
.hb-ava {
    position: relative; display: inline-flex; align-items: center; justify-content: center;
    border-radius: 50%; overflow: hidden; flex: 0 0 auto;
    background: #e6f7f0; color: #16a07a; font-weight: 700; line-height: 1;
    -webkit-user-select: none; user-select: none;
}
.hb-ava > .hb-ava-t { display: block; line-height: 1; }
.hb-ava > img {
    position: absolute; left: 0; top: 0; width: 100%; height: 100%;
    object-fit: cover; display: block; border: 0;
}

/* ---------- 调试模式横幅（后台「扫码调试」进入时显示，layouts/front.php）----------
   管理员以某学生身份浏览时每页顶部可见，一键退出；普通用户永远不会看到。 */
.hb-dbgbar {
    display: flex; align-items: center; justify-content: space-between; gap: 8px;
    flex-wrap: wrap; padding: 8px 14px; background: #fff7e6;
    border-bottom: 1px solid #ffe1b3; font-size: 13px; line-height: 1.5; color: #8a5300;
}
.hb-dbgbar-t { flex: 1; min-width: 0; word-break: break-all; }
.hb-dbgbar-t b { font-weight: 600; color: #6d4100; }
.hb-dbgbar-x {
    flex: 0 0 auto; padding: 3px 12px; border: 1px solid #f0c48a; border-radius: 999px;
    color: #d5750d; font-weight: 600; text-decoration: none;
}
.hb-dbgbar-x:active { background: #ffe1b3; }

/* ---------- 长文案提示卡片（window.hbFlash，见 layouts/front.php）----------
   weui 原生 Toast 的 .weui-toast 固定 136×136，中文长句会被挤成每行 6~7 字的小字，
   且默认只停 3 秒读不完。超过 11 字的闪存消息 / 页内长提示改走这里：
   顶部滑入、**实色主题底 + 白字**（比白底卡片醒目得多）、宽度自适应（最长 430px）、
   15.5px 正文、底部余量进度条（走完即关，看得出还剩多久）、点卡片或 ✕ 提前关闭；
   停留时间由调用方按字数决定（见 front.php / car.js）。 */
.hb-flash {
    position: fixed; z-index: 5001; left: 50%; top: 16px;
    width: calc(100% - 28px); max-width: 430px; box-sizing: border-box;
    display: flex; align-items: flex-start; gap: 10px;
    padding: 14px 15px 16px; border-radius: 14px; overflow: hidden;
    background: linear-gradient(135deg, #1f7a5c 0%, #16a07a 100%);
    box-shadow: 0 12px 30px rgba(6, 60, 44, .34);
    font-size: 15.5px; font-weight: 500; line-height: 1.6; color: #fff;
    transform: translate(-50%, 0);
    animation: hbFlashIn .3s cubic-bezier(.2, .9, .4, 1.15);
}
.hb-flash-t { flex: 1; min-width: 0; margin: 0; word-break: break-word; }
.hb-flash-ic {
    flex: 0 0 auto; width: 22px; height: 22px; margin-top: 1px; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    font-size: 14px; font-weight: 700; line-height: 1; color: #fff;
    background: rgba(255, 255, 255, .24);
}
.hb-flash-x {
    flex: 0 0 auto; padding: 0 2px; color: rgba(255, 255, 255, .82);
    font-size: 15px; line-height: 1.4; cursor: pointer;
}
/* 底部余量进度条：animation-duration 由 JS 按停留时间设，走完自动关闭 */
.hb-flash-bar {
    position: absolute; left: 0; bottom: 0; height: 3px; width: 100%;
    background: rgba(255, 255, 255, .55); transform-origin: left center;
    animation: hbFlashBar linear forwards;
}
/* 默认（hb-flash-ok）= 主色绿；其余按语义换底 */
.hb-flash-info { background: linear-gradient(135deg, #1d4ed8 0%, #2f7fd6 100%); box-shadow: 0 12px 30px rgba(30, 58, 138, .34); }
.hb-flash-warn { background: linear-gradient(135deg, #b45309 0%, #d97706 100%); box-shadow: 0 12px 30px rgba(120, 53, 15, .34); }
.hb-flash-err  { background: linear-gradient(135deg, #b91c1c 0%, #e04b4b 100%); box-shadow: 0 12px 30px rgba(127, 29, 29, .34); }
.hb-flash-out { animation: hbFlashOut .28s ease-in forwards; }
@keyframes hbFlashIn {
    from { opacity: 0; transform: translate(-50%, -18px) scale(.97); }
    to   { opacity: 1; transform: translate(-50%, 0) scale(1); }
}
@keyframes hbFlashOut {
    from { opacity: 1; transform: translate(-50%, 0); }
    to   { opacity: 0; transform: translate(-50%, -18px); }
}
@keyframes hbFlashBar {
    from { transform: scaleX(1); }
    to   { transform: scaleX(0); }
}
