/* ==========================================================================
   初中数学知识库 · 公共样式
   ========================================================================== */

:root {
    --app-primary: #2f6fb5;
    --app-primary-soft: #eaf2fb;
    --app-radius: 12px;
    --app-border: #e6e8eb;
}

body.app-body {
    background: #f6f7f9;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", "PingFang SC", sans-serif;
    color: #26292e;
    min-height: 100vh;
    display: flex;
    flex-direction: column;
}

/* 让页脚贴底 */
.app-main { flex: 1 0 auto; }

/* ---------------------------------------------------------------- 卡片 */

.app-card {
    background: #fff;
    border: 1px solid var(--app-border);
    border-radius: var(--app-radius);
    padding: 1.25rem;
}

.app-card-title {
    font-size: 1rem;
    font-weight: 500;
    margin-bottom: .75rem;
    display: flex;
    align-items: center;
    gap: .5rem;
}

/* ---------------------------------------------------------- 数学公式块 */

.katex { font-size: 1.05em; }

.app-math-block {
    background: #fafbfc;
    border: 1px solid var(--app-border);
    border-left: 3px solid var(--app-primary);
    border-radius: 8px;
    padding: .75rem 1rem;
    margin: .75rem 0;
    overflow-x: auto;
}

.app-knowledge-content {
    line-height: 1.9;
    font-size: .95rem;
}

.app-knowledge-content p { margin-bottom: .75rem; }

/* ------------------------------------------------------------ 知识点树 */

.app-tree { list-style: none; padding-left: 0; margin-bottom: 0; }
.app-tree ul { list-style: none; padding-left: 1.25rem; }
.app-tree li { margin: .25rem 0; }
.app-tree .app-tree-node {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    padding: .3rem .6rem;
    border-radius: 8px;
    color: #33383d;
    text-decoration: none;
}
.app-tree .app-tree-node:hover { background: var(--app-primary-soft); color: var(--app-primary); }
.app-tree .app-tree-node.is-active { background: var(--app-primary-soft); color: var(--app-primary); font-weight: 500; }

/* ---------------------------------------------------------- Loading 遮罩 */

.app-loading-mask {
    position: fixed;
    inset: 0;
    background: rgba(255, 255, 255, .72);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1085;   /* Modal 之下、页面之上 */
}

.app-loading-inner {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: .6rem;
    padding: 1rem 1.5rem;
    background: #fff;
    border: 1px solid var(--app-border);
    border-radius: var(--app-radius);
}

.app-loading-text { font-size: .875rem; color: #5a6169; }

/* ------------------------------------------------------------- Modal 微调 */

.app-modal-text { font-size: .9375rem; line-height: 1.7; word-break: break-word; }
.modal-content { border: 0; border-radius: var(--app-radius); }
.modal-header { border-bottom: 1px solid var(--app-border); padding: .85rem 1.1rem; }
.modal-title { font-size: 1rem; font-weight: 500; }
.modal-footer { border-top: 1px solid var(--app-border); padding: .7rem 1.1rem; }

/* ---------------------------------------------------------- 管理端侧栏 */

.app-admin-sidebar {
    background: #1f2a37;
    color: #c9d2dc;
    min-height: 100vh;
    width: 220px;
    position: sticky;
    top: 0;
}
.app-admin-sidebar .app-brand {
    padding: 1rem 1.15rem;
    font-size: 1rem;
    font-weight: 500;
    color: #fff;
    border-bottom: 1px solid rgba(255, 255, 255, .08);
}
.app-admin-sidebar .nav-link {
    color: #c9d2dc;
    padding: .6rem 1.15rem;
    border-radius: 0;
    display: flex;
    align-items: center;
    gap: .55rem;
    font-size: .9375rem;
}
.app-admin-sidebar .nav-link:hover { background: rgba(255, 255, 255, .06); color: #fff; }
.app-admin-sidebar .nav-link.active { background: var(--app-primary); color: #fff; }
.app-admin-sidebar .nav-section {
    padding: .85rem 1.15rem .35rem;
    font-size: .75rem;
    color: #7c8794;
    letter-spacing: .04em;
}

/* ------------------------------------------------------ 移动端底部导航 */

.app-bottom-nav {
    border-top: 1px solid var(--app-border);
    background: #fff;
    position: sticky;
    bottom: 0;
}
.app-bottom-nav a {
    flex: 1;
    text-align: center;
    padding: .5rem 0 .4rem;
    font-size: .75rem;
    color: #6b7280;
    text-decoration: none;
}
.app-bottom-nav a i { display: block; font-size: 1.15rem; margin-bottom: .1rem; }
.app-bottom-nav a.active { color: var(--app-primary); }

/* ------------------------------------------------------------ 状态徽标 */

.app-badge-pass { background: #e8f5ec; color: #1e7b3c; }
.app-badge-warn { background: #fdf3e2; color: #9a6a12; }
.app-badge-fail { background: #fdecec; color: #b03030; }
.app-badge-info { background: var(--app-primary-soft); color: var(--app-primary); }
.app-badge-pass, .app-badge-warn, .app-badge-fail, .app-badge-info {
    display: inline-block;
    padding: .1rem .5rem;
    border-radius: 6px;
    font-size: .75rem;
}

/* ==========================================================================
   学生端浏览与练习
   ========================================================================== */

/* -------------------------------------------------------------- 面包屑 */

.app-crumb {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: .35rem;
    font-size: .8125rem;
    color: #8b939c;
    margin-bottom: .5rem;
}
.app-crumb a { color: #8b939c; text-decoration: none; }
.app-crumb a:hover { color: var(--app-primary); }
.app-crumb i { font-size: .65rem; }

.app-h1 { font-size: 1.25rem; font-weight: 600; margin-bottom: .4rem; }

/* ---------------------------------------------------------- 列表（目录） */

.app-list { display: flex; flex-direction: column; }

.app-list-item {
    display: flex;
    align-items: center;
    gap: .85rem;
    padding: .7rem .25rem;
    border-bottom: 1px solid #f1f3f5;
    text-decoration: none;
    color: inherit;
}
.app-list-item:last-child { border-bottom: 0; }
.app-list-item:hover { background: #fafbfc; }
.app-list-item:hover .app-list-arrow { color: var(--app-primary); transform: translateX(2px); }

.app-list-no {
    flex: 0 0 auto;
    width: 26px;
    height: 26px;
    border-radius: 8px;
    background: var(--app-primary-soft);
    color: var(--app-primary);
    font-size: .75rem;
    display: flex;
    align-items: center;
    justify-content: center;
}
.app-list-main { flex: 1 1 auto; min-width: 0; }
.app-list-title { font-size: .9375rem; line-height: 1.5; }
.app-list-meta { font-size: .75rem; color: #8b939c; margin-top: .1rem; }
.app-list-arrow { color: #c6ccd3; transition: all .15s; font-size: .8rem; }

.app-empty { text-align: center; color: #9aa2ab; padding: 2rem 0; font-size: .875rem; }
.app-empty i { font-size: 1.6rem; display: block; margin-bottom: .5rem; opacity: .6; }

/* -------------------------------------------------------------- 小标签 */

.app-chip {
    display: inline-block;
    padding: .05rem .4rem;
    border-radius: 6px;
    background: #f2f4f7;
    color: #667085;
    font-size: .6875rem;
    vertical-align: middle;
}
.app-chip-geo { background: #eef6ff; color: #2f6fb5; }
.app-chip-diff-1, .app-chip-diff-2 { background: #e8f5ec; color: #1e7b3c; }
.app-chip-diff-3 { background: #fdf3e2; color: #9a6a12; }
.app-chip-diff-4, .app-chip-diff-5 { background: #fdecec; color: #b03030; }

/* ------------------------------------------------------ 正文里的扩展元素 */

.app-h3, .app-h4 { font-size: 1rem; font-weight: 600; margin: 1.25rem 0 .6rem; }
.app-h4 { font-size: .9375rem; }

.app-ul, .app-ol { padding-left: 1.35rem; margin-bottom: .85rem; }
.app-ul li, .app-ol li { margin-bottom: .25rem; }

.app-quote {
    border-left: 3px solid var(--app-primary);
    background: #f7fafd;
    padding: .6rem .9rem;
    border-radius: 0 8px 8px 0;
    margin: .85rem 0;
    color: #38414a;
}

.app-table { width: 100%; border-collapse: collapse; margin: .85rem 0; font-size: .875rem; }
.app-table th, .app-table td {
    border: 1px solid var(--app-border);
    padding: .45rem .6rem;
    text-align: left;
}
.app-table th { background: #f7f8fa; font-weight: 500; }

.app-code {
    background: #f6f8fa;
    border: 1px solid var(--app-border);
    border-radius: 8px;
    padding: .6rem .8rem;
    font-size: .8125rem;
    overflow-x: auto;
}
.app-code-inline {
    background: #f2f4f7;
    padding: .05rem .3rem;
    border-radius: 4px;
    font-size: .85em;
    color: #b03030;
}

/* ------------------------------------------------------------ 交互式图形 */

.geo-box {
    width: 100%;
    height: 320px;
    margin: 1rem 0;
    border: 1px solid var(--app-border);
    border-radius: 10px;
    background: #fbfcfd;
    overflow: hidden;
    touch-action: none;   /* 手指拖点是「拖点」，别被页面滚动抢走 */
}

.geo-tip {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100%;
    color: #9aa2ab;
    font-size: .8125rem;
    text-align: center;
    padding: 1rem;
}
.geo-tip-error { color: #b03030; background: #fdf6f6; }

.geo-box .JXGtext { font-family: inherit !important; }

.app-geo-note {
    display: flex;
    gap: .5rem;
    align-items: flex-start;
    margin-top: 1rem;
    padding: .6rem .8rem;
    border-radius: 8px;
    background: #fff8ec;
    color: #8a5a10;
    font-size: .8125rem;
    line-height: 1.6;
}
.app-geo-note i { margin-top: .1rem; }

/* ---------------------------------------------------------- 页面底部翻页 */

.app-nav-btn {
    display: block;
    padding: .6rem .8rem;
    border: 1px solid var(--app-border);
    border-radius: 10px;
    text-decoration: none;
    color: inherit;
    background: #fff;
    min-width: 0;
}
.app-nav-btn:hover { border-color: var(--app-primary); color: var(--app-primary); }
.app-nav-btn-next { text-align: right; }
.app-nav-btn-label { font-size: .6875rem; color: #98a1aa; }
.app-nav-btn-title {
    font-size: .8125rem;
    margin-top: .1rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* -------------------------------------------------------------- 练习题 */

.app-practice-item {
    display: flex;
    gap: .75rem;
    padding: .75rem .25rem;
    border-bottom: 1px solid #f1f3f5;
}
.app-practice-item:last-child { border-bottom: 0; }
.app-practice-no {
    flex: 0 0 auto;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: var(--app-primary-soft);
    color: var(--app-primary);
    font-size: .6875rem;
    display: flex;
    align-items: center;
    justify-content: center;
}
.app-practice-meta { display: flex; align-items: center; gap: .4rem; font-size: .6875rem; margin-bottom: .3rem; }
.app-practice-stem { font-size: .875rem; line-height: 1.75; }

/* ====================================================== 练习首页 / 错题本 */

.app-stat-num { font-size: 1.375rem; font-weight: 500; line-height: 1.3; }
.app-stat-unit { font-size: .75rem; font-weight: 400; color: #8b939c; margin-left: 1px; }

.app-resume { border-color: #cfe1f5; background: #f7fbff; }
.app-resume-icon {
    width: 40px; height: 40px; flex: 0 0 auto;
    border-radius: 12px;
    background: var(--app-primary-soft);
    color: var(--app-primary);
    display: flex; align-items: center; justify-content: center;
    font-size: 1.25rem;
}
.app-resume-icon-flag { background: #fdf3e2; color: #9a6a12; }

.app-entry { padding: 1rem; }
.app-entry-icon { font-size: 1.5rem; display: block; }
.app-entry-title { font-size: .9375rem; margin-top: .5rem; }

.app-weak-row {
    display: flex; align-items: center; gap: .75rem;
    padding: .7rem .25rem;
    border-bottom: 1px solid #f1f3f5;
}
.app-weak-row:last-child { border-bottom: 0; }
.app-weak-bar {
    height: 4px; border-radius: 2px; background: #eef0f3;
    margin: .35rem 0 .25rem; overflow: hidden;
}
.app-weak-bar > span { display: block; height: 100%; background: #d98b3a; border-radius: 2px; }

/* 挑知识点：册 → 章 → 节 */
.app-pick-book {
    font-size: .8125rem; font-weight: 500; color: #6b737c;
    margin: .9rem 0 .4rem; padding-bottom: .3rem;
    border-bottom: 1px solid #f1f3f5;
}
.app-pick-book:first-child { margin-top: 0; }
.app-pick-chapter { margin-bottom: .4rem; }
.app-pick-chapter-head { display: flex; align-items: center; gap: .4rem; padding: .35rem 0; }
.app-pick-chapter-name { font-size: .875rem; }
.app-pick-all {
    margin-left: auto; font-size: .6875rem; text-decoration: none;
    color: var(--app-primary); border: 1px solid #cfe1f5;
    border-radius: 999px; padding: .05rem .5rem;
}
.app-pick-all:hover { background: var(--app-primary-soft); }
.app-pick-section {
    display: flex; align-items: center; gap: .5rem;
    padding: .4rem .5rem .4rem .75rem;
    margin-left: .35rem;
    border-left: 2px solid #eef0f3;
    text-decoration: none; color: inherit;
    font-size: .8125rem;
}
.app-pick-section:hover { background: #fafbfc; border-left-color: var(--app-primary); color: var(--app-primary); }
.app-pick-section-title { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.app-pick-section-count { flex: 0 0 auto; color: #98a1aa; font-size: .6875rem; display: flex; align-items: center; gap: .2rem; }

/* ========================================================== 作答页（一页一题） */

.app-quiz-head { margin-bottom: .75rem; }
.app-quiz-head-top { display: flex; align-items: center; gap: .5rem; }
.app-quiz-title { font-size: .875rem; font-weight: 500; }
.app-quiz-quit {
    margin-left: auto; background: none; border: 0; padding: .1rem .2rem;
    color: #98a1aa; font-size: .75rem;
}
.app-quiz-quit:hover { color: #b03030; }
.app-quiz-track { height: 5px; border-radius: 3px; background: #e9ecef; margin: .5rem 0 .35rem; overflow: hidden; }
.app-quiz-track > span { display: block; height: 100%; background: var(--app-primary); border-radius: 3px; transition: width .3s; }
.app-quiz-sub { font-size: .75rem; color: #8b939c; }
.app-quiz-sub b { color: #26292e; }

.app-quiz-stem { font-size: .9375rem; line-height: 1.85; }

/* 选项 */
.app-opt-list { display: flex; flex-direction: column; gap: .5rem; margin-top: .9rem; }
.app-opt {
    display: flex; align-items: flex-start; gap: .6rem;
    border: 1px solid var(--app-border); border-radius: 10px;
    padding: .6rem .7rem; cursor: pointer; margin-bottom: 0;
    transition: border-color .15s, background .15s;
}
.app-opt:hover { border-color: #bcd3ec; background: #fafcff; }
.app-opt input { position: absolute; opacity: 0; width: 0; height: 0; }
.app-opt-key {
    flex: 0 0 auto; width: 24px; height: 24px; border-radius: 50%;
    background: #f2f4f7; color: #5d656e;
    display: flex; align-items: center; justify-content: center;
    font-size: .75rem; font-weight: 500;
}
.app-opt-val { flex: 1 1 auto; min-width: 0; font-size: .875rem; line-height: 1.6; }
.app-opt input:checked ~ .app-opt-key { background: var(--app-primary); color: #fff; }
.app-opt.is-picked { border-color: var(--app-primary); background: var(--app-primary-soft); }
.app-opt.is-locked { cursor: default; }
.app-opt.is-locked:hover { border-color: var(--app-border); background: #fff; }
.app-opt.is-picked:hover { border-color: var(--app-primary); background: var(--app-primary-soft); }

/* 填空 */
.app-blank-list { display: flex; flex-direction: column; gap: .5rem; margin-top: .9rem; }
.app-blank-row { display: flex; align-items: center; gap: .6rem; }
.app-blank-no { flex: 0 0 auto; font-size: .75rem; color: #8b939c; width: 46px; }
.app-essay { font-size: .875rem; line-height: 1.7; }

/* 判分结果 */
.app-result {
    background: #fff; border: 1px solid var(--app-border);
    border-left: 4px solid #c6ccd3;
    border-radius: var(--app-radius); padding: 1rem 1.1rem;
}
.app-result-ok { border-left-color: #2e9e5b; background: #f6fdf8; }
.app-result-bad { border-left-color: #d05050; background: #fef8f8; }
.app-result-self { border-left-color: #d9a13a; background: #fffcf5; }
.app-result-head { font-size: .9375rem; font-weight: 500; display: flex; align-items: center; gap: .4rem; margin-bottom: .5rem; }
.app-result-ok .app-result-head { color: #1e7b3c; }
.app-result-bad .app-result-head { color: #b03030; }
.app-result-self .app-result-head { color: #8a5a10; }
.app-result-line { font-size: .875rem; line-height: 1.75; }
.app-result-mine { color: #5d656e; }
.app-result-analysis { margin-top: .75rem; padding-top: .7rem; border-top: 1px dashed #e6e8eb; }
.app-result-label { font-size: .75rem; color: #8b939c; margin-bottom: .3rem; }
.app-rich { font-size: .875rem; line-height: 1.85; }
.app-rich > *:last-child { margin-bottom: 0; }
.app-self-ask { margin-top: .9rem; padding-top: .8rem; border-top: 1px dashed #eadfc6; }
.app-self-ask-text { font-size: .8125rem; color: #8a5a10; margin-bottom: .5rem; }

/* ============================================================== 交卷总结 */

.app-summary-hero { text-align: center; }
.app-summary-title { font-size: .875rem; color: #6b737c; }
.app-summary-score { margin: .5rem 0 .25rem; }
.app-summary-big { font-size: 2.75rem; font-weight: 500; line-height: 1.1; color: var(--app-primary); }
.app-summary-big span { font-size: 1rem; font-weight: 400; margin-left: 2px; }
.app-summary-big.is-good { color: #1e7b3c; }
.app-summary-big.is-mid { color: #b07a12; }
.app-summary-big.is-low { color: #b03030; }
.app-summary-sub { font-size: .8125rem; color: #6b737c; }
.app-summary-bars { height: 6px; border-radius: 3px; background: #eef0f3; overflow: hidden; margin: .9rem 0 .6rem; }
.app-summary-bar { display: block; height: 100%; border-radius: 3px; }
.app-summary-bar-ok { background: linear-gradient(90deg, #4fb477, #2e9e5b); }
.app-summary-note { font-size: .8125rem; color: #6b737c; }

.app-review-row {
    display: flex; gap: .6rem; padding: .7rem .25rem;
    border-bottom: 1px solid #f1f3f5;
}
.app-review-row:last-child { border-bottom: 0; }
.app-review-no {
    flex: 0 0 auto; width: 22px; height: 22px; border-radius: 50%;
    background: #f2f4f7; color: #8b939c; font-size: .6875rem;
    display: flex; align-items: center; justify-content: center;
}
.app-review-no.is-ok { background: #e8f5ec; color: #1e7b3c; }
.app-review-no.is-bad { background: #fdecec; color: #b03030; }
.app-review-stem { font-size: .875rem; line-height: 1.7; }
.app-review-answer {
    margin-top: .35rem; font-size: .75rem; line-height: 1.7;
    color: #6b737c; background: #fafbfc;
    border-radius: 8px; padding: .4rem .6rem;
}
.app-review-answer b { color: #26292e; }

/* ================================================================ 错题本 */

.app-tabs { gap: .35rem; }
.app-tabs .nav-link {
    font-size: .8125rem; padding: .3rem .8rem; border-radius: 999px;
    color: #5d656e; border: 1px solid var(--app-border); background: #fff;
}
.app-tabs .nav-link.active { background: var(--app-primary); color: #fff; border-color: var(--app-primary); }
.app-tab-num { font-size: .6875rem; opacity: .8; }

.app-wrong-row {
    display: flex; align-items: flex-start; gap: .5rem;
    padding: .7rem .25rem;
    border-bottom: 1px solid #f1f3f5;
}
.app-wrong-row:last-child { border-bottom: 0; }
.app-wrong-tags { display: flex; align-items: center; gap: .35rem; font-size: .6875rem; margin-bottom: .25rem; }
.app-icon-btn {
    flex: 0 0 auto; border: 0; background: none; color: #c6ccd3;
    padding: .2rem .3rem; font-size: .9rem;
}
.app-icon-btn:hover { color: #b03030; }
.app-chip-due { background: #fdecec; color: #b03030; }
.app-chip-done { background: #e8f5ec; color: #1e7b3c; }

/* ============================================================== 作业（学生端） */

.app-quiz-hw {
    display: flex; align-items: center; gap: .4rem;
    font-size: .75rem; color: #8a5a10;
    background: #fffcf5; border: 1px solid #eadfc6; border-radius: 8px;
    padding: .3rem .55rem; margin: .5rem 0 0;
}
.app-quiz-hw-dl { margin-left: auto; color: #6b737c; }
.app-quiz-hw-dl.is-urgent { color: #b03030; font-weight: 500; }

.app-hw {
    display: flex; align-items: center; gap: .7rem;
    padding: .75rem .25rem;
    border-bottom: 1px solid #f1f3f5;
    text-decoration: none; color: inherit;
}
.app-hw:last-child { border-bottom: 0; }
a.app-hw:hover { background: #fafbfc; }
a.app-hw:hover .app-hw-go { color: var(--app-primary); }
.app-hw.is-expired { opacity: .72; }

.app-hw-icon {
    flex: 0 0 auto; width: 36px; height: 36px; border-radius: 10px;
    background: var(--app-primary-soft); color: var(--app-primary);
    display: flex; align-items: center; justify-content: center; font-size: 1.05rem;
}
.app-hw-icon-ok { background: #e8f5ec; color: #1e7b3c; }
.app-hw.is-expired .app-hw-icon { background: #f2f4f7; color: #98a1aa; }

.app-hw-body { flex: 1 1 auto; min-width: 0; }
.app-hw-title { font-size: .9375rem; line-height: 1.45; }
.app-hw-meta {
    display: flex; flex-wrap: wrap; gap: .6rem;
    font-size: .6875rem; color: #8b939c; margin-top: .2rem;
}
.app-hw-meta i { margin-right: .15rem; }
.app-hw-go { flex: 0 0 auto; font-size: .8125rem; color: #98a1aa; white-space: nowrap; }
.app-hw-score { flex: 0 0 auto; font-size: 1.0625rem; color: var(--app-primary); }
.app-hw-score span { font-size: .75rem; color: #98a1aa; }

.app-chip-doing { background: #fdf3e2; color: #8a5a10; }

.app-empty-title { font-size: .9375rem; color: #5d656e; margin-bottom: .25rem; }

/* ------------------------------------------------------------------ 搜索高亮
   全站共用：SearchService::highlight() 产出的就是 <mark class="app-mark">。
   学生端搜索结果页与后台全站搜索页都用它，所以放这里而不是各自的 head 里。 */
.app-mark { background: #fff3c4; color: #8a5300; padding: 0 .1em; border-radius: 2px; }

/* 后台顶栏那个小搜索框：默认无边框，聚焦时才给一圈底色，免得顶栏看着很吵 */
.admin-topsearch {
    background: #f4f6f8; border-radius: var(--app-radius);
    padding: .125rem .5rem; border: 1px solid transparent;
}
.admin-topsearch:focus-within { background: #fff; border-color: var(--app-primary); }
.admin-topsearch i { color: #98a1aa; }
.app-empty-text { font-size: .8125rem; }

/* ======================================================== 作业（教师后台） */

.app-progress { height: 6px; border-radius: 3px; background: #eef0f3; overflow: hidden; min-width: 60px; }
.app-progress > span { display: block; height: 100%; border-radius: 3px; background: var(--app-primary); }

.app-hw-pick { background: #fafbfc; border: 1px solid var(--app-border); border-radius: 10px; padding: .75rem; }

/* 从题库挑选：一屏能看十几道题，勾选框固定在左边 */
.app-pick-list { max-height: 46vh; overflow-y: auto; border: 1px solid var(--app-border); border-radius: 10px; }
.app-pick-item {
    display: flex; gap: .6rem; align-items: flex-start;
    padding: .55rem .7rem; margin: 0; cursor: pointer;
    border-bottom: 1px solid #f1f3f5;
}
.app-pick-item:last-child { border-bottom: 0; }
.app-pick-item:hover { background: #fafbfc; }
.app-pick-item.is-on { background: var(--app-primary-soft); }
.app-pick-item input { margin-top: .2rem; flex: 0 0 auto; }
.app-pick-stem { font-size: .8125rem; line-height: 1.55; }

/* 提交情况：进度环 + 名单 */
.app-rate-bar { height: 6px; border-radius: 3px; background: #eef0f3; overflow: hidden; }
.app-rate-bar > span { display: block; height: 100%; border-radius: 3px; }
.app-rate-ok { background: #4fb477; }
.app-rate-mid { background: #e0a83c; }
.app-rate-bad { background: #d97070; }
.app-stu-name { font-size: .875rem; }
.app-stu-no { font-size: .6875rem; color: #98a1aa; }
