/* base.css — 全局排版与通用组件（只许引用 vars.css 变量） */

* { box-sizing: border-box; margin: 0; padding: 0; }

body {
  font-family: var(--font-ui);
  font-size: var(--fs-14);
  color: var(--color-text);
  background: var(--color-bg-2);
  min-width: 1500px; /* 不做手机版：固定布局，窄屏横向滚动 */
}

a { color: var(--color-primary); text-decoration: none; }
a:hover { text-decoration: underline; }

code, pre, .mono { font-family: var(--font-code); font-size: var(--fs-code); }

/* 布局 */
.page { width: 1500px; margin: 0 auto; padding: 0 20px; }
/* 满宽页面：body 加 fw 类（宽屏下列表/矩阵页铺满利用空间，顶栏仍 1500 居中） */
body.fw .page.main { width: auto; max-width: none; }
.topbar {
  background: var(--color-bg);
  border-bottom: 1px solid var(--color-border);
  font-size: var(--fs-16);
}
.topbar .page {
  display: flex; justify-content: space-between; align-items: center;
  height: 48px; gap: 20px;
}
.topbar .tleft { font-size: var(--fs-16); }
.topbar .tleft a { color: var(--color-primary); }
.topbar .tleft a:hover { text-decoration: underline; }
.topbar .tmid { flex: 1; display: flex; justify-content: center; align-items: center; gap: 16px; }
.topbar .tmid .tip { color: var(--color-warning); }
.topbar .tright { display: flex; align-items: center; gap: 12px; }

/* 顶部课程内 Tab */
.top-tabs { display: flex; align-items: center; gap: 4px; }
.top-tabs a {
  display: inline-block; padding: 6px 14px; color: var(--color-primary);
  border-radius: 4px; font-size: var(--fs-16);
}
.top-tabs a:hover { background: var(--color-bg-2); text-decoration: none; }
.top-tabs a.active { background: var(--color-bg-2); color: var(--color-accent); font-weight: bold; }
.top-tabs .mbadge { margin-left: 6px; }
.top-tabs .mbadge.red { color: #fff; }

.topbar .uname { color: var(--color-text-2); }
.topbar .ulink { color: var(--color-primary); }
.topbar .ulink:hover { text-decoration: underline; }
.topbar .tright form { margin: 0; }
.topbar .btn,
.topbar .btn.small { font-size: var(--fs-16); }

.main { padding: 12px 0 40px; }

/* 页头：标题 + 操作按钮同行 */
.page-head { display: flex; justify-content: flex-start; gap: 12px; align-items: center; margin-bottom: 10px; }
.page-head h2 { font-size: var(--fs-20); margin: 0; }

/* 行内表单错误（13.7）：直接显示在提交按钮上方，不通过 toast 跳动页面 */
.form-error {
  padding: 8px 12px;
  margin-bottom: 12px;
  border: 1px solid var(--color-danger);
  background: #fff5f5;
  color: var(--color-danger);
  border-radius: 4px;
  font-size: var(--fs-14);
}

/* 全局固定 Toast（13.7）：不推动页面布局 */
.toast-container {
  position: fixed;
  top: 60px;
  right: 20px;
  z-index: 1000;
  display: flex;
  flex-direction: column;
  gap: 8px;
  max-width: 360px;
}
.toast {
  padding: 10px 14px;
  border-radius: 4px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.15);
  background: var(--color-bg);
  border-left: 4px solid var(--color-primary);
  color: var(--color-text);
  font-size: var(--fs-14);
  line-height: 1.5;
  word-break: break-word;
  animation: toast-slide-in .25s ease-out;
  display: flex;
  align-items: flex-start;
  gap: 8px;
}
.toast.success { border-left-color: var(--color-success); }
.toast.error { border-left-color: var(--color-danger); }
.toast.warning { border-left-color: var(--color-warning); }
.toast-close {
  margin-left: auto;
  padding: 0 2px;
  background: none;
  border: none;
  color: var(--color-text-3);
  cursor: pointer;
  font-size: var(--fs-16);
  line-height: 1;
}
.toast-close:hover { color: var(--color-text); }
@keyframes toast-slide-in {
  from { transform: translateX(20px); opacity: 0; }
  to { transform: translateX(0); opacity: 1; }
}
@keyframes toast-fade-out {
  from { opacity: 1; }
  to { opacity: 0; }
}
.toast.hiding { animation: toast-fade-out .3s forwards; }

/* 卡片与区块 */
.card {
  background: var(--color-bg);
  border: 1px solid var(--color-border);
  border-radius: 6px;
  padding: 12px 16px;
  margin-bottom: 12px;
}
.card h2 { font-size: var(--fs-18); margin-bottom: 8px; }
.card h3 { font-size: var(--fs-16); margin-bottom: 6px; color: var(--color-text-2); }

/* 表单 */
.form-row { margin-bottom: 14px; }
.form-row label { display: block; margin-bottom: 6px; color: var(--color-text-2); }
.form-row input[type=text], .form-row input[type=password],
.form-row input[type=file], .form-row select, .form-row textarea {
  width: 100%; max-width: 480px;
  padding: 8px 10px;
  border: 1px solid var(--color-border);
  border-radius: 4px;
  font-family: var(--font-ui);
  font-size: var(--fs-14);
}
.form-row textarea { max-width: 100%; }
/* 表单控件光标：主色粗显（默认 1px 黑线在高缩放屏发虚） */
input, textarea, select { caret-color: var(--color-primary); }
/* 全局 textarea 内边距：保证所有多行文本框（包括代码/描述编辑）都有呼吸空间 */
textarea { padding: 8px; box-sizing: border-box; }
/* 表格内 textarea（测试用例编辑等，不在 .form-row 内）：补回被全局 reset 吃掉的样式 */
.tbl textarea {
  padding: 6px 8px; font-size: var(--fs-14); line-height: 1.5;
  border: 1px solid var(--color-border); border-radius: 4px;
  background: var(--color-bg);
}
.form-hint { color: var(--color-text-3); margin-top: 4px; }

/* 行内表单：label 与控件同行，省垂直空间（13.1 空间效率） */
.form-line { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; flex-wrap: wrap; }
.form-line label { color: var(--color-text-2); white-space: nowrap; }
.form-line input[type=text], .form-line input[type=number], .form-line select {
  padding: 6px 10px; border: 1px solid var(--color-border); border-radius: 4px;
}
.form-line .fill { flex: 1; min-width: 200px; }
.form-line .w90 { width: 90px; }
.form-line .w200 { width: 200px; }
.form-line .w240 { width: 240px; }
.form-line .hint { color: var(--color-text-3); }

/* 按钮 */
.btn {
  display: inline-block;
  padding: 4px 10px;
  background: var(--color-primary);
  color: var(--color-bg);
  border: none; border-radius: 4px;
  font-size: var(--fs-14);
  cursor: pointer;
}
.btn:hover { opacity: 0.9; text-decoration: none; }
.btn.amber { background: var(--color-warning); }
.btn.small { padding: 4px 10px; font-size: var(--fs-14); }
.btn:disabled { background: var(--color-text-3); cursor: not-allowed; }

/* 表格 */
table.tbl { width: 100%; border-collapse: collapse; background: var(--color-bg); }
table.tbl th, table.tbl td {
  border: 1px solid var(--color-border);
  padding: 5px 8px;
  text-align: left;
  vertical-align: middle;
}
table.tbl th { background: var(--color-bg-2); color: var(--color-text-2); text-align: center; }
/* 整表水平居中变体（学生端作业列表/作业详情等） */
table.tbl-c th, table.tbl-c td { text-align: center; }
table.tbl th[data-s] { position: relative; padding-right: 20px; color: var(--color-primary); cursor: pointer; }
/* 冻结列表头：sticky 优先级须高过上一行 th[data-s] 的 relative，否则错列（base.css 选择器优先级 0,2,2 > 0,2,1） */
table.tbl.tbl-sticky th.fz[data-s] { position: sticky; }
table.tbl th .sort-arrow { line-height: 1; }
table.tbl tr:hover td { background: var(--color-bg-2); }

/* 系统参数表：固定列宽，避免参数名/说明换行 */
.cfgtbl { table-layout: fixed; width: 100%; }
.cfgtbl td { overflow: hidden; }
.cfgtbl .cfg-name {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.cfgtbl .cfg-desc {
  word-break: break-word;
  color: var(--color-text-2);
  font-size: var(--fs-14);
}

/* 状态标记 */
.tag { display: inline-block; padding: 2px 8px; border-radius: 4px; font-size: var(--fs-14); vertical-align: middle; }
.tag.ok { color: var(--color-success); border: 1px solid var(--color-success); }
.tag.warn { color: var(--color-warning); border: 1px solid var(--color-warning); }
.tag.danger { color: var(--color-danger); border: 1px solid var(--color-danger); }
.tag.gray { color: var(--color-text-3); border: 1px solid var(--color-border); }
.tag.lock { color: var(--color-bg); background: var(--color-warning); border: 1px solid var(--color-warning); }

/* 难度星级：统一橙色 */
.star-rating { color: var(--color-warning); }

/* 列表操作列：按钮禁换行 */
td.ops { white-space: nowrap; }

/* 老师工作台/系统管理：左侧菜单树 */
/* 文件卡片（出题页 fixed/template 编辑区） */
.hf-card { border:1px solid var(--color-border); border-radius:6px; padding:10px; margin-bottom:10px; background:var(--color-bg-2); }
.hf-content { width:100%; resize:vertical; }

html { scrollbar-gutter: stable; }  /* 预留滚动条宽度：长短页切换时菜单不左右跳动 */

/* 标签页（列表状态过滤） */
.tabs { display:flex; gap:4px; margin-bottom:12px; border-bottom:1px solid var(--color-border); }
.tabs .tab { padding:6px 14px; font-size:var(--fs-14); color:var(--color-text-2); cursor:pointer;
  border-bottom:2px solid transparent; margin-bottom:-1px; text-decoration:none; }
.tabs .tab:hover { color:var(--color-accent); }
.tabs .tab.active { color:var(--color-accent); border-bottom-color:var(--color-accent); font-weight:600; }
.tabs .tab .n { color:var(--color-text-3); font-size:12px; margin-left:2px; }
.wk { display: flex; gap: 16px; }
.wk-menu { width: 200px; flex-shrink: 0; }
.wk-group { margin-bottom: 16px; }
.wk-group-title {
  padding: 8px 12px; font-size: var(--fs-16); font-weight: bold;
  color: var(--color-text); border-left: 3px solid transparent;
}
.wk-group-title.active {
  color: var(--color-accent); border-left-color: var(--color-accent);
  background: var(--color-bg);
}
.wk-menu a {
  display: block; padding: 6px 12px 6px calc(12px + 1em); color: var(--color-text);
  border-left: 3px solid transparent;
  font-size: var(--fs-14);
}
.wk-menu a:hover { background: var(--color-bg-2); text-decoration: none; }
.wk-menu a.active {
  border-left-color: var(--color-accent);
  color: var(--color-accent); font-weight: bold;
  background: var(--color-bg);
}
.wk-content { flex: 1; min-width: 0; }

/* 讲义阅读：左侧章节树 + 右侧正文 */
.lec-reader { display: flex; gap: 24px; align-items: flex-start; }
.lec-body {
  flex: 1; min-width: 0;
  background: var(--color-bg-2);
  border-radius: 6px; padding: 32px 48px;
  line-height: 1.7;
  color: var(--color-text);
  /* 正文宽度：宽屏利用空间，封顶 1150 保阅读行宽（隐藏大纲时由 outline-off 规则放到 100%） */
  max-width: min(1150px, 100%);
  margin: 0 auto;
  font-size: var(--fs-16);
}
.lec-body img { max-width: 100%; cursor: pointer; border: 1px solid var(--color-border); border-radius: 6px; padding: 4px; background: var(--color-bg); }

/* 标题层级：仿 Gitee 清晰分段 */
.lec-body h2 { font-size: var(--fs-32); font-weight: 600; margin: 40px 0 16px; color: var(--color-text); line-height: 1.35; border-bottom: 1px solid var(--color-border); padding-bottom: 10px; }
.lec-body h3 { font-size: var(--fs-24); font-weight: 600; margin: 32px 0 14px; color: var(--color-text-2); line-height: 1.4; }
.lec-body h4 { font-size: var(--fs-20); font-weight: 600; margin: 24px 0 12px; color: var(--color-text-2); }
.lec-body h2:first-child, .lec-body h3:first-child, .lec-body h4:first-child { margin-top: 0; }

/* 段落与列表 */
.lec-body p { margin-bottom: 1em; }
.lec-body ul, .lec-body ol { margin: 0 0 1em 1.5em; padding-left: 0.5em; }
.lec-body li { margin-bottom: 0.5em; }
.lec-body li > p { margin-bottom: 0.4em; }
.lec-body li > ul, .lec-body li > ol { margin-top: 0.3em; margin-bottom: 0.5em; }

/* 分隔线：Gitee 不使用显式分隔线，用标题间距分段 */
.lec-body hr { display: none; }

/* 行间代码 */
.lec-body code:not(pre code) {
  background: var(--color-bg-4);
  padding: 2px 6px;
  border-radius: 4px;
  font-family: var(--font-code);
  font-size: 0.92em;
  color: var(--color-text);
}

/* 代码块 */
.lec-body pre {
  background: var(--color-bg-3);
  border: 1px solid var(--color-border);
  border-radius: 6px;
  padding: 16px;
  margin: 16px 0;
  overflow-x: auto;
  line-height: 1.6;
  font-size: var(--fs-14);
}
.lec-body pre code {
  background: transparent;
  padding: 0;
  border-radius: 0;
  font-size: var(--fs-code);
}
/* 表格 */
.lec-body table {
  width: 100%;
  border-collapse: collapse;
  margin: 16px 0;
  border: 1px solid var(--color-border);
  font-size: var(--fs-14);
}
.lec-body th, .lec-body td {
  border: 1px solid var(--color-border);
  padding: 10px 14px;
  text-align: left;
  vertical-align: top;
}
.lec-body th {
  background: var(--color-bg-2);
  font-weight: 600;
}
.lec-body tr:nth-child(even) { background: rgba(0,0,0,0.015); }
.lec-body tr:hover { background: rgba(0,0,0,0.03); }

/* 引用块 */
.lec-body blockquote {
  margin: 16px 0;
  padding: 0 16px;
  border-left: 4px solid #d0d7de;
  color: var(--color-text-2);
}

/* 运行按钮 */
.lec-body .code-run-form { margin: 8px 0 16px !important; text-align: left; }
/* 「试一下」分块试用统计（beta 白名单可见，2026-09-25）：按钮旁标注 次数/人数/班级总人数；
   12px 为特例（用户拍板）：演示时不希望学生注意到，故意用更小更淡的字号 */
.lec-body .code-run-form .run-count { margin-left: 10px; color: #dddddd; font-size: 12px; }

/* 代码块复制按钮（仿 Gitee：右上角，hover 加深） */
.code-wrap { position: relative; }
.code-copy {
  position: absolute; top: 8px; right: 8px;
  padding: 2px 10px; font-size: var(--fs-14);
  color: var(--color-text-2); background: var(--color-bg);
  border: 1px solid var(--color-border); border-radius: 4px;
  cursor: pointer; opacity: .75;
}
.code-wrap:hover .code-copy { opacity: 1; }
.code-copy:hover { color: var(--color-primary); border-color: var(--color-primary); }
.lec-tree {
  width: 240px; flex-shrink: 0;
  position: sticky; top: 16px; align-self: flex-start;
  background: var(--color-bg); border: 1px solid var(--color-border);
  border-radius: 6px; padding: 12px 0; max-height: 90vh; overflow-y: auto;
  box-sizing: border-box;
}
.lec-tree-header { padding: 0 16px 10px; border-bottom: 1px solid var(--color-border); margin-bottom: 8px; }
.lec-course-name { font-weight: bold; font-size: var(--fs-16); color: var(--color-text); }
.lec-tree-body { padding: 0 8px; }
.lec-chapter { margin-bottom: 8px; }
.lec-chapter-title {
  padding: 6px 8px; font-weight: 600; color: var(--color-text);
  font-size: var(--fs-14); cursor: pointer;
}
.lec-item {
  display: flex; align-items: baseline; gap: 6px;
  padding: 5px 8px 5px 16px; color: var(--color-text-2);
  font-size: var(--fs-14); border-radius: 4px;
}
.lec-item:hover { background: var(--color-bg-2); text-decoration: none; }
.lec-item.active { background: var(--color-bg-2); color: var(--color-accent); font-weight: bold; }
.lec-item-no { flex-shrink: 0; font-family: var(--font-code); color: var(--color-text-3); }
.lec-item.active .lec-item-no { color: var(--color-accent); }
.lec-item-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* 左侧树标签页：目录 / 搜索 / 书签 */
.lec-tree-tabs {
  display: flex; padding: 0 8px; margin-bottom: 8px; border-bottom: 1px solid var(--color-border);
}
.lec-tree-tabs button {
  flex: 1; background: transparent; border: none; border-bottom: 2px solid transparent;
  padding: 6px 4px; font-size: var(--fs-14); color: var(--color-text-2); cursor: pointer;
}
.lec-tree-tabs button:hover { color: var(--color-text); }
.lec-tree-tabs button.active { color: var(--color-primary); border-bottom-color: var(--color-primary); font-weight: 600; }
.lec-tree-panels { position: relative; }
.lec-tree-panel { display: none; padding: 0 8px; }
.lec-tree-panel.active { display: block; }

/* 星标收藏 */
.bookmark-star {
  flex-shrink: 0; margin-left: auto; padding: 0 2px; font-size: var(--fs-14);
  color: var(--color-border); cursor: pointer; visibility: hidden;
}
.lec-item:hover .bookmark-star { visibility: visible; }
.bookmark-star.on { color: var(--color-warning); visibility: visible; }

/* 搜索 */
.lec-search-box { display: flex; gap: 4px; margin-bottom: 8px; }
.lec-search-input {
  flex: 1; min-width: 0; padding: 5px 8px; border: 1px solid var(--color-border);
  border-radius: 4px; font-size: var(--fs-14); background: var(--color-bg);
  color: var(--color-text);
}
.lec-search-clear {
  padding: 0 8px; border: 1px solid var(--color-border); border-radius: 4px;
  background: var(--color-bg); color: var(--color-text-2); cursor: pointer; font-size: var(--fs-16);
}
.lec-search-clear:hover { color: var(--color-text); border-color: var(--color-primary); }
.lec-search-results { max-height: calc(100vh - 220px); overflow-y: auto; }
.lec-search-result {
  display: block; padding: 8px 6px; border-bottom: 1px solid var(--color-border);
  color: var(--color-text-2); text-decoration: none; font-size: var(--fs-14);
}
.lec-search-result:last-child { border-bottom: none; }
.lec-search-result:hover { background: var(--color-bg-2); }
.lec-search-result-title {
  color: var(--color-text); font-weight: 600; margin-bottom: 4px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.lec-search-result-snippet {
  font-size: var(--fs-12); line-height: 1.5; color: var(--color-text-3);
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}
.lec-search-result mark, .lec-bookmark-item mark {
  background: var(--color-warning-light, #fff3cd); color: var(--color-text);
  padding: 0 2px; border-radius: 2px;
}

/* 书签列表 */
.lec-bookmark-list { max-height: calc(100vh - 220px); overflow-y: auto; }
.lec-bookmark-item {
  display: block; padding: 8px 6px; border-bottom: 1px solid var(--color-border);
  color: var(--color-text-2); text-decoration: none; font-size: var(--fs-14);
}
.lec-bookmark-item:last-child { border-bottom: none; }
.lec-bookmark-item:hover { background: var(--color-bg-2); }
.lec-bookmark-title {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* 讲义阅读页顶部标题栏：上一篇 ‹ ｜ 当前标题 ｜ › 下一篇（固定不滚动） */
.lec-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 10px; }
.lec-nav {
  display: flex; align-items: center; justify-content: center; gap: 16px; flex-shrink: 0; position: relative;
  background: var(--color-bg); border: 1px solid var(--color-border);
  border-radius: 6px; padding: 6px 12px;
}
.lec-nav-title {
  max-width: 70%; text-align: center; font-size: var(--fs-18); font-weight: bold;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.lec-nav-arrow { font-size: var(--fs-18); font-weight: bold; line-height: 1; padding: 6px 14px; }
.lec-nav-off, .lec-nav-off:hover { opacity: .4; cursor: default; }
.lec-reader.toc-off .lec-tree { display: none; }
.lec-reader.no-toc .lec-tree { display: none; }

/* 讲义阅读页：顶栏/课程菜单/目录固定不动，仅正文在独立滚动框内滚动 */
body.lec-page { height: 100vh; overflow: hidden; display: flex; flex-direction: column; }
body.lec-page > .main { flex: 1; min-height: 0; overflow: hidden; padding-bottom: 12px; }
body.lec-page .wk,
body.lec-page .wk-content,
body.lec-page .lec-reader,
body.lec-page .lec-main { height: 100%; }
body.lec-page .lec-outline { height: 100%; }
body.lec-page .lec-body { flex: 1; min-height: 0; overflow-y: auto; box-sizing: border-box; }
body.lec-page .lec-tree { position: static; max-height: 100%; }

/* 教师端讲义预览：左侧章节树替换默认二级菜单 */
body.lec-preview .wk-menu { width: 240px; padding: 12px 0; border: none; background: transparent; }
body.lec-preview .wk-menu .lec-tree { position: static; max-height: 100%; width: 100%; border: none; }

/* 空状态 */
.empty { color: var(--color-text-3); padding: 40px 0; text-align: center; }

/* markdown 预览正文（题目/作业预览页）——与学生答题页题面统一 */
.md-body { line-height: 1.7; font-size: var(--fs-16); }
.md-body img { max-width: 100%; }
.md-body p { margin-bottom: 1em; }
.md-body ul, .md-body ol { margin: 0 0 1em 1.5em; padding-left: 0.5em; }
.md-body li { margin-bottom: 0.5em; }
.md-body h2 { font-size: var(--fs-32); font-weight: 600; margin: 32px 0 16px; color: var(--color-text); line-height: 1.35; border-bottom: 1px solid var(--color-border); padding-bottom: 10px; }
.md-body h3 { font-size: var(--fs-24); font-weight: 600; margin: 24px 0 14px; color: var(--color-text-2); line-height: 1.4; }
.md-body h4 { font-size: var(--fs-20); font-weight: 600; margin: 18px 0 12px; color: var(--color-text-2); }
.md-body h2:first-child, .md-body h3:first-child, .md-body h4:first-child { margin-top: 0; }
.md-body pre {
  background: var(--color-bg-3);
  border: 1px solid var(--color-border);
  border-radius: 6px;
  padding: 16px;
  margin: 16px 0;
  overflow-x: auto;
  line-height: 1.6;
  font-size: var(--fs-14);
}
.md-body code:not(pre code) {
  background: var(--color-bg-4);
  padding: 2px 6px;
  border-radius: 4px;
  font-family: var(--font-code);
  font-size: 0.92em;
}
.md-body table {
  width: 100%;
  border-collapse: collapse;
  margin: 16px 0;
  border: 1px solid var(--color-border);
  font-size: var(--fs-14);
}
.md-body th, .md-body td {
  border: 1px solid var(--color-border);
  padding: 10px 14px;
  text-align: left;
  vertical-align: top;
}
.md-body th { background: var(--color-bg-2); font-weight: 600; }
.md-body tr:nth-child(even) { background: rgba(0,0,0,0.015); }
.md-body blockquote { margin: 16px 0; padding: 0 16px; color: var(--color-text-2); border-left: 4px solid var(--color-border); }

/* 页脚注释 */
.footnote { color: var(--color-text-3); margin-top: 12px; }

/* 大表格：表头吸顶 + 首列冻结（U1-5，成绩矩阵等 100+ 行表格用） */
.tbl-wrap { overflow: auto; max-height: 78vh; }
/* 矩阵顶部同步滚动条：容器自带横向滚动条在 78vh 底部不易发现，顶部另置一条与 .tbl-wrap 双向同步（2026-09-25 用户反馈） */
.tbl-topscroll { overflow-x: auto; overflow-y: hidden; height: 16px; margin-bottom: 4px; }
.tbl-topscroll > div { height: 1px; }
.tbl-sticky th { position: sticky; top: 0; background: var(--color-bg-2); z-index: 2; }
.tbl-sticky .fz { position: sticky; background: var(--color-bg); z-index: 1; }
.tbl-sticky th.fz { z-index: 3; background: var(--color-bg-2); }
.fz0 { left: 0; } .fz1 { left: 40px; } .fz2 { left: 150px; }

/* 学生端「我的课程」卡片墙（入口型页面卡片，13.1） */
.ccards { display: flex; flex-wrap: wrap; gap: 12px; }
.ccard {
  display: block; width: 350px;
  background: var(--color-bg); border: 1px solid var(--color-border);
  border-radius: 6px; padding: 12px 16px;
  color: var(--color-text); text-decoration: none;
}
a.ccard:hover { border-color: var(--color-primary); text-decoration: none; }
.ccard .cname { font-size: var(--fs-18); margin-bottom: 6px; }
.ccard .cmeta { color: var(--color-text-3); font-size: var(--fs-14); }
.ccard.gray { color: var(--color-text-3); background: var(--color-bg-2); }

/* 教师端「我的课程」卡片墙（入口型页面卡片，13.1） */
.tccards { display: flex; flex-wrap: wrap; gap: 16px; }
.tccard {
  display: block; width: 460px;
  background: var(--color-bg); border: 1px solid var(--color-border);
  border-radius: 6px; padding: 14px 18px;
  color: var(--color-text); text-decoration: none;
}
.tccard:hover { border-color: var(--color-primary); text-decoration: none; }
.tccard .tname { font-size: var(--fs-18); margin-bottom: 6px; }
.tccard .tmeta { color: var(--color-text-3); font-size: var(--fs-14); }

/* 左菜单角标（学生端 stubench 复用 .wk-menu） */
.wk-menu a .mbadge {
  float: right; min-width: 18px; text-align: center;
  background: var(--color-bg-2); color: var(--color-text-2);
  border-radius: 9px; padding: 0 6px; font-size: var(--fs-14); font-weight: normal;
}
.wk-menu a .mbadge.red { background: var(--color-danger); color: #fff; }

/* sheet 标签页（编辑页编辑器/预览切换） */
.sheet-tabs { display:flex; gap:4px; border-bottom:1px solid var(--color-border); margin-bottom:0; }
.sheet-tabs .tab { padding:6px 14px; font-size:var(--fs-14); color:var(--color-text-2); cursor:pointer;
  border:1px solid transparent; border-bottom:none; border-radius:4px 4px 0 0; background:var(--color-bg-2); }
.sheet-tabs .tab:hover { color:var(--color-accent); }
.sheet-tabs .tab.active { color:var(--color-accent); background:var(--color-bg); border-color:var(--color-border); font-weight:600; }
.sheet-panel { display:none; padding:12px 0; }
.sheet-panel.active { display:block; }
.run-result-box { margin:0 0 10px; padding:8px 12px; border-left:3px solid var(--color-accent); background:var(--color-bg-2); }
.run-result-box p { margin:0 0 6px; }
.run-result-box pre { margin:0; }


/* 本篇大纲面板（正文左侧）：展开为 240px 面板，收起为竖排文字边条 */
.lec-outline { width: 240px; flex-shrink: 0; display: flex; }
.lec-outline:not(.on) { width: 40px; }
.lec-outline-inner {
  flex: 1; min-width: 0; display: flex; flex-direction: column;
  border: 1px solid var(--color-border); border-radius: 6px; background: var(--color-bg);
}
.lec-outline:not(.on) .lec-outline-inner { display: none; }
.lec-outline-head {
  display: flex; justify-content: space-between; align-items: center;
  padding: 8px 12px; font-size: var(--fs-16); font-weight: 700; color: var(--color-text-2);
  border-bottom: 1px solid var(--color-border); flex-shrink: 0;
}
.lec-outline-head button {
  border: none; background: none; padding: 0; cursor: pointer;
  font-size: var(--fs-16); font-weight: 700; color: var(--color-primary);
}
.lec-outline-head button:hover { text-decoration: underline; }
.lec-outline-tab {
  display: none; flex: 1; width: 100%; padding: 12px 0; cursor: pointer;
  border: 1px solid var(--color-border); border-radius: 6px; background: var(--color-bg);
  font-size: var(--fs-16); font-weight: 700; color: var(--color-primary);
  writing-mode: vertical-rl; letter-spacing: 2px;
}
.lec-outline:not(.on) .lec-outline-tab { display: block; }
.lec-outline-tab:hover { background: var(--color-bg-2); }
.lec-outline-body { flex: 1; overflow-y: auto; padding: 6px 0; min-height: 0; }
.lec-outline-item {
  display: block; padding: 6px 12px; font-size: var(--fs-14); color: var(--color-text-2);
  text-decoration: none; border-left: 2px solid transparent;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.lec-outline-item.lv1 { padding-left: 26px; color: var(--color-text-3); }
.lec-outline-item:hover { background: var(--color-bg-2); }
.lec-outline-item.active { color: var(--color-primary); border-left-color: var(--color-primary); font-weight: 600; }

/* 隐藏本篇大纲时，腾出的横向空间全部给正文（用户 2026-09-25 定） */
.lec-body { transition: max-width .2s ease, zoom .2s ease; }
.lec-reader.outline-off .lec-body { max-width: 100%; }

/* 放映模式：隐藏全部页面框架，正文满屏 + 多档放大（用户 2026-09-25 定） */
/* 「放映」按钮在导航行内联排于「后一篇」后（用户 2026-09-25 改，原绝对定位最右）；放映工具条仍在最右 */
#presentBar {
  display: none; position: absolute; right: 8px; top: 50%; transform: translateY(-50%);
  align-items: center; gap: 6px;
}
.present-zoom-select {
  font-size: var(--fs-14); padding: 3px 4px; border: 1px solid var(--color-border);
  border-radius: 4px; background: var(--color-bg); color: var(--color-text);
}
body.present .topbar { display: none; }
body.present .lec-tree { display: none; }
body.present .lec-outline { display: none; }
body.present #presentBar { display: inline-flex; }
body.present #presentBtn { display: none; }
body.present .lec-body { max-width: 100%; }
body.present .lec-nav .lec-nav-extra { display: none; }
body.present.present-z100 .lec-body { zoom: 1; }
body.present.present-z150 .lec-body { zoom: 1.5; }
body.present.present-z200 .lec-body { zoom: 2; }
body.present.present-z250 .lec-body { zoom: 2.5; }
