/* ========== 创课堂教育科技 · 全局样式 ========== */
* { margin: 0; padding: 0; box-sizing: border-box; }
:root {
  --primary: #9a72f2;
  --primary-dark: #8459e0;
  --primary-light: #f5f1fe;
  --primary-grad: linear-gradient(135deg, #af95f5 0%, #9a72f2 100%);
  --danger: #dc2626;
  --success: #16a34a;
  --warning: #d97706;
  --text: #1f2937;
  --text-2: #6b7280;
  --text-3: #9ca3af;
  --border: #e5e7eb;
  --bg: #f4f6fb;
  --card: #ffffff;
  --radius: 12px;
  --shadow: 0 1px 3px rgba(16,24,40,.05), 0 1px 2px rgba(16,24,40,.03);
  --shadow-md: 0 4px 14px rgba(16,24,40,.08);
  --shadow-lg: 0 12px 32px rgba(16,24,40,.13);
}
html, body { height: 100%; }
body {
  font-family: "Microsoft YaHei", "PingFang SC", "HarmonyOS Sans SC", "Source Han Sans SC", "Noto Sans SC", "Segoe UI", system-ui, sans-serif;
  background: var(--bg);
  color: var(--text);
  font-size: 14px;
  line-height: 1.7;
  letter-spacing: 0.15px;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
.hidden { display: none !important; }
button { font-family: inherit; cursor: pointer; letter-spacing: 0.3px; }
input, select, textarea { font-family: inherit; font-size: 14px; letter-spacing: 0.2px; line-height: 1.6; }

/* ---------- 启动页 ---------- */
#boot-screen { height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; }
.boot-logo { font-size: 32px; font-weight: 700; color: var(--primary); letter-spacing: 4px; }
.boot-sub { color: var(--text-3); }

/* ---------- 登录视图 ---------- */
#login-view { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 24px;
  background: linear-gradient(135deg, var(--primary-title) 0%, var(--primary) 55%, var(--primary-soft) 100%); }
.login-card { width: 420px; max-width: 94vw; background: #fff; border-radius: 16px; box-shadow: var(--shadow-lg); padding: 36px 38px 30px; }
.login-title { font-size: 24px; font-weight: 700; text-align: center; color: var(--text); }
.login-sub { text-align: center; color: var(--text-2); margin: 6px 0 22px; }
.login-tabs { display: flex; gap: 4px; background: #f1f5f9; border-radius: 8px; padding: 4px; margin-bottom: 20px; }
.login-tabs button { flex: 1; border: none; background: transparent; padding: 8px 0; border-radius: 6px; font-size: 14px; color: var(--text-2); transition: all .15s; }
.login-tabs button.active { background: #fff; color: var(--primary); font-weight: 600; box-shadow: var(--shadow); }
.form-row { margin-bottom: 14px; }
.form-row label { display: block; font-size: 13px; color: var(--text-2); margin-bottom: 5px; }
.form-row input, .form-row select, .form-row textarea {
  width: 100%; padding: 9px 12px; border: 1px solid var(--border); border-radius: 8px; outline: none; transition: border .15s;
}
.form-row input:focus, .form-row select:focus, .form-row textarea:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(var(--primary-rgb),.12); }
.form-err { color: var(--danger); font-size: 13px; min-height: 20px; margin: 2px 0 8px; }
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; border: none; border-radius: 8px;
  padding: 9px 18px; font-size: 14px; font-weight: 500; transition: all .18s ease; }
.btn:active { transform: scale(.97); }
.btn-primary { background: var(--primary-grad); color: #fff; box-shadow: 0 2px 8px rgba(var(--primary-rgb),.28); }
.btn-primary:hover { box-shadow: 0 4px 14px rgba(var(--primary-rgb),.36); filter: brightness(1.05); }
.btn-primary:disabled { background: var(--primary-soft); box-shadow: none; cursor: not-allowed; }
.btn-block { width: 100%; }
.btn-ghost { background: #fff; border: 1px solid var(--border); color: var(--text); }
.btn-ghost:hover { border-color: var(--primary); color: var(--primary); }
.btn-danger { background: #fff; border: 1px solid #fecaca; color: var(--danger); }
.btn-danger:hover { background: #fef2f2; }
.btn-sm { padding: 4px 10px; font-size: 13px; border-radius: 6px; }
.btn-link { background: none; border: none; color: var(--primary); font-size: 13px; padding: 0; }
.btn-link:hover { text-decoration: underline; }
.otp-row { display: flex; gap: 8px; }
.otp-row input { flex: 1; }
.otp-row .btn { white-space: nowrap; }
.login-foot { margin-top: 16px; text-align: center; font-size: 13px; color: var(--text-2); }

/* ---------- 主框架 ---------- */
#main-view { min-height: 100vh; display: flex; flex-direction: column; }
.topbar { background: rgba(255,255,255,.88); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--border); box-shadow: 0 1px 8px rgba(30,41,59,.05);
  display: flex; align-items: center; justify-content: center; padding: 0; position: sticky; top: 0; z-index: 50; }
.topbar-in { height: 58px; box-sizing: border-box; padding: 0 24px; }
.topbar .brand { font-size: 17px; font-weight: 700; color: var(--primary); letter-spacing: 1px; white-space: nowrap; display: flex; align-items: center; gap: 9px; }
.topbar .brand::before { content: ""; width: 26px; height: 26px; border-radius: 8px; flex-shrink: 0;
  background: var(--primary-grad); box-shadow: 0 2px 6px rgba(var(--primary-rgb),.35);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 3 1 9l4 2.18v6L12 21l7-3.82v-6l2-1.09V17h2V9L12 3zm6.82 6L12 12.72 5.18 9 12 5.28 18.82 9zM17 15.99l-5 2.73-5-2.73v-3.72L12 15l5-2.73v3.72z'/%3E%3C/svg%3E") center/contain no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12 3 1 9l4 2.18v6L12 21l7-3.82v-6l2-1.09V17h2V9L12 3zm6.82 6L12 12.72 5.18 9 12 5.28 18.82 9zM17 15.99l-5 2.73-5-2.73v-3.72L12 15l5-2.73v3.72z'/%3E%3C/svg%3E") center/contain no-repeat; }
.topbar nav { display: flex; gap: 4px; flex: 1; }
.topbar nav button { border: none; background: none; padding: 8px 16px; font-size: 14px; color: var(--text-2); border-radius: 8px; font-weight: 500; transition: all .15s; }
.topbar nav button:hover { background: #f1f5f9; color: var(--text); }
.topbar nav button.active { color: var(--primary); background: var(--primary-light); font-weight: 600; }
.topbar .user-box { display: flex; align-items: center; gap: 10px; color: var(--text-2); font-size: 13px; }
.cart-badge { display: inline-block; min-width: 18px; height: 18px; line-height: 18px; text-align: center; background: var(--danger); color: #fff; border-radius: 9px; font-size: 11px; padding: 0 5px; }
.workspace { flex: 1; display: flex; min-height: 0; }

/* ---------- 题库视图 ---------- */
.sidebar { width: 280px; background: #fff; border-right: 1px solid var(--border); display: flex; flex-direction: column; flex-shrink: 0; }
.side-tabs { display: flex; border-bottom: 1px solid var(--border); }
.side-tabs button { flex: 1; border: none; background: none; padding: 12px 0; font-size: 14px; color: var(--text-2); border-bottom: 2px solid transparent; font-weight: 500; }
.side-tabs button.active { color: var(--primary); border-bottom-color: var(--primary); }
.side-head { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px 6px; }
.side-head .t { font-size: 13px; color: var(--text-3); }
.tree { flex: 1; overflow-y: auto; padding: 4px 8px 16px; }
.tree-item { padding: 7px 10px; border-radius: 7px; cursor: pointer; display: flex; align-items: center; gap: 6px; color: var(--text); line-height: 1.5; user-select: none; }
.tree-item:hover { background: #f1f5f9; }
.tree-item.active { background: var(--primary-light); color: var(--primary); font-weight: 600; }
.tree-item .name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tree-item .cnt { font-size: 12px; color: var(--text-3); }
.tree-item .cnt:hover { color: var(--primary); }
.tree-item .cnt.del:hover { color: var(--danger); }
.tree-item .arrow { width: 14px; flex-shrink: 0; text-align: center; color: var(--text-3); font-size: 11px; }
.tree-children { margin-left: 15px; border-left: 1px dashed var(--border); padding-left: 5px; }
.tree-empty { padding: 30px 14px; text-align: center; color: var(--text-3); font-size: 13px; }

.content { flex: 1; overflow-y: auto; padding: 20px 24px 60px; min-width: 0; }
.content-head { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; flex-wrap: wrap; }
.content-head h2 { font-size: 18px; }
.content-head .sp { flex: 1; }
.crumb { color: var(--text-3); font-size: 13px; margin-bottom: 10px; }
.crumb b { color: var(--text); }

/* 题目卡片（仿菁优网：白卡、舒适字距行距、底部操作行） */
.qcard { background: var(--card); border: 1px solid #e8eaf0; border-radius: 8px; box-shadow: var(--shadow); padding: 18px 22px 13px; margin-bottom: 16px; transition: border-color .15s, box-shadow .15s; }
.qcard:hover { border-color: var(--primary-line); box-shadow: 0 2px 10px rgba(var(--primary-rgb),.08); }
.qcard-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
.qno { font-weight: 700; color: var(--text-2); }
.qtag { display: inline-block; padding: 1px 9px; border-radius: 20px; font-size: 12px; background: var(--primary-light); color: var(--primary); }
.qtag.know { background: #f0fdf4; color: var(--success); }
.qcard-body { color: #2b3445; word-break: break-word; font-size: 15px; line-height: 1.9; letter-spacing: 0.3px; }
.qcard-body p { margin: 5px 0; }
.qcard-body img { display: block; max-width: min(100%, 380px); max-height: 280px; margin: 10px 0; border: 1px solid var(--border); border-radius: 6px; }
.qsec { margin-top: 12px; padding: 12px 14px; background: #f8fafc; border-radius: 8px; font-size: 14px; line-height: 1.85; letter-spacing: 0.2px; }
.qsec p { margin: 4px 0; }
.qsec img { display: block; max-width: min(100%, 320px); max-height: 220px; margin: 8px 0; border: 1px solid var(--border); border-radius: 6px; }
.qsec .lab { font-weight: 600; color: var(--primary); margin-right: 6px; }
.qsec.ana .lab { color: var(--warning); }
.qsec.stu-ans { background: #fef2f2; }
.qsec.stu-ans .lab { color: #dc2626; }
/* 来源行（《出处》灰色小字，菁优网式） */
.qsrc-line { margin-top: 10px; color: var(--text-3); font-size: 12.5px; letter-spacing: 0.2px; }
/* 选项横排（A. B. C. D. 菁优网式等宽分布，长选项自动换行） */
.opt-row { display: flex; flex-wrap: wrap; gap: 4px 24px; margin: 8px 0 4px; }
.opt-item { flex: 1 1 170px; display: flex; gap: 6px; align-items: flex-start; padding: 2px 0; min-width: 0; }
.opt-item:has(img) { flex: 0 0 auto; margin-right: 14px; }
.opt-lab { flex-shrink: 0; font-weight: 500; color: #2b3445; }
.opt-c { min-width: 0; word-break: break-word; }
/* 题干内数据表（docx 上传时表格转成「｜」分隔行，渲染时还原成真表格） */
.rich-tbl { border-collapse: collapse; margin: 8px auto; }
.rich-tbl td { border: 1px solid #8a93a6; padding: 3px 14px; text-align: center; font-size: 15px; }
/* 底部操作行：左侧链接式操作，右侧橙色加篮按钮（菁优网式） */
.qcard-ops { display: flex; align-items: center; gap: 16px; margin-top: 12px; padding-top: 10px; border-top: 1px solid #f0f2f6; flex-wrap: wrap; }
.qcard-ops .sp { flex: 1; }
.qop-link { background: none; border: none; color: #4a86e8; font-size: 13px; padding: 2px 0; letter-spacing: 0.3px; }
.qop-link:hover { text-decoration: underline; color: #2f6fd0; }
.qop-link.danger { color: #e06565; }
.qop-link.danger:hover { color: #c94a4a; }
.btn-cart { background: #ff8f1f; color: #fff; border: none; border-radius: 5px; padding: 6px 16px; font-size: 13px; font-weight: 500; letter-spacing: 0.5px; transition: background .15s; }
.btn-cart:hover { background: #f07e0a; }
.btn-cart.in { background: #fff; color: var(--text-3); border: 1px solid var(--border); font-weight: 400; }
.btn-cart.in:hover { color: var(--text-2); background: #f8fafc; }
.qs-empty { text-align: center; color: var(--text-3); padding: 60px 0; }
.qs-empty .big { font-size: 40px; margin-bottom: 8px; }

/* ---------- 上传视图 ---------- */
#view-upload { padding: 24px; flex: 1; overflow-y: auto; }
.up-steps { display: flex; gap: 0; margin-bottom: 22px; }
.up-step { flex: 1; text-align: center; padding: 10px 0; color: var(--text-3); border-bottom: 2px solid var(--border); font-size: 13.5px; }
.up-step.on { color: var(--primary); border-bottom-color: var(--primary); font-weight: 600; }
.dropzone { border: 2px dashed #cbd5e1; border-radius: 14px; background: #fff; padding: 60px 20px; text-align: center; cursor: pointer; transition: all .15s; }
.dropzone:hover, .dropzone.over { border-color: var(--primary); background: var(--primary-light); }
.dropzone .ic { font-size: 44px; margin-bottom: 10px; }
.dropzone .t1 { font-size: 16px; font-weight: 600; }
.dropzone .t2 { color: var(--text-3); margin-top: 6px; font-size: 13px; }
.up-target { background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 16px 18px; margin-bottom: 16px; display: flex; gap: 12px; align-items: flex-end; flex-wrap: wrap; }
.up-target .form-row { margin-bottom: 0; min-width: 180px; }
.parsed-list { }
.parsed-item { background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 14px 16px; margin-bottom: 12px; }
.parsed-item textarea { width: 100%; border: 1px solid var(--border); border-radius: 8px; padding: 8px 10px; resize: vertical; min-height: 60px; }
.parsed-item .prow { display: flex; gap: 8px; margin-top: 8px; flex-wrap: wrap; align-items: center; }
.parsed-item .prow input, .parsed-item .prow select { padding: 6px 9px; border: 1px solid var(--border); border-radius: 7px; }
.parsed-item .pimgs { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 8px; }
.parsed-item .pimgs img { height: 74px; border: 1px solid var(--border); border-radius: 6px; }
.parsed-item .del { margin-left: auto; }

/* ---------- 组卷视图 ---------- */
#view-paper { flex: 1; overflow-y: auto; padding: 24px; }
.paper-layout { display: flex; gap: 20px; align-items: flex-start; }
.cart-list { flex: 1; min-width: 0; }
.paper-side { width: 320px; flex-shrink: 0; background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 18px; position: sticky; top: 76px; }
.paper-side h3 { font-size: 15px; margin-bottom: 12px; }
.cart-item { background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 12px 14px; margin-bottom: 10px; display: flex; gap: 10px; }
.cart-item .ci-body { flex: 1; min-width: 0; }
.cart-item .ci-text { font-size: 13.5px; line-height: 1.75; color: var(--text); }
.cart-item .ci-text p { margin: 2px 0; }
.cart-item .ci-text img { display: block; max-width: 220px; max-height: 140px; margin: 6px 0; border: 1px solid var(--border); border-radius: 6px; }
.cart-item .ci-ops { display: flex; flex-direction: column; gap: 4px; }
.cart-item .ci-ops button { border: 1px solid var(--border); background: #fff; border-radius: 6px; width: 26px; height: 26px; font-size: 12px; color: var(--text-2); }
.cart-item .ci-ops button:hover { border-color: var(--primary); color: var(--primary); }
.cart-group { font-weight: 700; margin: 16px 0 8px; padding-left: 9px; border-left: 3px solid var(--primary); letter-spacing: 0.5px; }
.cart-empty { text-align: center; color: var(--text-3); padding: 50px 0; }
.stat-row { display: flex; justify-content: space-between; color: var(--text-2); font-size: 13px; padding: 4px 0; }
.stat-row b { color: var(--text); }

/* 我的记录 */
.rec-item { background: #fff; border: 1px solid var(--border); border-radius: var(--radius); padding: 12px 16px; margin-bottom: 10px; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; box-shadow: var(--shadow); }
.rec-body { flex: 1; min-width: 200px; }
.rec-name { font-weight: 600; margin-bottom: 2px; letter-spacing: 0.3px; }

/* ---------- Toast / Modal ---------- */
#toast-wrap { position: fixed; top: 70px; left: 50%; transform: translateX(-50%); z-index: 999; display: flex; flex-direction: column; gap: 8px; align-items: center; }
.toast { background: #111827; color: #fff; padding: 9px 20px; border-radius: 24px; font-size: 13.5px; box-shadow: var(--shadow-lg); animation: tin .2s ease; max-width: 80vw; }
.toast.err { background: var(--danger); }
.toast.ok { background: var(--success); }
@keyframes tin { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; } }
#modal-wrap { position: fixed; inset: 0; background: rgba(15,23,42,.45); z-index: 998; display: flex; align-items: center; justify-content: center; padding: 20px; }
.modal { background: #fff; border-radius: 14px; box-shadow: var(--shadow-lg); width: 560px; max-width: 94vw; max-height: 88vh; display: flex; flex-direction: column; }
.modal-head { display: flex; align-items: center; padding: 16px 20px 0; }
.modal-head h3 { flex: 1; font-size: 16px; }
.modal-head .x { border: none; background: none; font-size: 20px; color: var(--text-3); line-height: 1; }
.modal-body { padding: 14px 20px; overflow-y: auto; }
.modal-foot { padding: 12px 20px 16px; display: flex; justify-content: flex-end; gap: 10px; }

/* 通用 */
.row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.mt8 { margin-top: 8px; } .mt16 { margin-top: 16px; }
.muted { color: var(--text-3); font-size: 13px; }
.loading-line { padding: 40px; text-align: center; color: var(--text-3); }
.katex { font-size: 1em; } /* 与正文字号一致，避免公式字母显得偏大 */
.content-head h2 { letter-spacing: 0.5px; }
.qcard-head { margin-bottom: 10px; }
.qcard-head:empty { display: none; }
.qno { letter-spacing: 0.5px; }
.qtag { letter-spacing: 0.3px; font-weight: 500; }

/* 数字/字母 Times New Roman 斜体 */
.tnr { font-family: "Times New Roman", "Liberation Serif", serif; font-style: italic; }
/* 内联题号（与题干同排） */
.qno-in { font-family: "Times New Roman", "Liberation Serif", serif; font-style: italic; font-weight: 700; color: var(--text-2); margin-right: 3px; }

/* 题型筛选栏 */
.filter-bar { display: flex; gap: 6px; margin-bottom: 14px; flex-wrap: wrap; }
.fbtn { border: 1px solid var(--border); background: #fff; padding: 5px 14px; border-radius: 20px; font-size: 13px; color: var(--text-2); transition: all .15s; }
.fbtn:hover { border-color: var(--primary); color: var(--primary); }
.fbtn.active { background: var(--primary); border-color: var(--primary); color: #fff; }

/* ---------- 题库首页入口卡 ---------- */
.entry-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 16px; margin-top: 6px; }
.entry-card { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); padding: 30px 22px; text-align: center; cursor: pointer; transition: all .16s ease; box-shadow: var(--shadow); }
.entry-card:hover { border-color: var(--primary); box-shadow: var(--shadow-lg); transform: translateY(-2px); }
.entry-ic { font-size: 42px; margin-bottom: 12px; }
.entry-t { font-size: 17px; font-weight: 600; margin-bottom: 6px; }
.entry-d { color: var(--text-3); font-size: 13px; line-height: 1.6; }

/* ---------- 教辅封面网格 ---------- */
.book-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 18px; }
.book-card { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); padding: 12px; cursor: pointer; text-align: center; box-shadow: var(--shadow); transition: all .16s ease; }
.book-card:hover { border-color: var(--primary); box-shadow: var(--shadow-lg); transform: translateY(-2px); }
.book-cover { width: 100%; aspect-ratio: 3 / 4; object-fit: cover; border-radius: 6px; background: var(--bg); display: block; }
.book-cover-empty { display: flex; align-items: center; justify-content: center; font-size: 44px; color: var(--text-3); }
.book-name { font-weight: 600; margin-top: 10px; font-size: 14px; line-height: 1.45; word-break: break-all; }
.book-meta { color: var(--text-3); font-size: 12px; margin-top: 4px; min-height: 17px; }
.book-edit { margin-top: 8px; }
.cover-prev img { max-width: 170px; max-height: 210px; border-radius: 6px; border: 1px solid var(--border); display: block; }

/* ---------- 试卷筛选 / 行 ---------- */
.filter-sel { display: inline-flex; align-items: center; gap: 6px; }
select.filter-sel { border: 1px solid var(--border); border-radius: 6px; padding: 4px 8px; background: #fff; color: var(--text); }
.paper-row { cursor: pointer; transition: border-color .15s; }
.paper-row:hover { border-color: var(--primary); }
.paper-info { padding: 6px 14px 12px; }
.paper-info .t { font-weight: 600; font-size: 15px; line-height: 1.5; margin-bottom: 6px; word-break: break-all; }
.paper-info .muted { font-size: 12.5px; margin-bottom: 2px; }
.paper-notes { margin-top: 6px; padding: 8px 10px; background: var(--bg, #f6f7fb); border: 1px solid var(--border); border-radius: 8px; font-size: 12.5px; line-height: 1.7; white-space: pre-wrap; word-break: break-all; max-height: 96px; overflow: hidden; cursor: pointer; position: relative; }
.paper-notes::after { content: "点击展开全文"; position: absolute; right: 8px; bottom: 4px; font-size: 11px; color: var(--primary); background: linear-gradient(90deg, transparent, var(--bg, #f6f7fb) 40%); padding-left: 24px; }
.paper-notes.open { max-height: none; }
.paper-notes.open::after { content: ""; }

/* ---------- 学校中心 / AI 预测组卷 ---------- */
.sch-card { border: 1px solid var(--border); border-radius: 12px; padding: 12px 14px; margin-bottom: 12px; background: #fff; }
.sch-head { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.sch-head .sp { flex: 1; }
.sch-name { font-weight: 600; font-size: 15px; }
.sch-timeline { display: flex; flex-wrap: wrap; gap: 8px; }
.sch-chip { border: 1px solid var(--border); background: var(--primary-light); color: var(--primary-dark); border-radius: 999px; padding: 5px 12px; font-size: 12.5px; cursor: pointer; transition: all .15s; }
.sch-chip:hover { background: var(--primary); color: #fff; transform: translateY(-1px); }
.sch-sec-t { font-weight: 600; font-size: 13.5px; margin: 14px 0 8px; }
.sch-pick-list { display: flex; flex-direction: column; gap: 6px; max-height: 180px; overflow-y: auto; border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; }
.sch-pick-list.short { max-height: 140px; }
.sch-pick { display: flex; align-items: center; gap: 8px; font-size: 13px; cursor: pointer; line-height: 1.5; }
.sch-pick input { flex: none; }

/* ---------- 知识点列表 ---------- */
.know-search { width: 100%; max-width: 380px; margin-bottom: 14px; padding: 8px 14px; border: 1px solid var(--border); border-radius: 20px; outline: none; background: #fff; }
.know-search:focus { border-color: var(--primary); }
.know-row { display: flex; align-items: center; gap: 12px; background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); padding: 12px 16px; margin-bottom: 8px; box-shadow: var(--shadow); transition: border-color .15s; }
.know-row:hover { border-color: var(--primary); }
.know-name { font-weight: 600; flex: 1; line-height: 1.5; }
.know-cnt { color: var(--text-3); font-size: 13px; flex-shrink: 0; }

/* ---------- 来源标签 ---------- */
.qtag.src { background: #f0fdf4; color: var(--success); }

/* ---------- 题目图片美化（仿菁优网：小巧、无白框、多图横排，覆盖前规则） ---------- */
.qcard-body img { display: inline-block; max-width: min(100%, 170px); max-height: 120px; margin: 4px 10px 4px 0; border: none; border-radius: 0; vertical-align: middle; background: transparent; }
.qsec img { display: inline-block; max-width: min(100%, 150px); max-height: 110px; margin: 4px 10px 4px 0; border: none; border-radius: 0; vertical-align: middle; background: transparent; }
.cart-item .ci-text img { display: inline-block; max-width: 130px; max-height: 90px; margin: 4px 8px 4px 0; border: none; border-radius: 0; vertical-align: middle; background: transparent; }
.qcard-body p, .qsec p, .ci-text p { margin: 3px 0; }
/* 纯图片段落自动横排（选项图、多图并排） */
.qcard-body p:has(> img:only-child),
.qsec p:has(> img:only-child),
.ci-text p:has(> img:only-child) { display: inline-block; margin: 2px 12px 2px 0; vertical-align: top; }
.qcard-body p:has(> img:only-child) img,
.qsec p:has(> img:only-child) img,
.ci-text p:has(> img:only-child) img { margin: 0; display: block; }

/* ---------- 编辑题目：插图大小滑块 ---------- */
.img-scale-row { display: flex; align-items: center; gap: 6px; margin-top: 4px; font-size: 12px; }
.img-scale-row input[type="range"] { accent-color: var(--primary); cursor: pointer; }

/* ================= 学生错题（第二阶段） ================= */
.stu-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 16px; }
.stu-card { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow); padding: 20px 18px 16px; cursor: pointer; transition: box-shadow .15s; }
.stu-card:hover { box-shadow: 0 4px 14px rgba(15, 23, 42, .12); }
.stu-ava { width: 56px; height: 56px; border-radius: 50%; background: var(--primary-light); color: var(--primary); font-size: 24px; font-weight: 700; display: flex; align-items: center; justify-content: center; margin: 0 auto 10px; }
.stu-name { font-weight: 600; font-size: 16px; }
.stu-cnt { margin-top: 6px; font-size: 13px; color: var(--primary); }
.stu-ops { margin-top: 14px; display: flex; gap: 8px; align-items: center; opacity: 0; transform: translateY(4px); transition: opacity .18s, transform .18s; pointer-events: none; }
.stu-card:hover .stu-ops { opacity: 1; transform: none; pointer-events: auto; }
.stu-head { display: flex; gap: 16px; align-items: center; background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow); padding: 16px 18px; margin-bottom: 14px; }
.stu-head .stu-ava { margin: 0; }
.stu-info .stu-name { font-size: 18px; }
.stu-actions { display: flex; gap: 10px; margin-bottom: 14px; flex-wrap: wrap; }
.crumb { margin-bottom: 10px; }
.crumb a { color: var(--primary); cursor: pointer; font-size: 14px; }
.wrong-check { width: 16px; height: 16px; margin-right: 4px; accent-color: var(--primary); }
/* AI 批改弹窗 */
.photo-strip { display: flex; gap: 8px; flex-wrap: wrap; margin: 8px 0; }
.photo-cell { position: relative; width: 84px; height: 84px; }
.photo-cell img { width: 84px; height: 84px; object-fit: cover; border-radius: 8px; border: 1px solid var(--border); }
.photo-x { position: absolute; top: -6px; right: -6px; width: 20px; height: 20px; border-radius: 50%; background: #ef4444; color: #fff; border: none; cursor: pointer; font-size: 12px; line-height: 1; padding: 0; }
.grade-item { border: 1px solid var(--border); border-radius: 10px; padding: 12px 14px; margin-top: 14px; }
.gi-head { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; flex-wrap: wrap; }
.gi-badge { font-size: 12px; font-weight: 600; padding: 1px 8px; border-radius: 12px; }
.gi-badge.ok { background: #f0fdf4; color: var(--success); }
.gi-badge.no { background: #fef2f2; color: #dc2626; }
.know-input { width: 150px; padding: 3px 8px; border: 1px solid var(--border); border-radius: 6px; font-size: 13px; }
.gi-foot { display: flex; gap: 10px; margin-top: 14px; }
.qop-link.danger { color: #dc2626; }
/* 学情报告 */
.report-view { margin-top: 16px; border-top: 1px dashed var(--border); padding-top: 12px; }
.report-sec-t { font-size: 15px; font-weight: 700; color: var(--title, #2b3445); margin-bottom: 10px; }
/* 班级看板：高频错题/学生排行行 */
.board-qrow { display: flex; align-items: center; gap: 12px; padding: 9px 10px; border-radius: 10px; }
.board-qrow + .board-qrow { border-top: 1px solid #f1f5f9; }
.board-qrow:hover { background: #f8fafc; }
.board-rank { flex-shrink: 0; width: 24px; height: 24px; border-radius: 8px; background: #eef2f7; color: #64748b; font-size: 12.5px; font-weight: 700; display: flex; align-items: center; justify-content: center; }
.board-rank.top { background: var(--primary); color: #fff; }
.board-qtext { flex: 1; min-width: 0; word-break: break-word; font-size: 13.5px; }
.board-cnt { flex-shrink: 0; font-size: 12.5px; font-weight: 700; color: var(--primary); background: var(--soft, #ede9fe); border-radius: 999px; padding: 3px 10px; }
.report-title { text-align: center; font-size: 20px; font-weight: 700; margin-bottom: 4px; }
.report-stats { display: flex; gap: 12px; margin: 14px 0; }
.rstat { flex: 1; background: #f8fafc; border-radius: 10px; padding: 12px 8px; text-align: center; }
.rstat b { font-size: 20px; color: var(--primary); display: block; margin-bottom: 2px; word-break: break-all; }
.report-h { font-weight: 700; margin: 14px 0 6px; }
.kbar-row { display: flex; align-items: center; gap: 10px; margin: 6px 0; }
.kbar-name { width: 150px; text-align: right; font-size: 13px; flex-shrink: 0; }
.kbar-track { flex: 1; height: 10px; background: #eef2f7; border-radius: 5px; overflow: hidden; }
.kbar { height: 10px; background: var(--primary); border-radius: 5px; }
.report-ana { line-height: 1.9; font-size: 14px; }

/* ---------- 学情报告排版（分节卡片+统计表） ---------- */
.rep-ana { display: flex; flex-direction: column; gap: 12px; }
.rep-sec { background: #f8fafc; border: 1px solid var(--border); border-radius: 12px; padding: 13px 16px; }
.rep-sec-h { display: flex; align-items: center; gap: 8px; font-size: 15px; font-weight: 700; color: var(--title, #2b3445); margin-bottom: 4px; }
.rep-sec-ic { font-size: 16px; }
.rep-p { font-size: 14px; line-height: 1.95; color: #2b3445; margin: 7px 0; text-align: justify; }
.rep-li { display: flex; gap: 10px; margin: 9px 0; }
.rep-li-n { flex: none; width: 22px; height: 22px; border-radius: 50%; background: var(--primary); color: #fff; font-size: 12.5px; font-weight: 700; display: flex; align-items: center; justify-content: center; margin-top: 3px; }
.rep-li-t { flex: 1; font-size: 14px; line-height: 1.95; color: #2b3445; text-align: justify; }
.rep-tbl { width: 100%; border-collapse: collapse; font-size: 13.5px; margin: 6px 0; }
.rep-tbl th, .rep-tbl td { border: 1px solid var(--border); padding: 7px 12px; text-align: left; }
.rep-tbl th { background: #f1f5f9; font-weight: 700; color: var(--text-2); }
.rep-tbl td:nth-child(2), .rep-tbl td:nth-child(3), .rep-tbl th:nth-child(2), .rep-tbl th:nth-child(3) { text-align: center; width: 90px; }

/* ---------- 班级看板 ---------- */
.board-dual { display: flex; gap: 18px; margin-bottom: 18px; align-items: stretch; }
.board-dual > .report-view { flex: 1; min-width: 0; margin-bottom: 0 !important; }
/* 看板双图白卡：固定同高对称，内容超出各自纵向滚动 */
.board-chart-box { height: 300px; overflow-y: auto; overflow-x: hidden; background: #ffffff; border: 1px solid var(--border); border-radius: 10px; padding: 6px; }
.board-chart-box .report-chart { border: none; border-radius: 0; margin: 0 auto; }
@media (max-width: 900px) { .board-dual { flex-direction: column; } }
.board-flex { display: flex; gap: 22px; flex-wrap: wrap; align-items: flex-start; }
.board-flex-tbl { flex: 1; min-width: 300px; }
.board-wrong-stus { font-size: 12.5px; color: var(--text-3); margin-top: 8px; }

/* ========== 通用分页条 ========== */
.pg-bar { display: flex; align-items: center; justify-content: center; gap: 6px; flex-wrap: wrap; margin: 18px 0 10px; }
.pg-btn { border: 1px solid var(--border); background: #fff; border-radius: 8px; padding: 5px 12px; font-size: 13px; cursor: pointer; color: var(--text); transition: all .15s; }
.pg-btn:hover { border-color: var(--primary); color: var(--primary); }
.pg-btn.cur { background: var(--primary); border-color: var(--primary); color: #fff; font-weight: 600; }
.pg-btn.off { opacity: .38; cursor: default; }
.pg-btn.off:hover { border-color: var(--border); color: var(--text); }
.pg-dots { color: var(--text-3); padding: 0 2px; }
.pg-info { font-size: 12px; color: var(--text-2); margin-left: 8px; }

/* 错题学科标签 */
.qtag.subj { background: #e8f0fe; color: #1a56db; }

/* 学情报告统计图 */
.report-chart { display: block; margin: 8px auto 14px; border: 1px solid var(--border); border-radius: 10px; }

/* ================= 界面美化增强（20260921r） ================= */
/* 细滚动条 */
::-webkit-scrollbar { width: 9px; height: 9px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: #cdd5e1; border-radius: 5px; border: 2px solid transparent; background-clip: content-box; }
::-webkit-scrollbar-thumb:hover { background: #aab6c8; background-clip: content-box; border: 2px solid transparent; }

/* 启动页 */
.boot-logo { background: var(--primary-grad); -webkit-background-clip: text; background-clip: text; color: transparent; }

/* 登录页：渐变背景加光晕 */
#login-view { background:
  radial-gradient(900px 500px at 85% -10%, rgba(196,181,253,.55) 0%, transparent 60%),
  radial-gradient(700px 500px at -10% 110%, rgba(var(--primary-rgb),.45) 0%, transparent 55%),
  linear-gradient(135deg, var(--primary-title) 0%, var(--primary) 55%, var(--primary-soft) 100%); }
.login-card { border-radius: 20px; padding: 40px 42px 32px; box-shadow: 0 24px 60px rgba(15,23,42,.28); }
.login-title { background: var(--primary-grad); -webkit-background-clip: text; background-clip: text; color: transparent; }
.login-tabs { border-radius: 10px; }

/* 弹窗弹出动画 */
.modal { animation: mpop .18s ease; border-radius: 16px; }
@keyframes mpop { from { opacity: 0; transform: translateY(10px) scale(.985); } to { opacity: 1; transform: none; } }
#modal-wrap { backdrop-filter: blur(2px); }

/* 题库首页入口卡：图标渐变底 + 悬浮上浮 */
.entry-card { border-radius: 16px; padding: 34px 22px; }
.entry-card:hover { box-shadow: var(--shadow-lg); transform: translateY(-3px); }
.entry-ic { width: 74px; height: 74px; margin: 0 auto 14px; border-radius: 20px; display: flex; align-items: center; justify-content: center; font-size: 36px;
  background: var(--primary-chip-grad); box-shadow: inset 0 0 0 1px rgba(var(--primary-rgb),.12); }

/* 教辅封面卡 / 学生卡悬浮感 */
.book-card, .stu-card { border-radius: 14px; transition: all .18s ease; }
.book-card:hover, .stu-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-lg); border-color: var(--primary-line); }
.stu-ava { background: var(--primary-grad); color: #fff; box-shadow: 0 3px 10px rgba(var(--primary-rgb),.3); }

/* 题目卡片：更柔和边框与悬浮 */
.qcard { border-radius: 12px; }
.qcard:hover { box-shadow: 0 6px 18px rgba(var(--primary-rgb),.1); }

/* 筛选胶囊 / 分页当前页：渐变填充 */
.fbtn { transition: all .18s; }
.fbtn.active { background: var(--primary-grad); border-color: transparent; box-shadow: 0 2px 8px rgba(var(--primary-rgb),.3); }
.pg-btn.cur { background: var(--primary-grad); border-color: transparent; box-shadow: 0 2px 8px rgba(var(--primary-rgb),.3); }

/* 章节树过渡 */
.tree-item { transition: background .12s, color .12s; border-radius: 8px; }
.side-tabs button { transition: color .15s, border-color .15s; }

/* 加题篮按钮渐变 */
.btn-cart { background: linear-gradient(135deg, #ffa53d 0%, #ff8f1f 100%); box-shadow: 0 2px 8px rgba(255,143,31,.35); }
.btn-cart:hover { background: linear-gradient(135deg, #ff9a26 0%, #f07e0a 100%); box-shadow: 0 4px 12px rgba(255,143,31,.42); }
.btn-cart.in { background: #fff; box-shadow: none; }

/* 上传拖拽区 */
.dropzone { border-radius: 16px; transition: all .2s; }
.dropzone:hover, .dropzone.over { box-shadow: 0 6px 20px rgba(var(--primary-rgb),.1); }

/* 组卷侧栏 / 记录卡 */
.paper-side { border-radius: 14px; box-shadow: var(--shadow); }
.rec-item { border-radius: 12px; transition: box-shadow .15s; }
.rec-item:hover { box-shadow: var(--shadow-md); }

/* 学情报告统计块 */
.rstat { border: 1px solid #eef2f7; transition: all .15s; }
.rstat:hover { box-shadow: var(--shadow-md); }

/* 输入控件圆角统一 */
.form-row input, .form-row select, .form-row textarea { border-radius: 9px; }
.btn { border-radius: 9px; }

/* AI 识别/批改进度条 */
.ai-prog-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; font-size: 13px; margin: 8px 0 5px; }
.ai-prog-phase { color: var(--text); }
.ai-prog-time { color: var(--text-3); font-size: 12px; white-space: nowrap; }
.ai-prog-barline { display: flex; align-items: center; gap: 8px; }
.ai-prog-track { flex: 1; height: 8px; background: #e8edf5; border-radius: 99px; overflow: hidden; }
.ai-prog-fill { height: 100%; width: 0%; background: var(--primary-bar-grad); border-radius: 99px; transition: width .4s ease; }
.ai-prog-pct { font-size: 12px; color: var(--text-2); white-space: nowrap; }
.ai-prog-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 7px; }
.ai-prog-chip { font-size: 12px; padding: 2px 9px; border-radius: 99px; background: #f1f5f9; color: var(--text-2); border: 1px solid var(--border); transition: all .2s; }
.ai-prog-chip.run { background: var(--primary-light); color: var(--primary); border-color: var(--primary-line); }
.ai-prog-chip.ok { background: #e8f7ee; color: var(--success); border-color: #bfe8cd; }
.ai-prog-chip.bad { background: #fdecec; color: var(--danger); border-color: #f5c2c2; }
.ai-prog-hint { font-size: 12px; color: #b45309; margin-top: 6px; min-height: 0; }
.ai-prog-hint:empty { display: none; }

/* 批改/导入增强徽标与错因标签 */
.gi-badge.warn { background: #fff7e8; color: var(--warning); border: 1px solid #f3d9a8; }
.gi-badge.bank { background: var(--primary-light); color: var(--primary); border: 1px solid var(--primary-line); }
.qtag.err { background: #fdecec; color: var(--danger); border: 1px solid #f5c2c2; }
.qtag.ok { background: #d1fae5; color: #059669; border: 1px solid #a7f3d0; }
.qop-link.ok { color: #059669; }
.qop-link.ok:hover { color: #047857; }
.err-tags { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin: 4px 0; }
.qgap-warn { background: #fdecec; color: var(--danger); border: 1px solid #f5c2c2; border-radius: 8px; padding: 10px 14px; margin: 10px 0; font-size: 13px; line-height: 1.7; }

/* ================= 布局第三轮（20260922g：题卡=菁优网 / 试卷列表=学科网） ================= */
/* ---- 题卡底部行（菁优网式：左元信息、右操作链接+橙篮） ---- */
.qcard-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap;
  margin-top: 8px; padding-top: 8px; border-top: 1px dashed #e9edf4; }
.qcard-meta { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; font-size: 12px; color: var(--text-3); min-width: 0; }
.qcard-meta .qsrc-line { margin: 0; }
.qmeta-date { color: var(--text-3); }
.qcard-ops { display: flex; align-items: center; gap: 12px; margin-left: auto; flex-wrap: wrap; }

/* ---- 题目搜索行（菁优网关键词搜索 + 右侧题数） ---- */
.q-search-row { display: flex; align-items: center; gap: 8px; margin: 2px 0 12px; }
.q-search { flex: 0 1 260px; min-width: 140px; padding: 7px 12px; border: 1px solid var(--border); border-radius: 9px;
  font-size: 13px; background: #fff; outline: none; transition: border-color .15s, box-shadow .15s; }
.q-search:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(var(--primary-rgb),.12); }
.q-count { font-size: 13px; color: var(--text-3); }

/* ---- 试卷列表（学科网式横向行） ---- */.plist-count { text-align: right; font-size: 13px; color: var(--text-3); margin: 2px 0 8px; }
.paper-list { display: flex; flex-direction: column; gap: 12px; }
.paper-list .paper-row { display: flex; align-items: center; gap: 16px; background: var(--card);
  border: 1px solid var(--border); border-radius: 12px; box-shadow: var(--shadow);
  padding: 14px 18px; cursor: pointer; transition: all .16s ease; }
.paper-list .paper-row:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); border-color: var(--primary-line); }
.prow-ic { width: 52px; height: 62px; flex-shrink: 0; border-radius: 8px;
  background: linear-gradient(160deg, var(--primary-soft) 0%, var(--primary) 100%);
  box-shadow: 0 3px 8px rgba(var(--primary-rgb),.3), inset 0 1px 0 rgba(255,255,255,.25);
  display: flex; align-items: center; justify-content: center; }
.prow-ic-t { color: #fff; font-size: 20px; font-weight: 700; letter-spacing: 1px; }
.prow-main { flex: 1; min-width: 0; }
.prow-title { font-size: 15px; font-weight: 600; color: var(--text); line-height: 1.45;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.paper-row:hover .prow-title { color: var(--primary); }
.prow-tags { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 6px; }
.prow-tag { font-size: 11.5px; color: var(--text-2); background: var(--bg); border: 1px solid var(--border);
  border-radius: 6px; padding: 2px 8px; }
.prow-meta { font-size: 12px; color: var(--text-3); margin-top: 5px; }
.prow-ops { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }
@media (max-width: 720px) {
  .paper-list .paper-row { flex-wrap: wrap; }
  .prow-ops { width: 100%; justify-content: flex-end; }
}

/* ================= 版心居中（20260922h：导航栏与内容同宽、两侧空白对称） ================= */
/* 版心=侧栏210+栏距12+题区876(860+内边距16)≈1100：顶栏与下方内容两边严格对齐 */
.shell { max-width: 1100px; width: 100%; margin-left: auto; margin-right: auto; }
.topbar-in { display: flex; align-items: center; gap: 20px; }
.topbar-in nav { flex: 1; justify-content: center; }
.topbar nav { gap: 6px; }
.topbar nav button { padding: 8px 18px; font-size: 14.5px; border-radius: 8px; position: relative; }
.topbar nav button.active { color: var(--primary); background: transparent; font-weight: 700; }
.topbar nav button.active::after { content: ""; position: absolute; left: 50%; transform: translateX(-50%);
  bottom: 1px; width: 22px; height: 3px; border-radius: 2px; background: var(--primary-grad); }
/* 目录栏收窄贴近题目区（菁优网式：窄侧栏+题目区作为一个整体居中） */
.workspace.shell { align-items: stretch; justify-content: center; gap: 12px; }
.workspace.shell .sidebar { width: 210px; margin-top: 20px; position: sticky; top: 78px; align-self: flex-start;
  height: calc(100vh - 98px); overflow-y: auto; overscroll-behavior: contain;
  scrollbar-width: thin; scrollbar-color: #c3cfe8 transparent; } /* 吸顶固定+高度撑满整屏（左右对称）+整栏独立滑动 */
/* 侧栏专属滑动条：细圆角滑块，悬浮加深 */
.workspace.shell .sidebar::-webkit-scrollbar { width: 6px; }
.workspace.shell .sidebar::-webkit-scrollbar-track { background: transparent; }
.workspace.shell .sidebar::-webkit-scrollbar-thumb { background: #c3cfe8; border-radius: 3px; }
.workspace.shell .sidebar::-webkit-scrollbar-thumb:hover { background: #94a8d0; }

/* ================= 字体排版优化（20260922t） ================= */
/* 题干/选项：试卷衬线排版——中文宋体+西文 Times New Roman，与下载的 Word 试卷同款观感 */
.qcard-body { font-family: "Times New Roman", "宋体", SimSun, serif; font-size: 16px; line-height: 2.0;
  letter-spacing: 0.2px; color: #1f2a3d; }
.qcard-body .opt-row { font-size: 15.5px; }
/* 答案/解析区同款衬线 */
.qsec { font-family: "Times New Roman", "宋体", SimSun, serif; font-size: 15px; line-height: 1.95; }
/* 侧栏字体层次：标题加粗、条目字号统一（锁定无衬线 UI 字体，字号收小更精致） */
.workspace.shell .sidebar { font-family: "Microsoft YaHei", "PingFang SC", "HarmonyOS Sans SC", "Noto Sans SC", system-ui, sans-serif; }
.side-head .t { font-size: 13px; font-weight: 600; color: var(--text-2); letter-spacing: 0.5px; }
.tree-item { font-size: 13px; padding: 6px 12px; }
.tree-item .name { font-weight: 500; letter-spacing: 0.2px; }
.tree-item.active .name { font-weight: 600; }
.tree-children { padding-left: 14px; }
/* 面包屑与标签微调 */
.crumb { font-size: 12.5px; letter-spacing: 0.3px; }
.qtag { letter-spacing: 0.3px; }
.content.qnarrow { flex: 0 1 auto; width: 860px; margin: 0; padding: 20px 8px 60px; } /* 收紧左内边距，侧栏更贴近 */

/* ---- 题卡头部标签行（题型/知识点/来源回顶部） ---- */
.qcard-head { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; margin-bottom: 6px; font-size: 12px; color: var(--text-3); }
.qcard-head .qsrc-line { margin: 0; }
/* ---- 题卡底部行：左=展开/同类型链接，右=编辑/删除+橙篮 ---- */
.qcard-foot { justify-content: space-between; }
.qcard-ops-l, .qcard-ops-r { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.qcard-ops-r { margin-left: auto; }

/* ================= 界面重设计（20260922d：参照智学网/菁优网） ================= */
/* 内容栏居中限宽：宽屏下不再铺满，阅读更舒适 */
.content { max-width: 1160px; width: 100%; margin: 0 auto; }

/* ---- 题库首页统计条（智学网式数据概览） ---- */
.stat-strip { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 14px; margin-bottom: 20px; }
.stat-card { background: var(--card); border: 1px solid var(--border); border-radius: 14px; box-shadow: var(--shadow);
  padding: 16px 18px; display: flex; align-items: center; gap: 14px; transition: all .18s ease; }
.stat-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); border-color: var(--primary-line); }
.stat-ic { width: 46px; height: 46px; border-radius: 13px; flex-shrink: 0; display: flex; align-items: center; justify-content: center;
  font-size: 22px; background: var(--primary-chip-grad); box-shadow: inset 0 0 0 1px rgba(var(--primary-rgb),.12); }
.stat-num { font-size: 22px; font-weight: 700; color: var(--text); line-height: 1.25; }
.stat-unit { font-size: 13px; font-weight: 400; color: var(--text-3); }
.stat-lab { font-size: 12.5px; color: var(--text-2); margin-top: 1px; }

/* ---- 试卷题库卡片网格（智学网热门试卷推荐式） ---- */
.paper-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; }
.paper-card { background: var(--card); border: 1px solid var(--border); border-radius: 14px; box-shadow: var(--shadow);
  padding: 16px 18px 13px; cursor: pointer; transition: all .18s ease; display: flex; flex-direction: column; }
.paper-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-lg); border-color: var(--primary-line); }
.paper-card-top { display: flex; align-items: center; gap: 8px; margin-bottom: 9px; }
.paper-badge { background: var(--primary-grad); color: #fff; font-size: 12px; font-weight: 600; padding: 2px 10px; border-radius: 6px;
  box-shadow: 0 2px 6px rgba(var(--primary-rgb),.28); letter-spacing: 0.5px; }
.paper-badge.none { background: #eef2f7; color: var(--text-3); box-shadow: none; }
.paper-region { font-size: 12px; color: var(--text-3); }
.paper-card-name { font-weight: 700; font-size: 15.5px; line-height: 1.55; letter-spacing: 0.3px; word-break: break-all;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.paper-card-meta { color: var(--text-3); font-size: 12.5px; margin-top: 7px; }
.paper-card-ops { display: flex; align-items: center; gap: 6px; margin-top: 12px; padding-top: 10px; border-top: 1px solid #f0f2f6; }
.paper-card-ops .sp { flex: 1; }

/* ---- 试卷详情侧栏：整份下载盒（菁优网右侧工具栏式） ---- */
.pd-dl { margin: 0 14px 14px; background: linear-gradient(160deg, var(--primary-tint) 0%, var(--primary-light) 100%);
  border: 1px solid #d6e4fb; border-radius: 12px; padding: 14px; }
.pd-dl-t { font-weight: 700; font-size: 13.5px; margin-bottom: 10px; color: var(--text); letter-spacing: 0.5px; }
.paper-info { border-bottom: 1px dashed var(--border); margin-bottom: 12px; }

/* ---- 题型标签按类型着色（智学网式彩签） ---- */
.qtag[data-t="选择题"] { background: #e8f0fe; color: #1a56db; }
.qtag[data-t="填空题"] { background: #e6f7ee; color: #0d9348; }
.qtag[data-t="判断题"] { background: #e0f2f1; color: #0f766e; }
.qtag[data-t="计算题"] { background: #f3e8ff; color: var(--primary-dark); }
.qtag[data-t="解答题"] { background: #fff3e2; color: #d97706; }
.qtag[data-t="作图题"] { background: #fce7f3; color: #db2777; }

/* ---- 学生卡片增强：错题数红胶囊 + 头像投影 ---- */
.stu-ava { box-shadow: 0 4px 12px rgba(15,23,42,.18); letter-spacing: 0; }
.stu-cnt { display: inline-block; margin-top: 8px; padding: 3px 12px; border-radius: 99px;
  background: #fee2e2; color: #b91c1c; font-size: 12.5px; font-weight: 600; }
.stu-card { position: relative; }
.stu-card::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 4px; border-radius: 14px 14px 0 0;
  background: var(--primary-grad); opacity: 0; transition: opacity .18s; }
.stu-card:hover::before { opacity: 1; }
.stu-head { border-radius: 14px; padding: 18px 22px; }

/* ---- 内容标题：左侧渐变强调条 ---- */
.content-head h2 { position: relative; padding-left: 13px; }
.content-head h2::before { content: ""; position: absolute; left: 0; top: 3px; bottom: 3px; width: 4px;
  border-radius: 2px; background: var(--primary-grad); }

/* ================= 界面重设计第二轮（20260922e） ================= */
/* 学科选择：一排 3 个对称居中（3×3 网格，无孤儿卡） */
.subj-grid { grid-template-columns: repeat(3, 1fr); gap: 16px; max-width: 1020px; margin: 0 auto; }
.subj-card { display: flex; align-items: center; gap: 14px; text-align: left; padding: 20px 22px; }
.subj-card .entry-ic { width: 54px; height: 54px; margin: 0; font-size: 26px; border-radius: 15px; flex-shrink: 0; }
.subj-card .entry-t { font-size: 15.5px; margin-bottom: 3px; }
.subj-card .entry-d { font-size: 12.5px; }
.subj-info { min-width: 0; }

/* 题目列表窄栏居中：题卡向中间缩，两侧留呼吸空白（参考菁优网/智学网阅读宽度） */
.content.qnarrow { max-width: 860px; }
@media (max-width: 900px) {
  .subj-grid { grid-template-columns: repeat(2, 1fr); max-width: none; }
}
@media (max-width: 560px) {
  .subj-grid { grid-template-columns: 1fr; }
}

/* 题目卡片：更紧凑精致的密度 */
.qcard { padding: 14px 20px 10px; margin-bottom: 12px; }
.qcard-head { margin-bottom: 6px; gap: 7px; }
.qcard-body { font-size: 14.5px; line-height: 1.8; }
.opt-row { gap: 2px 18px; margin: 6px 0 2px; }
.qsrc-line { margin-top: 6px; font-size: 12px; }
.qcard-ops { margin-top: 8px; padding-top: 8px; gap: 14px; }
.qfold .qsec:first-child { margin-top: 8px; }

/* 侧栏试卷信息排版 */
.paper-info .t { font-size: 15px; }
.sidebar { width: 264px; }

/* 学生自定义头像 */
.stu-ava-img { object-fit: cover; padding: 0; border: none; }
.stu-ava-edit { position: relative; width: 76px; height: 76px; cursor: pointer; flex-shrink: 0; border-radius: 50%; }
.stu-ava-edit .stu-ava { width: 76px; height: 76px; margin: 0; font-size: 32px; }
.stu-ava-edit .stu-ava-img { display: block; }
.stu-ava-tip { position: absolute; left: 0; right: 0; bottom: 0; background: rgba(15,23,42,.5); color: #fff;
  font-size: 11px; text-align: center; padding: 2px 0 3px; border-radius: 0 0 38px 38px; letter-spacing: 1px; }
.stu-ava-edit:hover .stu-ava-tip { background: rgba(var(--primary-rgb),.65); }

/* ================= 字体优化（20260922w） ================= */
/* 品牌名：渐变蓝文字 + 加粗拉字距，更有辨识度 */
.topbar .brand { font-size: 19px; font-weight: 800; letter-spacing: 2px;
  background: linear-gradient(120deg, var(--primary-deep) 0%, var(--primary) 55%, var(--primary-soft) 100%);
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent; }
/* 页面主标题（题库中心 · 选择学科 等）：更大更挺 */
.content-head h2 { font-size: 22px; font-weight: 800; letter-spacing: 2px; color: var(--primary-title); font-family: "Times New Roman", "宋体", SimSun, serif; }
/* 学生卡片姓名：加粗加大，与副信息拉开层次 */
.stu-name { font-size: 17px; font-weight: 700; letter-spacing: 0.8px; color: var(--text); }
.stu-info .stu-name { font-size: 20px; font-weight: 700; letter-spacing: 1px; }
/* 下拉框（全部知识点/全部错因 等）：字重统一、 hover 反馈 */
select { font-weight: 500; color: var(--text); border-radius: 8px; }
select.filter-sel, .ws-filter select { padding: 5px 26px 5px 10px; border: 1px solid var(--border);
  border-radius: 8px; background: #fff; font-size: 13.5px; transition: border-color .15s, box-shadow .15s; }
select.filter-sel:hover, .ws-filter select:hover { border-color: var(--primary); }
select.filter-sel:focus, .ws-filter select:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(var(--primary-rgb),.12); outline: none; }

/* ================= 字体统一（20260922x） ================= */
/* 学生姓名/侧栏章节 → 与题库题目同款衬线（Times New Roman + 宋体），摆脱黑体方正感 */
.stu-name, .stu-info .stu-name { font-family: "Times New Roman", "宋体", SimSun, serif;
  font-weight: 600; letter-spacing: 0.5px; }
.workspace.shell .sidebar { font-family: "Times New Roman", "宋体", SimSun, serif; }
.side-head .t { font-weight: 700; letter-spacing: 0.8px; }
.tree-item .name { font-weight: 500; }
.tree-item.active .name { font-weight: 700; }
/* KaTeX 字形本身比 Times New Roman 大约 6%，缩到 0.94em 与正文 TNR 字母视觉同号 */
.katex { font-size: 0.94em; }

/* ================= 题库中心紫色系（20260922y） ================= */
/* 顶部横幅：生成的紫色教育插画 + 叠加标题 */
.bank-banner { position: relative; border-radius: 18px; overflow: hidden; margin-bottom: 22px;
  box-shadow: 0 8px 28px rgba(var(--primary-rgb),.22); }
.bank-banner img { width: 100%; height: 112px; object-fit: cover; object-position: center 30%; display: block; }
.bb-txt { position: absolute; left: 30px; top: 50%; transform: translateY(-50%); }
.bb-t { font-size: 22px; font-weight: 800; color: var(--primary-title); letter-spacing: 3px; }
.bb-s { margin-top: 6px; font-size: 13px; color: var(--primary-sub); letter-spacing: 0.5px; }
/* 学科卡：学科底色图标 + A/B 双态（有内容白卡实心钮 / 无内容灰卡虚线钮）+ 上浮按压动效 */
.subj-grid { max-width: 1080px; }
.subj-card { border: 1px solid var(--primary-cardline); border-radius: 16px; padding: 24px 22px;
  box-shadow: 0 2px 12px rgba(var(--primary-rgb),.07); cursor: pointer;
  transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease, background .18s ease; }
.subj-card:hover { border-color: var(--primary-hoverline); box-shadow: 0 12px 30px rgba(var(--primary-rgb),.20); transform: translateY(-4px); }
.subj-card:active { transform: translateY(-1px) scale(.99); box-shadow: 0 4px 14px rgba(var(--primary-rgb),.14); }
.subj-card .subj-ic { background: var(--subj-bg, var(--primary-chip-grad));
  width: 56px; height: 56px; font-size: 27px; border-radius: 16px;
  display: flex; align-items: center; justify-content: center;
  box-shadow: inset 0 0 0 1.5px color-mix(in srgb, var(--subj-fg, var(--primary-soft)) 22%, transparent); }
.subj-card .entry-t { font-size: 16.5px; font-weight: 700; color: var(--primary-title); }
.subj-card .entry-d { color: var(--primary-sub); }
/* A 态：有内容——纯白卡 + 标题放大加粗 */
.subj-card.has-data { background: #fff; }
.subj-card.has-data .entry-t { font-size: 19px; }
.subj-card.has-data .entry-d { font-size: 13.5px; color: var(--text-3); margin-top: 4px; }
/* B 态：无内容——浅灰卡 + 图标去彩 + 标题常规字重 */
.subj-card.is-empty { background: #f7f8fa; }
.subj-card.is-empty .subj-ic { filter: grayscale(.55); opacity: .8; }
.subj-card.is-empty .entry-t { font-weight: 600; color: var(--text-2); }
.subj-card.is-empty .entry-d { font-size: 13px; color: var(--text-3); margin-top: 4px; }
/* 右下操作钮：实心（进入题库）/ 虚线（立即建库） */
.subj-go { margin-left: auto; flex-shrink: 0; font-size: 12.5px; font-weight: 600; padding: 7px 14px;
  border-radius: 999px; white-space: nowrap; transition: all .18s ease; }
.go-solid { background: var(--primary-grad); color: #fff; box-shadow: 0 3px 10px rgba(var(--primary-rgb),.30); }
.subj-card:hover .go-solid { filter: brightness(1.06); box-shadow: 0 6px 16px rgba(var(--primary-rgb),.42); }
.go-dashed { border: 1.5px dashed var(--subj-fg, var(--primary-soft)); color: var(--subj-fg, var(--primary)); background: #fff; }
.subj-card:hover .go-dashed { background: var(--subj-bg, var(--primary-light)); border-style: solid; }
/* ---- 全局搜题弹窗（20260923a4） ---- */
.gs-bar { display: flex; gap: 10px; margin-bottom: 12px; }
.gs-input { flex: 1; border: 1px solid var(--border); border-radius: 10px; padding: 10px 14px; font: inherit; font-size: 14px; }
.gs-input:focus { outline: none; border-color: var(--primary-soft); box-shadow: 0 0 0 3px rgba(var(--primary-rgb),.12); }
.gs-list { max-height: 420px; overflow-y: auto; display: flex; flex-direction: column; gap: 8px; }
.gs-tip { color: var(--text-3); font-size: 13px; text-align: center; padding: 26px 0; }
.gs-count { font-size: 12.5px; color: var(--text-3); }
.gs-row { border: 1px solid var(--border); border-radius: 10px; padding: 10px 14px; cursor: pointer; transition: all .15s ease; }
.gs-row:hover { border-color: var(--primary-hoverline); background: var(--primary-tint); transform: translateY(-1px); }
.gs-src { font-size: 12px; color: var(--primary-sub); margin-bottom: 4px; font-weight: 600; }
.gs-snip { font-size: 13.5px; color: var(--text); line-height: 1.7; word-break: break-all; }
/* 统计卡：隔张紫渐变高亮（参考菁优网风格） */
.stat-card { border: 1px solid var(--primary-cardline); border-radius: 16px; padding: 20px 22px;
  box-shadow: 0 2px 12px rgba(var(--primary-rgb),.07); }
.stat-card:hover { border-color: var(--primary-hoverline); box-shadow: 0 10px 26px rgba(var(--primary-rgb),.18); }
.stat-card.hl { background: linear-gradient(135deg, var(--primary-soft) 0%, var(--primary) 100%); border-color: transparent;
  box-shadow: 0 10px 26px rgba(var(--primary-rgb),.38); }
.stat-card.hl:hover { box-shadow: 0 14px 32px rgba(var(--primary-rgb),.46); }
.stat-ic { background: var(--primary-light); box-shadow: inset 0 0 0 1px rgba(var(--primary-rgb),.10); }
.stat-card.hl .stat-ic { background: rgba(255,255,255,.22); box-shadow: none; }
.stat-card.hl .stat-num { color: #fff; }
.stat-card.hl .stat-unit { color: rgba(255,255,255,.85); }
.stat-card.hl .stat-lab { color: rgba(255,255,255,.88); }
.stat-num { font-size: 24px; font-weight: 800; color: var(--primary-title); }
/* 三入口卡：彩色图标徽章（紫/薄荷/橙，仿参考图 3D 图标色块） */
.entry-card { border: 1px solid var(--primary-cardline); border-radius: 16px; }
.entry-card:hover { border-color: var(--primary-hoverline); box-shadow: 0 10px 28px rgba(var(--primary-rgb),.18); }
.entry-ic.badge { width: 64px; height: 64px; border-radius: 18px; margin: 0 auto 14px;
  display: flex; align-items: center; justify-content: center; font-size: 30px;
  box-shadow: 0 6px 16px rgba(0,0,0,.08); }
.entry-ic.badge.c1 { background: linear-gradient(135deg, var(--primary-soft) 0%, var(--primary-soft) 100%); }
.entry-ic.badge.c2 { background: linear-gradient(135deg, #99f6e4 0%, #5eead4 100%); }
.entry-ic.badge.c3 { background: linear-gradient(135deg, #fed7aa 0%, #fdba74 100%); }
.entry-card .entry-t { color: var(--primary-title); }

/* ================= 列表行字体统一（20260922z1） ================= */
/* 试卷/知识点/组卷记录行：名称=题目衬线大号，名称下方信息收小 */
.prow-title, .know-name, .rec-name { font-family: "Times New Roman", "宋体", SimSun, serif;
  font-size: 16.5px; font-weight: 700; color: var(--primary-title); letter-spacing: 0.3px; }
.paper-row:hover .prow-title { color: var(--primary); }
.prow-tags { margin-top: 3px; }
.prow-tag, .paper-badge { font-size: 11px; padding: 1px 7px; }
.prow-meta { font-size: 11.5px; margin-top: 4px; }
.rec-body .muted { font-size: 12px; margin-top: 3px; }

/* ================= 细节优化（20260922z2） ================= */
/* 试卷行：标签与收录时间齐平、名称收小、白卡收紧 */
.prow-tag, .paper-badge { font-size: 11.5px; padding: 1px 6px; line-height: 1.5; }
.prow-title { font-size: 15px; }
.paper-list .paper-row { padding: 10px 16px; gap: 12px; }
.prow-ic { width: 44px; height: 54px; }
.prow-ic-t { font-size: 17px; }
/* 教辅卡：编辑/删除同一排（窄卡片不换行） */
.book-edit { flex-wrap: nowrap; gap: 6px; }
.book-edit .btn { flex: 1 1 0; padding-left: 0; padding-right: 0; white-space: nowrap; }

/* ================= 横幅扩展与试卷行再收缩（20260922z3） ================= */
/* 横幅右侧操作按钮（+ 新建试卷） */
.bb-act { position: absolute; right: 30px; top: 50%; transform: translateY(-50%); }
.bb-act .btn { box-shadow: 0 4px 14px rgba(var(--primary-rgb),.35); }
/* 收录时间上移与标签同一排，试卷卡片再收缩 */
.prow-meta.inline { margin-top: 0; margin-left: 6px; }
.prow-tags { row-gap: 4px; }

/* ================= 用户管理（20260922z4） ================= */
.member-row { display: flex; align-items: center; gap: 12px; padding: 12px 14px;
  border: 1px solid var(--border); border-radius: 12px; margin-bottom: 8px; background: #fff; }
.member-main { flex: 1; min-width: 0; }
.member-email { font-weight: 600; font-size: 14.5px; word-break: break-all; }

/* ================= 个人中心 + 题库只读共享（20260922z5） ================= */
/* 顶栏用户入口（头像+邮箱，点击进个人中心） */
.user-chip { display: flex; align-items: center; gap: 8px; border: 1px solid var(--border);
  background: #fff; border-radius: 999px; padding: 4px 12px 4px 4px; cursor: pointer;
  font: inherit; color: inherit; transition: border-color .15s, box-shadow .15s; }
.user-chip:hover { border-color: var(--primary); box-shadow: 0 2px 10px rgba(var(--primary-rgb),.18); }
.user-ava { width: 26px; height: 26px; border-radius: 50%; color: #fff; font-size: 13px; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, var(--primary-soft), var(--primary-dark)); }
.user-email { font-size: 13px; color: var(--text-2, #4b4565); max-width: 180px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* 共享只读徽标 */
.share-badge { display: inline-flex; align-items: center; gap: 3px; font-size: 11.5px; font-weight: 600;
  color: var(--primary-deep); background: var(--primary-light); border: 1px solid var(--primary-line); border-radius: 999px;
  padding: 2px 10px; white-space: nowrap; }
/* 个人中心 */
.prof-head { display: flex; align-items: center; gap: 14px; margin-bottom: 16px; }
.prof-ava { width: 52px; height: 52px; border-radius: 50%; color: #fff; font-size: 22px; font-weight: 800;
  display: flex; align-items: center; justify-content: center; flex: none;
  background: linear-gradient(135deg, var(--primary-soft), var(--primary-dark)); box-shadow: 0 4px 14px rgba(var(--primary-rgb),.3); }
.prof-email { font-size: 16px; font-weight: 700; word-break: break-all; }
.prof-sub { display: flex; align-items: center; gap: 8px; margin-top: 5px; }
.prof-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-bottom: 14px; }
.prof-stat { border: 1px solid var(--border); border-radius: 12px; padding: 10px 6px; text-align: center;
  background: var(--primary-tint); }
.prof-stat-ic { font-size: 17px; }
.prof-stat-n { font-size: 19px; font-weight: 800; color: var(--primary-ink); margin-top: 2px; }
.prof-stat-l { font-size: 11.5px; color: var(--muted, #8a83a5); margin-top: 1px; }
.prof-share { border: 1px solid var(--primary-line); border-radius: 12px; padding: 12px 14px;
  background: linear-gradient(135deg, var(--primary-tint), var(--primary-light)); }
.prof-share-t { font-size: 14px; font-weight: 700; color: var(--primary-ink); }
/* 题图迁移日志 */
.mig-log { max-height: 220px; overflow-y: auto; font-size: 12px; line-height: 1.9;
  border: 1px solid var(--border); border-radius: 10px; padding: 8px 12px; background: var(--primary-tint); }

/* ================= 多色系主题（20260922z6） ================= */
/* 语义变量：默认紫；[data-theme] 覆盖即整站换色，banner 插画随主题旋转色相 */
:root {
  --primary-rgb: 154,114,242; --primary-soft: #af95f5; --primary-deep: #7a4fd6;
  --primary-ink: #6338c2; --primary-line: #e0d5f7; --primary-cardline: #efe9fb;
  --primary-hoverline: #c4abf0; --primary-title: #53309e; --primary-sub: #8366c4;
  --primary-tint: #fbf9ff;
  --primary-chip-grad: linear-gradient(135deg, #f5f1fe 0%, #e9dffc 100%);
  --primary-bar-grad: linear-gradient(90deg, #af95f5, #9a72f2);
  --banner-hue: 0deg;
  --banner-sat: 1;
}
:root[data-theme="blue"] {
  --primary: #64a5f5; --primary-dark: #4a90ea; --primary-light: #f1f7ff;
  --primary-grad: linear-gradient(135deg, #8bc1fe 0%, #64a5f5 100%);
  --primary-rgb: 100,165,245; --primary-soft: #8bc1fe; --primary-deep: #3f83dd;
  --primary-ink: #2f66b8; --primary-line: #d0e2f9; --primary-cardline: #e6effc;
  --primary-hoverline: #a5c8f4; --primary-title: #2a55a0; --primary-sub: #5d85bd;
  --primary-tint: #f8fbff;
  --primary-chip-grad: linear-gradient(135deg, #eff5ff 0%, #dde9ff 100%);
  --primary-bar-grad: linear-gradient(90deg, #8bc1fe, #64a5f5);
  --banner-hue: -40deg;
  --banner-sat: 1.15;
}
:root[data-theme="green"] {
  --primary: #10b981; --primary-dark: #059669; --primary-light: #ecfdf5;
  --primary-grad: linear-gradient(135deg, #34d399 0%, #10b981 100%);
  --primary-rgb: 16,185,129; --primary-soft: #34d399; --primary-deep: #047857;
  --primary-ink: #065f46; --primary-line: #bfe6d6; --primary-cardline: #dcf0e8;
  --primary-hoverline: #86d4b8; --primary-title: #065f46; --primary-sub: #4d8f77;
  --primary-tint: #f6fdfb;
  --primary-chip-grad: linear-gradient(135deg, #ecfdf5 0%, #d1fae5 100%);
  --primary-bar-grad: linear-gradient(90deg, #34d399, #10b981);
  --banner-hue: -84deg;
}
:root[data-theme="orange"] {
  --primary: #f97316; --primary-dark: #ea580c; --primary-light: #fff7ed;
  --primary-grad: linear-gradient(135deg, #fb923c 0%, #f97316 100%);
  --primary-rgb: 249,115,22; --primary-soft: #fb923c; --primary-deep: #c2410c;
  --primary-ink: #9a3412; --primary-line: #f0d5bd; --primary-cardline: #f7e6d5;
  --primary-hoverline: #f0b183; --primary-title: #7c2d12; --primary-sub: #a8693f;
  --primary-tint: #fffaf5;
  --primary-chip-grad: linear-gradient(135deg, #fff7ed 0%, #ffedd5 100%);
  --primary-bar-grad: linear-gradient(90deg, #fb923c, #f97316);
  --banner-hue: 141deg;
}
:root[data-theme="pink"] {
  --primary: #ec4899; --primary-dark: #db2777; --primary-light: #fdf2f8;
  --primary-grad: linear-gradient(135deg, #f472b6 0%, #ec4899 100%);
  --primary-rgb: 236,72,153; --primary-soft: #f472b6; --primary-deep: #be185d;
  --primary-ink: #9d174d; --primary-line: #efc9dd; --primary-cardline: #f6dfeb;
  --primary-hoverline: #eba3c6; --primary-title: #831843; --primary-sub: #a54f7d;
  --primary-tint: #fef7fb;
  --primary-chip-grad: linear-gradient(135deg, #fdf2f8 0%, #fce7f3 100%);
  --primary-bar-grad: linear-gradient(90deg, #f472b6, #ec4899);
  --banner-hue: 86deg;
}
:root[data-theme="teal"] {
  --primary: #2eb8b8; --primary-dark: #23a3a3; --primary-light: #e9fafa;
  --primary-grad: linear-gradient(135deg, #5ed3d3 0%, #2eb8b8 100%);
  --primary-rgb: 46,184,184; --primary-soft: #5ed3d3; --primary-deep: #1f9e9e;
  --primary-ink: #157a7a; --primary-line: #c3eaea; --primary-cardline: #ddf2f2;
  --primary-hoverline: #8fdcdc; --primary-title: #0f6b6b; --primary-sub: #4a9d9d;
  --primary-tint: #f6fdfd;
  --primary-chip-grad: linear-gradient(135deg, #e9fafa 0%, #d3f2f2 100%);
  --primary-bar-grad: linear-gradient(90deg, #5ed3d3, #2eb8b8);
  --banner-hue: -64deg;
}
/* banner 插画一张图适配全部色系（底图已压缩色相去杂色，蓝主题加饱和度） */
.bank-banner img { filter: hue-rotate(var(--banner-hue, 0deg)) saturate(var(--banner-sat, 1)); }
/* 色系选择色板（个人中心） */
.theme-swatches { display: flex; gap: 8px; margin-top: 8px; flex-wrap: wrap; }
.theme-sw { display: flex; align-items: center; gap: 7px; padding: 7px 12px; cursor: pointer;
  border: 1.5px solid var(--border); border-radius: 999px; background: #fff; font: inherit;
  font-size: 12.5px; color: var(--text-2); transition: border-color .15s, box-shadow .15s; }
.theme-sw:hover { border-color: var(--primary-soft); }
.theme-sw.cur { border-color: var(--primary); box-shadow: 0 2px 10px rgba(var(--primary-rgb),.22);
  color: var(--primary-deep); font-weight: 600; }
.theme-dot { width: 16px; height: 16px; border-radius: 50%; box-shadow: inset 0 0 0 1px rgba(0,0,0,.08); }
.theme-tick { color: var(--primary); font-weight: 800; }

/* ---- 学生卡片 v2：左侧大头像 + 信息层级 + 悬停操作区（20260923a6） ---- */
.stu-top { display: flex; gap: 14px; align-items: center; }
.stu-ava-wrap { position: relative; flex-shrink: 0; }
.stu-card .stu-ava { width: 84px; height: 84px; font-size: 34px; margin: 0; }
.stu-cam { position: absolute; top: -4px; right: -4px; width: 27px; height: 27px; border-radius: 50%;
  background: #fff; border: 1px solid var(--border); box-shadow: 0 2px 8px rgba(15,23,42,.18);
  font-size: 13px; line-height: 1; cursor: pointer; display: flex; align-items: center; justify-content: center;
  opacity: 0; transform: scale(.8); transition: opacity .18s, transform .18s, border-color .15s; padding: 0; }
.stu-card:hover .stu-cam { opacity: 1; transform: none; }
.stu-cam:hover { border-color: var(--primary); box-shadow: 0 3px 10px rgba(var(--primary-rgb),.3); }
.stu-meta { min-width: 0; }
.stu-card .stu-name { font-size: 20px; font-weight: 700; color: var(--text); }
.stu-cls { margin-top: 3px; font-size: 13.5px; color: var(--text-2); }
/* 「···」更多操作下拉菜单 */
.stu-menu { position: relative; margin-left: auto; }
.stu-more { letter-spacing: 1px; font-weight: 700; }
.stu-drop { position: absolute; right: 0; bottom: calc(100% + 6px); min-width: 148px; padding: 6px;
  background: #fff; border: 1px solid var(--border); border-radius: 10px; box-shadow: var(--shadow-lg);
  display: none; z-index: 30; }
.stu-menu.open .stu-drop { display: block; }
.stu-drop button { display: block; width: 100%; text-align: left; padding: 8px 10px; border: none;
  background: none; font: inherit; font-size: 13px; color: var(--text); border-radius: 7px; cursor: pointer; }
.stu-drop button:hover { background: var(--primary-light); }
.stu-drop button.danger { color: #dc2626; }
.stu-drop button.danger:hover { background: #fef2f2; }

/* ---- 教辅卡操作按钮：平时隐藏，悬停浮现（20260923a7） ---- */
.book-card .bk-ops { opacity: 0; transform: translateY(4px); transition: opacity .18s, transform .18s; pointer-events: none; }
.book-card:hover .bk-ops { opacity: 1; transform: none; pointer-events: auto; }

/* ---- 解析质检列表（20260923a8） ---- */
.audit-list { max-height: 380px; overflow-y: auto; display: flex; flex-direction: column; gap: 6px; }
.audit-row { display: flex; gap: 8px; align-items: flex-start; padding: 8px 10px; border: 1px solid var(--border); border-radius: 10px; cursor: pointer; }
.audit-row:hover { border-color: var(--primary-hoverline); background: var(--primary-tint); }
.audit-row input { margin-top: 3px; }
.audit-main { flex: 1; min-width: 0; }
.audit-stem { font-size: 12px; margin-top: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ---- 批改评语 + 改判理由（20260923b1） ---- */
.gi-comment { margin: 4px 0; padding: 7px 12px; border-radius: 8px; background: #fffbeb; border: 1px solid #fde68a;
  color: #b45309; font-size: 13px; line-height: 1.6; }
.gi-reason-row { display: flex; align-items: center; gap: 8px; margin: 6px 0 2px; padding: 7px 12px;
  border-radius: 8px; background: var(--primary-tint); border: 1px dashed var(--primary-line); }
.gi-reason-row .gi-reason { flex: 1; }
.qsec.stu-cmt { background: #fffbeb; }
.qsec.stu-cmt .lab { color: #b45309; }
