/* ==========================================================================
   苏科物理 · 教师台 — 组件层（方向 A：教研手册）
   规则：只用 tokens.css 的刻度；用「细线 + 字级 + 留白」建立层级，不用卡片阴影。
   引入顺序：style.css → (页面内联样式) → tokens.css → ui.css
   ========================================================================== */

/* ---------------------------------------------------------------- 基底 */
html, body {
  background: var(--paper);
  color: var(--ink);
  font-family: var(--sans);
  font-size: var(--fs-body);
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
body { overflow-x: hidden; }
a { color: var(--seal); }
a:hover { color: var(--seal-dark); }
::selection { background: var(--seal-soft); color: var(--ink); }
:focus-visible { outline: 2px solid var(--seal); outline-offset: 2px; }
h1, h2, h3, h4 { font-family: var(--serif); color: var(--ink); letter-spacing: .02em; }
b, strong { font-weight: 600; }
hr { border: 0; border-top: 1px solid var(--rule); }

/* 小字号标注（英文小标、元信息） */
.ui-kicker {
  font-size: var(--fs-kicker); letter-spacing: .2em; color: var(--muted);
}

/* ---------------------------------------------------------------- 顶栏 */
.topbar {
  position: sticky; top: 0; z-index: 50;
  background: var(--paper);
  border-bottom: 1px solid var(--rule);
  backdrop-filter: none; -webkit-backdrop-filter: none;
}
.topbar-inner {
  max-width: var(--page-max);
  margin: 0 auto;
  padding: 0 var(--page-pad);
  height: 64px;
  display: flex; align-items: center; gap: 26px;
}
.brand {
  display: inline-flex; align-items: center; gap: 11px;
  font-family: var(--serif); font-size: 15.5px; font-weight: 600;
  letter-spacing: .05em; color: var(--ink); text-decoration: none;
  flex: 0 0 auto;
}
.brand:hover { text-decoration: none; color: var(--ink); }
.brand-mark {
  width: 24px; height: 24px; flex: none;
  border-radius: 0; background: var(--seal); color: #f8f3e9;
  display: grid; place-items: center;
  font-family: var(--serif); font-size: 13px; font-weight: 700; letter-spacing: 0;
  box-shadow: none;
}
.brand small {
  display: block; margin-top: 2px;
  font-family: var(--sans); font-size: 9.5px; font-weight: 400;
  letter-spacing: .18em; color: var(--muted);
}
.topbar-spacer { flex: 1 1 auto; }

/* 顶栏导航：下划线式，当前项用印泥红细线 */
.top-nav {
  display: flex; align-items: stretch; gap: 28px;
  align-self: stretch; overflow-x: auto; scrollbar-width: none;
}
.top-nav::-webkit-scrollbar { display: none; }
.top-nav a {
  display: inline-flex; align-items: center;
  font-size: 13.5px; color: var(--ink2); text-decoration: none;
  border-bottom: 2px solid transparent; border-top: 2px solid transparent;
  white-space: nowrap; transition: color .15s;
}
.top-nav a:hover { color: var(--ink); text-decoration: none; }
.top-nav a.on { color: var(--ink); font-weight: 600; border-bottom-color: var(--seal); }

/* 顶栏右侧：教学周 / 身份 */
.top-meta { display: flex; align-items: center; gap: 16px; font-size: var(--fs-meta); color: var(--muted); letter-spacing: .04em; white-space: nowrap; }
.top-who { display: inline-flex; align-items: center; gap: 8px; font-size: var(--fs-small); color: var(--ink); }
.top-ava {
  width: 26px; height: 26px; border-radius: 50%;
  background: var(--surface-3); color: #4b4337;
  font-size: 12px; display: grid; place-items: center;
}

/* ---------------------------------------------------------------- 版心 */
.wrap, .td-wrap {
  max-width: var(--page-max);
  margin: 0 auto;
  padding: 34px var(--page-pad) 72px;
}
.wrap.narrow { max-width: 900px; }

/* 页首：眉标 + 宋体大标题 + 引导句 + 红色短线 */
.page-head { margin: 0 0 30px; }
.page-head .kicker {
  font-size: var(--fs-kicker); letter-spacing: .2em; color: var(--muted);
}
.page-head h1 {
  margin: 12px 0 0;
  font-family: var(--serif); font-size: var(--fs-h1); font-weight: 600;
  line-height: 1.38; letter-spacing: .005em; max-width: 760px;
}
.page-head h1 b, .page-head h1 .num { color: var(--seal); font-weight: 600; padding: 0 2px; }
.page-head .dek {
  margin: 10px 0 0; max-width: 640px;
  font-size: var(--fs-body); line-height: 1.8; color: var(--ink2);
}
.page-head .rule { width: 56px; height: 2px; background: var(--seal); margin-top: 20px; }
.page-head-row {
  display: flex; align-items: flex-end; justify-content: space-between; gap: 24px;
  border-bottom: 2px solid var(--ink); padding: 6px 0 16px; margin: 0 0 6px;
}
.page-head-row h1 { margin: 6px 0 0; font-family: var(--serif); font-size: 26px; font-weight: 600; line-height: 1.32; }
.page-head-row .crumb { font-size: var(--fs-meta); color: var(--muted); letter-spacing: .07em; }
.page-head-row .dek { margin: 6px 0 0; font-size: var(--fs-small); color: var(--muted); }
.page-head-row .acts { display: flex; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }

/* ---------------------------------------------------------------- 章节 / 卡片 */
.card {
  background: transparent;
  border: 0; border-radius: 0;
  padding: 0 0 22px;
  margin: 0 0 26px;
  box-shadow: none;
  border-bottom: 1px solid var(--rule-soft);
}
.card:last-child { border-bottom: 0; }
.card > h2, .card-head h3 {
  margin: 0 0 14px;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--ink);
  font-family: var(--serif); font-size: 15px; font-weight: 600;
  letter-spacing: .06em; color: var(--ink);
  display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap;
}
.card > h2 .sub, .section-head .sub, .card-head .hint {
  font-family: var(--sans); font-size: var(--fs-meta); font-weight: 400;
  letter-spacing: .03em; color: var(--muted);
}
.section-head {
  display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap;
  border-bottom: 1px solid var(--ink); padding-bottom: 9px; margin: 0 0 2px;
}
.section-head h2 { margin: 0; font-family: var(--serif); font-size: 15px; font-weight: 600; letter-spacing: .06em; }
.section-head .line { flex: 1; height: 0; background: none; }

/* 纸面块（需要承载表单/表格时才用） */
.sheet {
  background: var(--surface);
  border: 1px solid #cfc9bb;
  border-radius: 0;
  padding: 20px 22px;
}

/* ---------------------------------------------------------------- 按钮 */
.btn, button.btn, a.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  height: 32px; padding: 0 14px;
  border: 1px solid var(--ink); border-radius: 2px;
  background: transparent; color: var(--ink);
  font-family: var(--sans); font-size: var(--fs-small); font-weight: 500;
  line-height: 1; cursor: pointer; white-space: nowrap;
  text-decoration: none; box-shadow: none;
  transition: background .15s, color .15s, border-color .15s, opacity .15s;
}
.btn:hover {
  background: var(--ink); color: var(--paper); border-color: var(--ink);
  text-decoration: none;
}
.btn.primary { background: var(--seal); border-color: var(--seal); color: #fbf5ea; box-shadow: none; }
.btn.primary:hover { background: var(--seal-dark); border-color: var(--seal-dark); color: #fbf5ea; }
.btn.ghost, .btn.quiet { border-color: transparent; background: transparent; color: var(--ink2); padding: 0 6px; }
.btn.ghost:hover, .btn.quiet:hover {
  background: transparent; color: var(--seal); border-color: transparent;
  text-decoration: underline; text-underline-offset: 4px;
}
.btn.sm { height: 27px; padding: 0 10px; font-size: 12px; }
.btn.danger { color: var(--danger); border-color: var(--seal-soft); background: transparent; }
.btn.danger:hover { background: var(--danger); border-color: var(--danger); color: #fff; }
.btn.warn { color: var(--warn); border-color: var(--warn-l); background: transparent; }
.btn.warn:hover { background: var(--warn); border-color: var(--warn); color: #fff; }
.btn.media { border-style: dashed; color: var(--muted); }
.btn:disabled, .btn[disabled] { opacity: .45; cursor: default; }
.btn:disabled:hover, .btn[disabled]:hover { background: transparent; color: var(--ink); border-color: var(--ink); }

/* ---------------------------------------------------------------- 表单 */
select, input[type=text], input[type=email], input[type=password], input[type=number],
input[type=search], input[type=date], textarea {
  font-family: var(--sans); font-size: var(--fs-body);
  height: 34px; padding: 0 11px;
  border: 1px solid var(--border-2); border-radius: 2px;
  background: var(--surface); color: var(--ink);
  outline: none; box-shadow: none;
  transition: border-color .15s, background .15s;
}
textarea { height: auto; padding: 9px 11px; line-height: 1.75; resize: vertical; }
select { padding-right: 8px; cursor: pointer; }
select:focus, input:focus, textarea:focus {
  border-color: var(--seal); background: #fff;
  box-shadow: none; outline: none;
}
input::placeholder, textarea::placeholder { color: #a9a294; }
label.fld { display: block; font-size: var(--fs-small); font-weight: 600; color: var(--ink2); margin-bottom: 14px; }
label.fld input, label.fld textarea { width: 100%; margin-top: 6px; box-sizing: border-box; }
.field-lab { font-size: var(--fs-meta); letter-spacing: .12em; color: var(--muted); }

/* ---------------------------------------------------------------- 标签 */
.tag, .a-tag {
  display: inline-flex; align-items: center; height: 19px; padding: 0 6px;
  border: 0; border-radius: 2px;
  background: var(--surface-3); color: #585143;
  font-size: 10.5px; letter-spacing: .06em; white-space: nowrap;
}
.tag.ok, .tag.done, .a-tag.ok { background: #e3ebe1; color: #3c5a40; }
.tag.warn, .a-tag.warn { background: var(--warn-l); color: var(--warn); }
.tag.hot, .a-tag.hot { background: var(--seal-soft); color: var(--seal); }

/* ---------------------------------------------------------------- 表格 */
.table-wrap, .scroll, .roster-wrap {
  border: 1px solid var(--rule); border-radius: 0;
  overflow: auto;
  background: transparent;
}
.table-wrap { margin-top: 12px; }
table.mx { border-collapse: collapse; border-spacing: 0; font-size: 12px; }
table.mx th, table.mx td {
  border-bottom: 1px solid var(--rule-soft); border-right: 1px solid var(--rule-soft);
  padding: 6px 8px; white-space: nowrap; text-align: center;
}
table.mx thead th {
  position: sticky; top: 0; z-index: 2;
  background: var(--surface-2); font-weight: 600; color: var(--ink2);
}
table.mx .chd { background: var(--surface-3); font-weight: 600; color: var(--ink2); }
table.mx th.fix, table.mx td.fix {
  position: sticky; left: 0; z-index: 3;
  background: var(--paper); text-align: left;
  box-shadow: 1px 0 0 var(--rule); min-width: 108px;
}
table.mx thead th.fix { z-index: 4; background: var(--surface-2); }
table.mx tbody tr:hover td { background: var(--surface); }
table.mx tbody tr:hover td.fix { background: var(--surface); }
td.done { color: var(--seal); font-weight: 700; background: var(--seal-soft); }
td.seen { color: var(--muted); }
td.none { color: #d8d1c2; }
table.mx tfoot td { position: sticky; bottom: 0; background: var(--surface-2); font-weight: 600; color: var(--ink2); }

table.tbl { width: 100%; border-collapse: collapse; font-size: 13px; }
table.tbl th {
  background: var(--surface-2); font-weight: 600; color: var(--ink2);
  text-align: left; padding: 10px 12px;
  border-bottom: 1px solid var(--rule); white-space: nowrap;
  letter-spacing: .04em; font-size: var(--fs-meta);
}
table.tbl td { padding: 10px 12px; border-bottom: 1px solid var(--rule-soft); color: var(--ink); }
table.tbl tbody tr:last-child td { border-bottom: none; }
table.tbl tbody tr:hover { background: var(--surface); }

table.data { width: 100%; border-collapse: collapse; font-size: 13px; }
table.data th {
  text-align: left; padding: 9px 12px;
  border-bottom: 1px solid var(--rule); background: transparent;
  font-size: var(--fs-meta); font-weight: 600; color: var(--muted); letter-spacing: .06em;
}
table.data td { padding: 10px 12px; border-bottom: 1px solid var(--rule-soft); }
table.data tbody tr:hover { background: var(--surface); }

/* ---------------------------------------------------------------- 标签栏（页签） */
.tabbar {
  display: flex; align-items: stretch; gap: 26px;
  margin: 0 0 26px; padding: 0;
  border-bottom: 1px solid var(--rule);
  overflow-x: auto; scrollbar-width: none;
}
.tabbar::-webkit-scrollbar { display: none; }
.tabbar .tab {
  flex: 0 0 auto;
  font-family: var(--sans); font-size: 13.5px; font-weight: 400; cursor: pointer;
  padding: 10px 0; margin-bottom: -1px;
  border: 0; border-bottom: 2px solid transparent; border-radius: 0;
  background: transparent; color: var(--ink2); white-space: nowrap;
  transition: color .15s, border-color .15s;
}
.tabbar .tab:hover { color: var(--ink); }
.tabbar .tab.active {
  background: transparent; color: var(--ink); font-weight: 600;
  border-color: transparent; border-bottom-color: var(--seal);
}
.tabbar .tab .nbadge {
  display: inline-block; margin-left: 6px; padding: 0 6px;
  font-size: 10.5px; line-height: 16px; border-radius: 2px;
  background: var(--seal-soft); color: var(--seal);
}
.tabbar .tab.active .nbadge { background: var(--seal); color: #fbf5ea; }

/* ---------------------------------------------------------------- 杂项 */
.empty { color: var(--muted); font-size: 13px; padding: 14px 0; }
.err { color: var(--danger); font-size: 13px; min-height: 18px; }
.muted { color: var(--muted); }
.rank { color: var(--danger); font-weight: 700; }
.code {
  font-family: var(--mono); font-size: 20px; font-weight: 600; letter-spacing: 3px;
  color: var(--seal); background: var(--seal-soft);
  border: 1px dashed #cdb4a8; border-radius: 2px; padding: 5px 13px;
}

/* ---------------------------------------------------------------- 弹窗 / 提示 */
.veil, .xmodal-veil, .modal-mask {
  position: fixed; inset: 0; z-index: 99;
  background: rgba(25, 22, 16, .42);
  backdrop-filter: none; -webkit-backdrop-filter: none;
  display: flex; align-items: center; justify-content: center; padding: 5vh 16px;
  overflow: auto;
}
.veil .modal, .xmodal, .modal-box {
  width: 360px; max-width: 94vw;
  background: #fdfaf4;
  border: 1px solid #b8ae9b;
  border-radius: 2px;
  padding: 22px 22px 18px;
  box-shadow: 0 18px 50px rgba(30, 25, 15, .18);
  max-height: 90vh; overflow-y: auto;
  animation: uiModalIn .18s ease-out;
}
@keyframes uiModalIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.veil .modal.wide { width: 640px; }
.veil .modal h2, .xmodal h3, .modal-box h3 {
  margin: 0 0 8px; padding-bottom: 8px;
  border-bottom: 1px solid var(--ink);
  font-family: var(--serif); font-size: 16px; font-weight: 600; letter-spacing: .05em;
}
.veil .modal .m-desc, .xmodal p { margin: 0 0 14px; font-size: var(--fs-small); color: var(--ink2); line-height: 1.75; }
.veil .modal .row, .xmodal-actions { display: flex; gap: 8px; justify-content: flex-end; margin: 16px 0 0; flex-wrap: wrap; }
.warn-note {
  background: var(--danger-l); border: 0; border-left: 2px solid var(--danger);
  border-radius: 0; padding: 9px 12px;
  font-size: 12px; line-height: 1.75; color: var(--danger); margin: 0 0 14px;
}
.toast {
  position: fixed; left: 50%; bottom: 34px; transform: translateX(-50%) translateY(10px);
  background: var(--ink); color: var(--paper);
  padding: 9px 18px; border-radius: 2px;
  font-size: var(--fs-small); font-weight: 500; letter-spacing: .03em;
  opacity: 0; pointer-events: none; transition: opacity .2s, transform .2s;
  z-index: 200; box-shadow: none;
}
.toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }
.set-row {
  display: flex; align-items: center; gap: 12px; width: 100%; text-align: left;
  font: inherit; cursor: pointer; padding: 11px 12px; margin-bottom: 8px;
  background: var(--surface); border: 1px solid var(--rule); border-radius: 2px;
  color: var(--ink); transition: border-color .15s, background .15s;
}
.set-row:hover { border-color: var(--seal); background: var(--seal-soft); }

/* ---------------------------------------------------------------- 今日首屏 */
.today-hero {
  position: relative; overflow: visible;
  display: flex; align-items: flex-end; justify-content: space-between;
  gap: 32px; flex-wrap: wrap;
  padding: 6px 0 22px; margin: 0 0 26px;
  border-radius: 0; color: var(--ink);
  background: none; box-shadow: none;
  border-bottom: 2px solid var(--ink);
}
.today-hero::after { display: none; }
.today-hero .hero-main { position: static; z-index: auto; flex: 1 1 auto; min-width: 0; }
.today-hero .hero-date {
  margin: 0 0 10px; font-size: var(--fs-kicker);
  letter-spacing: .2em; color: var(--muted);
}
.today-hero h1 {
  margin: 0; max-width: 720px;
  font-family: var(--serif); font-size: 29px; line-height: 1.4;
  font-weight: 600; letter-spacing: .005em; color: var(--ink);
}
.today-hero h1 b { margin: 0 2px; font-size: 30px; color: var(--seal); font-weight: 600; }
.today-hero .hero-sub {
  margin: 10px 0 0; max-width: 640px;
  font-size: var(--fs-body); line-height: 1.8; color: var(--ink2);
}
.today-hero .hero-sub b { color: var(--ink); font-weight: 600; }
.today-hero .hero-acts { position: static; z-index: auto; display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.today-hero .hero-acts .btn { background: transparent; border-color: var(--ink); color: var(--ink); }
.today-hero .hero-acts .btn:hover { background: var(--ink); color: var(--paper); }
.today-hero .hero-acts .btn.primary { background: var(--seal); border-color: var(--seal); color: #fbf5ea; box-shadow: none; }
.today-hero .hero-acts .btn.primary:hover { background: var(--seal-dark); border-color: var(--seal-dark); color: #fbf5ea; }

/* 三张待办卡：并排三栏，用竖细线分隔，不做卡片 */
.today-cards {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0; margin: 0 0 30px;
  border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule);
}
.tcard, .tcard.tone-wait, .tcard.tone-confirm, .tcard.tone-final {
  --tone: var(--ink);
  position: relative; display: flex; flex-direction: column; min-width: 0;
  padding: 20px 22px 20px;
  background: transparent; border: 0; border-radius: 0;
  border-right: 1px solid var(--rule-soft);
  transition: background .15s;
}
.tcard:last-child { border-right: 0; }
.tcard::before { display: none; }
.tcard:hover { transform: none; box-shadow: none; border-color: var(--rule-soft); background: rgba(255, 255, 255, .38); }
.tcard.tone-wait { --tone: var(--warn); }
.tcard.tone-confirm { --tone: var(--seal); }
.tcard.tone-final { --tone: var(--green); }
.tcard .tc-head { display: flex; align-items: baseline; gap: 9px; margin-bottom: 14px; }
.tcard .tc-ico {
  display: inline-grid; place-items: center; flex: 0 0 auto;
  width: 21px; height: 21px; border-radius: 0;
  font-family: var(--serif); font-size: 11px; line-height: 1;
  background: transparent; color: var(--tone);
  border: 1px solid currentColor; letter-spacing: 0;
}
.tcard .tc-head h3 {
  margin: 0; font-family: var(--serif); font-size: 14px; font-weight: 600;
  letter-spacing: .06em; color: var(--ink);
}
.tcard .tc-head p { margin: 3px 0 0; font-size: var(--fs-meta); color: var(--muted); letter-spacing: .02em; }
.tcard .tc-body { flex: 1 1 auto; min-width: 0; }
.tcard .tc-num { display: flex; align-items: baseline; gap: 7px; }
.tcard .tc-num b {
  font-family: var(--serif); font-size: 42px; line-height: 1; letter-spacing: -.02em;
  color: var(--tone); font-variant-numeric: tabular-nums; font-weight: 600;
}
.tcard .tc-num span { font-size: var(--fs-meta); color: var(--muted); }
.tcard .tc-num em { font-style: normal; font-size: 12px; color: var(--warn); }
.tcard .tc-text { display: flex; flex-direction: column; gap: 8px; margin: 10px 0 18px; min-width: 0; }
.tcard .tc-desc { margin: 0; font-size: var(--fs-small); line-height: 1.75; color: var(--ink2); }
.tcard .tc-desc.muted { color: var(--muted); }
.tcard .tc-note {
  align-self: stretch; max-width: 100%; margin: 0;
  padding: 7px 10px;
  border-left: 2px solid var(--tone); border-radius: 0;
  background: transparent; color: var(--ink2);
  font-size: 11.5px; line-height: 1.65;
}
.tcard .tc-act { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: auto; }
.tcard .tc-act .btn { padding: 0 12px; font-size: 12px; height: 30px; }
.tcard .tc-act .btn.primary { background: var(--tone); border-color: var(--tone); color: #fbf5ea; }
.tcard .tc-act .btn.primary:hover { filter: brightness(.9); color: #fbf5ea; }
.tcard .tc-time { margin-left: auto; font-size: 11px; color: var(--muted); letter-spacing: .03em; }
.tcard.skeleton { pointer-events: none; }
.tcard.skeleton .sk {
  border-radius: 0;
  background: linear-gradient(90deg, #e9e2d5 25%, #f4efe4 37%, #e9e2d5 63%);
  background-size: 400% 100%; animation: skwave 1.3s ease-in-out infinite;
}
@keyframes skwave { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }

/* 一步开始：四格细线入口 */
.today-start {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 0; margin: 0 0 8px;
  border-bottom: 1px solid var(--rule-soft);
}
.tstart {
  display: flex; align-items: center; gap: 10px; padding: 16px 14px 16px 0;
  background: transparent; border: 0; border-radius: 0;
  border-right: 1px solid var(--rule-soft);
  color: var(--ink); text-decoration: none;
  transition: color .15s, background .15s;
}
.tstart:not(:first-child) { padding-left: 16px; }
.tstart:last-child { border-right: 0; }
.tstart:hover { color: var(--seal); background: rgba(255, 255, 255, .35); text-decoration: none; }
.tstart .si {
  display: inline-grid; place-items: center; flex: 0 0 auto;
  width: 22px; height: 22px; border-radius: 0;
  font-family: var(--serif); font-size: 11px; line-height: 1;
  background: transparent; color: var(--seal); border: 1px solid var(--seal-soft);
}
.tstart b { display: block; font-size: 13px; font-weight: 600; }
.tstart small { display: block; margin-top: 2px; font-size: 11px; color: var(--muted); line-height: 1.5; }

/* 教学常规入口：一条细线横栏 */
.today-more {
  display: flex; align-items: center; gap: 12px;
  margin: 14px 0 30px; padding: 16px 0;
  background: transparent; border: 0; border-bottom: 1px solid var(--ink);
  border-radius: 0; color: var(--ink); text-decoration: none;
  transition: color .15s;
}
.today-more:hover { color: var(--seal); text-decoration: none; background: transparent; transform: none; }
.today-more .tm-ico {
  display: inline-grid; place-items: center; flex: 0 0 auto;
  width: 22px; height: 22px; border-radius: 0;
  font-family: var(--serif); font-size: 11px;
  background: transparent; color: var(--seal); border: 1px solid var(--seal-soft);
}
.today-more .tm-text { flex: 1; min-width: 0; }
.today-more .tm-text b { display: block; font-family: var(--serif); font-size: 13.5px; font-weight: 600; letter-spacing: .06em; }
.today-more .tm-text small { display: block; margin-top: 2px; font-size: 11.5px; line-height: 1.6; color: var(--muted); }
.today-more .tm-go { flex: 0 0 auto; font-size: 12px; color: var(--seal); letter-spacing: .04em; }

/* 班级一览：细线下拉列表 */
.today-classes { display: flex; flex-wrap: wrap; gap: 8px; }
.tclass {
  display: inline-flex; align-items: baseline; gap: 8px;
  font-family: var(--sans); font-size: 12.5px;
  padding: 6px 12px; border-radius: 2px; cursor: pointer;
  border: 1px solid var(--rule); background: transparent; color: var(--ink2);
  transition: border-color .15s, color .15s, background .15s;
}
.tclass:hover { border-color: var(--seal); background: transparent; color: var(--seal); }
.tclass b { color: var(--ink); font-weight: 600; }
.tclass span { color: var(--muted); }
.tclass-add { border-style: dashed; color: var(--muted); }
.today-firstrun .m-desc { margin: 0 0 14px; font-size: 13px; line-height: 1.75; color: var(--ink2); }

/* ---------------------------------------------------------------- 登录页 */
.lg-wrap {
  min-height: 100vh; padding: 40px 18px;
  display: flex; align-items: center; justify-content: center;
  background: var(--paper);
  background-image: none;
}
.lg-card {
  width: 100%; max-width: 404px;
  background: #fdfaf4;
  border: 1px solid #cfc9bb; border-radius: 2px;
  padding: 30px 28px 24px; box-sizing: border-box;
  box-shadow: 0 14px 40px rgba(40, 35, 25, .08);
  position: relative;
}
.lg-card::before {
  content: ''; position: absolute; left: 0; right: 0; top: 0; height: 2px; background: var(--seal);
}
.lg-brand { display: flex; align-items: center; gap: 10px; margin-bottom: 18px; }
.lg-dot {
  width: 26px; height: 26px; border-radius: 0;
  background: var(--seal); color: #f8f3e9;
  font-family: var(--serif); font-size: 13px; font-weight: 700;
}
.lg-brand b { font-family: var(--serif); font-size: 15px; color: var(--ink); letter-spacing: .05em; }
.lg-brand span { font-size: 10px; color: var(--muted); letter-spacing: .16em; margin-top: 3px; }
.lg-card h1 { margin: 0 0 6px; font-family: var(--serif); font-size: 24px; font-weight: 600; letter-spacing: .02em; color: var(--ink); }
.lg-card .lg-sub { margin: 0 0 16px; font-size: var(--fs-small); line-height: 1.75; color: var(--ink2); }
.lg-target {
  margin: 0 0 16px; padding: 9px 12px;
  background: var(--surface-2); border: 1px solid var(--rule);
  border-left: 2px solid var(--seal);
  border-radius: 0; font-size: 12px; line-height: 1.7; color: var(--ink2);
}
.lg-target b { color: var(--ink); }
.lg-target code { font-family: var(--mono); font-size: 11px; color: var(--muted); }
.lg-tabs { display: flex; gap: 0; background: transparent; border-radius: 0; padding: 0;
  margin: 0 0 18px; border-bottom: 1px solid var(--rule); }
.lg-tab {
  flex: 1; font-family: var(--sans); font-size: 13.5px; font-weight: 400; cursor: pointer;
  border: 0; background: transparent; color: var(--muted);
  border-bottom: 2px solid transparent; border-radius: 0;
  padding: 9px 0; margin-bottom: -1px;
  transition: color .15s, border-color .15s;
}
.lg-tab.on { background: transparent; color: var(--ink); font-weight: 600; border-bottom-color: var(--seal); box-shadow: none; }
.lg-fld span { font-size: 12px; font-weight: 600; color: var(--ink2); letter-spacing: .03em; }
.lg-fld input {
  padding: 9px 12px; border-radius: 2px;
  border: 1px solid var(--border-2);
  background: var(--surface); color: var(--ink);
}
.lg-fld input:focus { border-color: var(--seal); background: #fff; box-shadow: none; }
.lg-err { color: var(--danger); font-size: 12px; }
.lg-btn {
  border-radius: 2px; padding: 11px 0;
  background: var(--seal); color: #fbf5ea;
  font-size: 14px; font-weight: 600; letter-spacing: .08em;
  box-shadow: none; border: 1px solid var(--seal);
}
.lg-btn:hover { background: var(--seal-dark); border-color: var(--seal-dark); }
.lg-btn:disabled { box-shadow: none; }
.lg-foot { margin-top: 14px; font-size: 12px; color: var(--muted); }
.lg-foot a { color: var(--seal); font-weight: 600; }
.lg-note { border-top: 1px solid var(--rule); font-size: 11px; color: var(--muted); line-height: 1.8; }
.lg-auto { border-radius: 2px; background: var(--surface-2); border: 1px solid var(--rule); }
.lg-auto b { color: var(--ink); }
.lg-auto-btn { border-radius: 2px; border: 1px solid var(--seal); background: transparent; color: var(--seal); }

/* ---------------------------------------------------------------- 登录卡片（card.center-card 形态） */
.brand-lockup { display: flex; align-items: center; gap: 12px; margin-bottom: 18px; }
.brand-lockup .brand-mark { width: 34px; height: 34px; font-size: 17px; }
.brand-lockup h2 { margin: 0; font-family: var(--serif); font-size: 20px; font-weight: 600; letter-spacing: .05em; }
.brand-lockup small { display: block; margin-top: 2px; font-size: 11px; font-weight: 400; letter-spacing: .12em; color: var(--muted); }
.sec-note {
  margin: 0 0 16px; padding: 9px 12px;
  background: transparent; border: 0; border-left: 2px solid var(--rule);
  border-radius: 0; font-size: 11.5px; line-height: 1.75; color: var(--muted);
}
.sec-note strong { color: var(--ink2); }
.card.center-card {
  max-width: 404px; margin: 8vh auto 40px;
  background: #fdfaf4; border: 1px solid #cfc9bb; border-radius: 2px;
  padding: 26px 26px 22px; box-shadow: 0 14px 40px rgba(40, 35, 25, .08);
  position: relative;
}
.card.center-card::before {
  content: ''; position: absolute; left: 0; right: 0; top: 0; height: 2px; background: var(--seal);
}
.card.center-card > h2 { border-bottom: 1px solid var(--ink); }

/* ---------------------------------------------------------------- 账户挂件 */
.acct { display: flex; align-items: center; gap: 6px; margin: 0; }
.acct-user {
  padding: 3px 8px 3px 3px; border-radius: 2px; border: 1px solid transparent;
  font-size: 12.5px; font-weight: 400; color: var(--ink2);
}
.acct-user:hover { background: transparent; border-color: var(--rule); }
.acct-ava {
  width: 26px; height: 26px; border-radius: 50%;
  background: var(--surface-3); color: #4b4337;
  font-size: 12px; font-weight: 600;
}
.acct-ava.warn { background: var(--seal-soft); color: var(--seal); }
.acct-who { font-size: 12.5px; color: var(--ink); font-weight: 500; letter-spacing: .02em; }
.acct-caret { border-top-color: var(--muted); }
.acct-menu {
  width: 244px; padding: 0; border-radius: 2px;
  background: #fdfaf4; border: 1px solid #b8ae9b;
  box-shadow: 0 16px 40px rgba(30, 25, 15, .16);
}
.acct-menu-head { padding: 12px 14px; border-bottom: 1px solid var(--rule); margin: 0; }
.acct-menu-name { font-family: var(--serif); font-size: 14px; font-weight: 600; color: var(--ink); }
.acct-menu-sub { font-size: 11.5px; color: var(--muted); }
.acct-menu-note { margin-top: 6px; padding: 2px 6px; border-radius: 2px; color: var(--warn);
  background: var(--warn-l); border: 0; font-weight: 500; font-size: 11px; }
.acct-item {
  padding: 9px 14px; border-radius: 0; font-size: 12.5px; color: var(--ink2);
  border-bottom: 1px solid var(--rule-soft);
}
.acct-item:last-child { border-bottom: 0; }
.acct-item:hover { background: var(--surface-2); color: var(--ink); }
.acct-item.danger { color: var(--danger); }
.sync-chip {
  border-radius: 2px; background: transparent; border: 1px solid var(--rule);
  font-size: 11px; font-weight: 500; color: var(--muted); letter-spacing: .04em;
}
.sync-chip:hover { border-color: var(--seal); color: var(--seal); }

/* ---------------------------------------------------------------- 顶栏在窄屏的最后收口（见文件末尾媒体查询） */

@media (max-width: 1080px) {
  .topbar-inner { gap: 18px; }
  .today-cards { grid-template-columns: 1fr; border-bottom: 1px solid var(--rule); }
  .tcard, .tcard.tone-wait, .tcard.tone-confirm, .tcard.tone-final {
    display: grid; grid-template-columns: auto minmax(0, 1fr) auto;
    grid-template-areas: "head head head" "num desc act";
    align-items: center; column-gap: 18px; row-gap: 6px;
    padding: 16px 0; border-right: 0; border-bottom: 1px solid var(--rule-soft);
  }
  .tcard:last-child { border-bottom: 0; }
  .tcard .tc-head { grid-area: head; margin-bottom: 2px; }
  .tcard .tc-body { display: contents; }
  .tcard .tc-num { grid-area: num; min-width: 84px; }
  .tcard .tc-num b { font-size: 34px; }
  .tcard .tc-text { grid-area: desc; margin: 0; gap: 6px; }
  .tcard .tc-act { grid-area: act; margin: 0; flex-wrap: nowrap; }
  .tcard .tc-act .tc-time { display: none; }
  .today-start { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .tstart:nth-child(2) { border-right: 0; }
  .tstart:nth-child(3), .tstart:nth-child(4) { border-top: 1px solid var(--rule-soft); }
  .tstart:nth-child(3) { padding-left: 0; }
}

@media (max-width: 720px) {
  .topbar-inner {
    height: auto; flex-wrap: wrap;
    padding: 10px var(--page-pad) 0; gap: 8px 14px;
  }
  .brand small { display: block; }
  .topbar-spacer { display: none; }
  .top-nav {
    order: 3; width: 100%; gap: 20px;
    border-top: 1px solid var(--rule-soft); margin-top: 2px;
  }
  .top-nav a { padding: 9px 0; font-size: 13px; }
  .top-meta { margin-left: auto; gap: 10px; }
  .top-meta .tm-week { display: none; }

  .wrap, .td-wrap { padding: 24px var(--page-pad) 52px; }
  .page-head h1 { font-size: 24px; }
  .today-hero { flex-direction: column; align-items: stretch; gap: 16px; padding: 0 0 18px; }
  .today-hero .hero-main { flex: 0 0 auto; min-width: 0; }
  .today-hero h1 { font-size: 23px; }
  .today-hero h1 b { font-size: 25px; }
  .today-hero .hero-acts { width: 100%; }
  .today-hero .hero-acts .btn { flex: 1 1 auto; }
  .today-start { grid-template-columns: 1fr; }
  .tstart, .tstart:not(:first-child) { padding: 13px 0; border-right: 0; border-top: 1px solid var(--rule-soft); }
  .tstart:first-child { border-top: 0; }
  .tcard, .tcard.tone-wait, .tcard.tone-confirm, .tcard.tone-final {
    display: flex; flex-direction: column; align-items: stretch;
    padding: 16px 0;
  }
  .tcard .tc-num { min-width: 0; }
  .tcard .tc-text { margin: 6px 0 0; }
  .tcard .tc-act { margin-top: 12px; }
  .tcard .tc-act .btn { flex: 1 1 auto; }
  .card > h2 { flex-wrap: wrap; row-gap: 4px; }
  .card > h2 .sub { flex: 0 0 100%; white-space: normal; line-height: 1.6; }
  .page-head-row { flex-direction: column; align-items: flex-start; gap: 12px; }
  .page-head-row .acts { justify-content: flex-start; width: 100%; }
  .page-head-row h1 { font-size: 22px; }
  .lg-wrap { padding: 20px 14px; align-items: flex-start; }
  .lg-card { padding: 24px 18px 20px; }
  .lg-card h1 { font-size: 22px; }
}

/* ---------------------------------------------------------------- 窄屏收口（必须排最后） */
@media (max-width: 720px) {
  .card.center-card { margin: 2vh auto 24px; padding: 22px 18px 18px; }
  .acct-who { max-width: 84px; }
  .acct-menu { width: 220px; right: -6px; }
}
@media (max-width: 560px) {
  .tabbar { flex-wrap: wrap; gap: 0 18px; border-bottom: 1px solid var(--rule); }
  .tabbar .tab { padding: 9px 0; font-size: 13px; }
  .today-more { align-items: flex-start; gap: 10px; }
  .today-more .tm-text small { white-space: normal; line-height: 1.65; }
  .today-more .tm-go { align-self: center; white-space: nowrap; }
}
.lg-kicker { margin: 0 0 6px; font-size: 10px; letter-spacing: .22em; color: var(--muted); }
/* 隐藏属性必须真的隐藏（页面内联 display 会盖掉 UA 规则） */
[hidden] { display: none !important; }
.lg-foot { flex-direction: column; align-items: flex-start; gap: 6px; line-height: 1.7; }
.lg-err { margin: 2px 0 8px; }
.lg-err { min-height: 0; margin: 4px 0 10px; }
.lg-err:not(:empty) { min-height: 18px; margin: 2px 0 8px; }

/* ==========================================================================
   批改台（page-grading）
   目标：1280 下不塞三栏；正文不小于 12.5px；上传入口只保留一处；作文评级抬到显眼位置。
   ========================================================================== */
.page-grading .wrap { max-width: 1360px; padding: 24px var(--page-pad) 64px; }
.page-grading .grading-head { margin-bottom: 18px; }
.page-grading .grading-head h1 { font-size: 28px; }
.page-grading .grading-head .dek { max-width: 620px; }

/* 筛选条：只留一条细线，不下沉成灰卡 */
.page-grading .toolbar {
  background: transparent; border: 0; border-bottom: 1px solid var(--rule);
  border-radius: 0; padding: 0 0 12px; margin: 0 0 16px; gap: 18px;
}
.page-grading .toolbar label { font-size: 12px; color: var(--muted); letter-spacing: .04em; }
.page-grading .toolbar select, .page-grading .toolbar input[type=text] {
  height: 32px; font-size: 13px; border-radius: 2px; background: var(--surface);
}
.page-grading .toolbar input[type=text] { width: 220px; }

/* 上传区：全页唯一入口，横条式，不占大块高度 */
.upload-bar {
  display: flex; align-items: center; justify-content: space-between; gap: 20px;
  flex-wrap: wrap; padding: 16px 0; margin: 0 0 26px;
  border-top: 1px solid var(--ink); border-bottom: 1px solid var(--ink);
  background: transparent; border-radius: 0; cursor: pointer;
  transition: background .15s;
}
.upload-bar:hover, .upload-bar.over { background: rgba(255, 255, 255, .5); }
.upload-bar .ub-text { min-width: 0; flex: 1 1 380px; }
.upload-bar .ub-text b {
  display: block; font-family: var(--serif); font-size: 15px;
  font-weight: 600; letter-spacing: .06em;
}
.upload-bar .ub-text span { display: block; margin-top: 3px; font-size: 13px; color: var(--ink2); }
.upload-bar .ub-text small { display: block; margin-top: 3px; font-size: 11.5px; color: var(--muted); }
.upload-bar .ub-acts { display: flex; gap: 8px; flex: 0 0 auto; }

/* 批改队列 */
.page-grading .queue {
  background: transparent; border: 0; border-radius: 0;
  border-bottom: 1px solid var(--rule-soft); padding: 0 0 8px; margin: 0 0 20px;
}
.page-grading .q-head {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  padding: 8px 0; border-bottom: 1px solid var(--rule); font-size: 12.5px; color: var(--muted);
}
.page-grading .q-head b {
  font-family: var(--serif); font-size: 13.5px; font-weight: 600;
  letter-spacing: .06em; color: var(--ink);
}
.page-grading .q-head .hint { margin-left: auto; }
.page-grading .q-item {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 8px 0; border-top: 1px dashed var(--rule-soft); font-size: 12.5px;
}
.page-grading .q-item .btn.tiny { height: 24px; padding: 0 9px; font-size: 11.5px; }

/* 列表 + 详情 */
.page-grading .board { display: grid; grid-template-columns: 260px minmax(0, 1fr); gap: 24px; align-items: start; }
.page-grading .list-pane { background: transparent; border: 0; border-radius: 0; padding: 0; }
.page-grading .list-head {
  padding: 10px 0 8px; border-bottom: 1px solid var(--ink);
  font-family: var(--serif); font-size: 13px; font-weight: 600; letter-spacing: .06em;
  display: flex; align-items: baseline; gap: 8px;
}
.page-grading .list-head .cnt { margin-left: auto; font-family: var(--sans); font-weight: 400; font-size: 11.5px; color: var(--muted); }
.page-grading #uploadList { max-height: calc(100vh - 250px); overflow: auto; }
.page-grading .up-row { padding: 11px 4px; border-bottom: 1px solid var(--rule-soft); }
.page-grading .up-row:hover { background: rgba(255, 255, 255, .45); }
.page-grading .up-row.on { background: rgba(162, 64, 47, .06); box-shadow: inset 2px 0 0 var(--seal); }
.page-grading .up-row .r1 { font-size: 13px; }
.page-grading .up-row .r2 { font-size: 11.5px; color: var(--muted); }
.page-grading .batch-bar {
  background: var(--surface-2); border-bottom: 1px solid var(--rule);
  font-size: 12px; color: var(--ink2); padding: 8px 4px; gap: 6px;
}
.page-grading .batch-bar select { font-size: 12px; height: 26px; }
.page-grading .batch-bar .btn.tiny { height: 24px; padding: 0 8px; font-size: 11.5px; background: transparent; }

/* 详情头 */
.page-grading .detail-pane { background: transparent; border: 0; border-radius: 0; padding: 0; min-height: 420px; }
.page-grading .detail-head { padding: 0 0 12px; margin-bottom: 14px; border-bottom: 2px solid var(--ink); }
.page-grading .detail-head h2 { font-family: var(--serif); font-size: 19px; font-weight: 600; letter-spacing: .03em; }
.page-grading .detail-head .meta { font-size: 12px; color: var(--muted); }
.page-grading .student-bar {
  background: transparent; border-bottom: 1px solid var(--rule);
  padding: 10px 0; font-size: 12.5px; color: var(--ink2);
}
.page-grading .student-bar b { font-size: 13.5px; font-weight: 600; }
.page-grading .student-bar select, .page-grading .student-bar input { height: 30px; font-size: 12.5px; }

/* 原件 + 判定：两栏（列表已上移成横条，不再三栏挤压） */
.page-grading .review-grid { grid-template-columns: minmax(0, 1fr) 400px; gap: 26px; }
.page-grading .doc-pane {
  background: var(--paper-deep); border: 0; border-radius: 0;
  padding: 14px; max-height: calc(100vh - 190px); overflow: auto;
}
.page-grading .analysis-pane {
  padding: 0; max-height: calc(100vh - 190px); overflow: auto;
  scrollbar-width: thin;
}
.page-grading .page-wrap {
  background: #fff; border: 1px solid #cfc9bb; border-radius: 2px;
  box-shadow: 0 1px 0 #fff inset, 0 2px 10px rgba(40, 35, 25, .06);
}
.page-grading .page-wrap .pv-label { font-size: 10.5px; border-radius: 0; background: #fffefb; border: 1px solid var(--rule-soft); color: var(--muted); }

/* 统计 */
.page-grading .stat-row {
  display: flex; flex-wrap: wrap; gap: 0; margin: 0 0 18px;
  border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule);
}
.page-grading .stat-row .s {
  flex: 1 1 0; min-width: 86px; padding: 10px 14px;
  border-right: 1px solid var(--rule-soft);
}
.page-grading .stat-row .s:last-child { border-right: 0; }
.page-grading .stat-row .s b { display: block; font-family: var(--serif); font-size: 23px; line-height: 1.15; font-weight: 600; }
.page-grading .stat-row .s span { display: block; margin-top: 2px; font-size: 11px; letter-spacing: .06em; color: var(--muted); }

/* 错题分析 */
.page-grading .an-block { margin-bottom: 22px; }
.page-grading .an-block h3 {
  margin: 0 0 8px; padding-bottom: 6px; border-bottom: 1px solid var(--rule);
  font-family: var(--serif); font-size: 14px; font-weight: 600; letter-spacing: .06em;
}
.page-grading .overview { font-size: 13.5px; line-height: 1.85; color: var(--ink2); }
.page-grading .chip { border-radius: 2px; font-size: 11.5px; background: var(--warn-l); color: var(--warn); border: 0; }
.page-grading .chip.blue { background: var(--surface-3); color: var(--ink2); border: 0; }
.page-grading .chip.pick:hover { background: var(--seal-soft); color: var(--seal); }
.page-grading .sugg { font-size: 13px; line-height: 1.9; color: var(--ink2); }

/* 题卡 */
.page-grading .items { gap: 0; }
.page-grading .item {
  border: 0; border-bottom: 1px solid var(--rule-soft); border-left: 2px solid transparent;
  border-radius: 0; background: transparent; padding: 12px 10px 12px 12px;
  transition: background .15s, border-color .15s;
}
.page-grading .item:first-child { border-top: 1px solid var(--rule-soft); }
.page-grading .item:hover { background: rgba(255, 255, 255, .45); border-bottom-color: var(--rule); }
.page-grading .item.hl { border-left-color: var(--seal); background: rgba(162, 64, 47, .05); box-shadow: none; }
.page-grading .item .ih { font-size: 13.5px; font-weight: 600; }
.page-grading .item .ih .conf { font-size: 11px; font-weight: 400; }
.page-grading .item .ih .conf.warn { background: var(--warn-l); color: var(--warn); border-radius: 2px; }
.page-grading .score-rule { font-size: 11.5px; color: var(--muted); }
.page-grading .it-stem { font-size: 13.5px; line-height: 1.8; color: var(--ink2); margin-top: 7px; }
.page-grading .it-ans { font-size: 13px; line-height: 1.7; color: var(--muted); }

.page-grading .vbtn {
  border-radius: 2px; padding: 5px 11px; font-size: 12.5px;
  border: 1px solid var(--rule); background: transparent; color: var(--ink2);
}
.page-grading .vbtn:hover { border-color: var(--seal); color: var(--seal); }
.page-grading .vbtn.on.correct { background: #e3ebe1; border-color: #8ea392; color: #3c5a40; }
.page-grading .vbtn.on.wrong { background: var(--seal-soft); border-color: #c08b7f; color: var(--seal); }
.page-grading .vbtn.on.partial { background: var(--warn-l); border-color: #cfa66b; color: var(--warn); }
.page-grading .vbtn.on.unclear { background: var(--surface-3); border-color: var(--rule); color: var(--ink2); }
.page-grading .it-vnote { font-size: 12.5px; }
.page-grading .vn-badge { border-radius: 2px; }
.page-grading .vn-badge.ok { background: #e3ebe1; color: #3c5a40; }
.page-grading .vn-badge.half { background: var(--warn-l); color: var(--warn); }
.page-grading .vn-badge.bad { background: var(--seal-soft); color: var(--seal); }
.page-grading .vn-badge.un { background: var(--surface-3); color: var(--ink2); }
.page-grading .it-vnote .vn-reason { background: transparent; border-left: 1px solid var(--rule); border-radius: 0; padding: 0 0 0 7px; }
.page-grading .it-vnote .vn-step { background: var(--warn-l); border-radius: 2px; }
.page-grading .it-foot input { height: 30px; font-size: 12.5px; border-radius: 2px; }
.page-grading .tagbtn { border-radius: 2px; font-size: 11.5px; padding: 2px 8px; }
.page-grading .tagbtn.on { background: var(--seal-soft); border-color: #c08b7f; color: var(--seal); }
.page-grading .it-corr { border-top: 1px dashed var(--rule-soft); }
.page-grading .corr-flag { border-radius: 2px; background: #e3ebe1; color: #3c5a40; }

/* 作文：把「人工评级」抬成独立区块，4 档按钮做成等宽大按钮 */
.page-grading .item.essay {
  border-left: 3px solid var(--seal);
  background: rgba(255, 255, 255, .42);
}
.page-grading .item.essay .ih .conf.essay { background: var(--seal-soft); color: var(--seal); border-radius: 2px; }
.page-grading .essay-box { border: 1px solid var(--rule); border-radius: 0; background: #fffefb; }
.page-grading .essay-h { border-bottom: 1px dashed var(--rule); color: var(--muted); font-size: 12px; letter-spacing: .05em; }
.page-grading .essay-text { font-size: 13.5px; line-height: 1.85; color: var(--ink); }

.essay-rate {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin: 12px 0 4px; padding: 10px 12px;
  border: 1px solid var(--seal); border-left-width: 3px; background: #fffdf9;
}
.essay-rate .er-lab {
  flex: 0 0 auto; font-family: var(--serif); font-size: 12.5px;
  letter-spacing: .1em; color: var(--seal); font-weight: 600;
}
.essay-rate .er-btns { display: flex; gap: 6px; flex: 1 1 260px; }
.essay-rate .lvbtn {
  flex: 1 1 0; height: 34px; padding: 0 10px;
  border: 1px solid var(--rule-2, var(--border-2)); border-radius: 2px;
  background: transparent; color: var(--ink2);
  font-size: 13px; font-weight: 600; cursor: pointer;
  transition: background .15s, border-color .15s, color .15s;
}
.essay-rate .lvbtn:hover:not(:disabled) { border-color: var(--seal); color: var(--seal); }
.essay-rate .lvbtn.on { background: var(--seal); border-color: var(--seal); color: #fbf5ea; }
.essay-rate .er-hint { flex: 0 0 100%; font-size: 12.5px; color: var(--ink2); line-height: 1.65; }
.essay-callout {
  margin: 0 0 18px; padding: 14px 16px;
  border: 1px solid var(--seal); border-left-width: 4px;
  background: #fffdf9;
}
.essay-callout .ec-top { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.essay-callout .ec-kicker { font-size: 11px; letter-spacing: .18em; color: var(--seal); }
.essay-callout b { font-family: var(--serif); font-size: 15px; font-weight: 600; color: var(--ink); }
.essay-callout p { margin: 6px 0 10px; font-size: 12.5px; line-height: 1.75; color: var(--ink2); }
.essay-callout .ec-stats { display: flex; gap: 0; border-top: 1px solid var(--rule-soft); }
.essay-callout .ec-stats span {
  flex: 1 1 0; padding: 7px 4px 0; font-size: 12px; color: var(--muted);
  border-right: 1px solid var(--rule-soft);
}
.essay-callout .ec-stats span:last-child { border-right: 0; }
.essay-callout .ec-stats b { font-family: var(--serif); font-size: 16px; color: var(--ink); margin-left: 4px; }

/* 1280 及以下：记录列表变成顶部横条，原件与判定两栏 */
@media (max-width: 1440px) {
  .page-grading .board { display: block; }
  .page-grading .list-pane {
    background: transparent; border: 0; border-top: 1px solid var(--ink);
    border-bottom: 1px solid var(--rule); border-radius: 0;
    padding: 0; margin: 0 0 24px;
  }
  .page-grading .list-head { border-bottom: 0; padding: 10px 0 2px; }
  .page-grading #uploadList {
    display: flex; overflow-x: auto; overflow-y: hidden;
    max-height: none; padding-bottom: 6px; gap: 0;
  }
  .page-grading .up-row {
    flex: 0 0 214px; border-bottom: 0; border-right: 1px solid var(--rule-soft);
    padding: 9px 12px;
  }
  .page-grading .up-row:first-child { padding-left: 0; }
  .page-grading .up-row.on { box-shadow: inset 0 -2px 0 var(--seal); background: rgba(162, 64, 47, .05); }
  .page-grading .up-row .r1 .nm { white-space: normal; }
}

@media (max-width: 1200px) {
  .page-grading .review-grid { grid-template-columns: minmax(0, 1fr); }
  .page-grading .doc-pane { max-height: none; border-bottom: 1px solid var(--rule); }
  .page-grading .analysis-pane { max-height: none; }
}

@media (max-width: 720px) {
  .page-grading .wrap { padding: 18px var(--page-pad) 48px; }
  .page-grading .grading-head h1 { font-size: 23px; }
  .page-grading .toolbar { gap: 10px 16px; }
  .page-grading .toolbar label { flex: 1 1 100%; justify-content: space-between; }
  .page-grading .toolbar select, .page-grading .toolbar input[type=text] { flex: 1 1 auto; width: auto; }
  .upload-bar { padding: 13px 0; gap: 12px; }
  .upload-bar .ub-acts { width: 100%; }
  .upload-bar .ub-acts .btn { flex: 1 1 0; }
  .page-grading .stat-row .s { flex: 1 1 30%; min-width: 0; padding: 8px 10px; }
  .page-grading .stat-row .s b { font-size: 20px; }
  .page-grading .up-row { flex: 0 0 186px; }
  .essay-rate { padding: 9px 10px; }
  .essay-rate .er-btns { flex-wrap: wrap; }
  .essay-rate .lvbtn { flex: 1 1 40%; }
  .page-grading .detail-head h2 { font-size: 17px; }
}
/* 批改台：右栏统计三列、判定按钮等宽、标题徽标留白 */
.page-grading .analysis-pane .stat-row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.page-grading .analysis-pane .stat-row .s { min-width: 0; }
.page-grading .analysis-pane .stat-row .s:nth-child(3n) { border-right: 0; }
.page-grading .detail-head h2 .pill { margin-left: 8px; vertical-align: 2px; }

/* ==========================================================================
   教学常规工作台（teacher-workbench.html / teacher-workbench-mobile.html）
   页面自带一套 --page-bg / --drawer-* 令牌，这里在 body 上整体换成方向 A 的
   纸色 + 墨色 + 印泥红刻度，不改动其脚本与结构。
   ========================================================================== */
body.page-workbench {
  --page-bg: var(--paper);
  --surface-card: var(--surface);
  --surface-nested: #efe9dc;
  --border: var(--rule);
  --border-input: #c9c0ae;
  --text: var(--ink);
  --text-secondary: var(--ink2);
  --text-tertiary: var(--muted);
  --accent: var(--seal);
  --accent-muted: #f2e2dd;
  --on-accent: #fbf5ea;
  --module-1: #425b46;
  --module-2: #3c5a6b;
  --module-3: #8a5a27;
  --module-4: #96331f;
  --module-5: #6b5b7a;
  --danger: #96331f;
  --danger-muted: #f4e3df;
  --drawer-bg: #efe9dc;
  --drawer-bg-top: #f3efe6;
  --drawer-text: #191d21;
  --drawer-text-mute: #6f6a5e;
  --drawer-hover: rgba(25, 29, 33, .05);
  --drawer-active: rgba(162, 64, 47, .10);
  --radius-control: 2px;
  --radius-tile: 2px;
  --radius-card: 2px;
  --radius-sheet: 3px;
  --shadow-card: none;
  --shadow-overlay: 0 8px 24px rgba(25, 29, 33, .14);
  --greet-image: none;
  background: var(--paper);
  color: var(--ink);
}

/* 标题换宋体，字重收敛 */
body.page-workbench .header h2,
body.page-workbench .hero-banner .hi,
body.page-workbench .sec-grp .zh,
body.page-workbench .modcard .mc-name,
body.page-workbench .quote .txt,
body.page-workbench .sidebar .brand h1,
body.page-workbench .drawer .dh h2 { font-family: var(--serif); font-weight: 500; letter-spacing: .02em; }

body.page-workbench .card,
body.page-workbench .modcard,
body.page-workbench .quote,
body.page-workbench .hero-banner,
body.page-workbench .date-chip,
body.page-workbench .ring,
body.page-workbench .empty .e { border-radius: 2px; box-shadow: none; }

/* 侧栏：纸色 + 墨字，选中用印泥红左竖线，不再用深色渐变 */
body.page-workbench .sidebar {
  background: var(--drawer-bg);
  border-right: 1px solid var(--rule);
  color: var(--ink);
}
body.page-workbench .sidebar .brand h1 { font-size: 18px; }
body.page-workbench .sidebar .brand p {
  color: var(--muted); letter-spacing: .08em; opacity: 1; font-size: 10.5px;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 150px;
}
body.page-workbench .sidebar .brand .ava { border-radius: 2px; background: var(--surface); box-shadow: 0 0 0 1px var(--rule); }
body.page-workbench .navi {
  border-radius: 0; color: var(--ink2); font-size: 13.5px;
  border-left: 2px solid transparent; padding: 10px 12px;
}
body.page-workbench .navi:hover { background: var(--drawer-hover); color: var(--ink); }
body.page-workbench a.navi { color: var(--ink2); }
body.page-workbench a.navi:hover { color: var(--ink); }
body.page-workbench .navi.active {
  background: var(--drawer-active); color: var(--seal); font-weight: 600;
  border-left-color: var(--seal);
}
body.page-workbench .navi svg { color: var(--muted); }
body.page-workbench .navi.active svg { color: var(--seal); }
body.page-workbench .nav-sep {
  color: var(--muted); opacity: 1; font-size: 11px; letter-spacing: .16em;
}
body.page-workbench .sidebar .foot {
  color: var(--muted); opacity: 1; border-top: 1px solid var(--rule-soft);
}
body.page-workbench .foot-btn {
  border-radius: 2px; border-color: var(--rule); color: var(--ink2); background: transparent;
}
body.page-workbench .foot-btn:hover { border-color: var(--seal); color: var(--seal); }

/* 主区：去掉圆角阴影的大白卡感觉，保留结构 */
body.page-workbench .header h2 { font-size: 26px; }
body.page-workbench .sec-title { font-weight: 600; font-size: 14.5px; letter-spacing: .04em; }
body.page-workbench .sec-title::before,
body.page-workbench .sec-grp .bar { width: 2px; height: 15px; border-radius: 0; }
body.page-workbench .sec-grp .en { font-size: 10.5px; letter-spacing: .18em; color: var(--muted); font-weight: 500; }

/* 顶部问候区：去掉照片背景，改成纸色底 + 墨色大字 */
body.page-workbench .hero-banner {
  background: var(--surface);
  border: 1px solid var(--rule);
  min-height: 0; padding: 26px 30px;
}
body.page-workbench .hero-banner::before { display: none; }
body.page-workbench .hero-banner .hi { font-size: 30px; }
body.page-workbench .hero-banner .sub { color: var(--ink2); font-size: 13.5px; }
body.page-workbench .hero-banner .hstat .n { font-family: var(--serif); font-size: 21px; font-weight: 600; }
body.page-workbench .hero-banner .hstat .t { color: var(--muted); }
body.page-workbench .hero-banner .hstat + .hstat { border-left-color: var(--rule); }
body.page-workbench .modcard:hover { transform: none; border-color: var(--rule-2, var(--border-input)); box-shadow: none; }
body.page-workbench .modcard .mc-ic { border-radius: 2px; }
body.page-workbench .quote::before { width: 2px; border-radius: 0; }
body.page-workbench .quote .txt { font-size: 19px; font-weight: 600; }

body.page-workbench .btn { border-radius: 2px; padding: 9px 16px; font-size: 13.5px; font-weight: 600; }
body.page-workbench .btn.ghost { border-color: var(--rule); background: transparent; color: var(--ink2); }
body.page-workbench .btn.ghost:hover { border-color: var(--seal); color: var(--seal); }
body.page-workbench .date-chip {
  border-radius: 2px; background: transparent; border-color: var(--rule);
  color: var(--ink2); font-size: 12.5px;
}
body.page-workbench .ring .pct { font-family: var(--serif); font-weight: 600; }
body.page-workbench .ring .lbl { font-weight: 600; font-size: 14px; }
body.page-workbench .stat-row .val { font-family: var(--serif); font-weight: 600; }
body.page-workbench .stat-big { font-family: var(--serif); font-weight: 600; }
body.page-workbench .empty .e { background: transparent; border-color: var(--rule); color: var(--muted); }

/* 大时钟卡：暗色光晕 → 纸色纸卡，宋体时刻，靠一条印泥红上沿线收住 */
body.page-workbench .clock-card {
  background: var(--surface);
  color: var(--ink);
  border: 1px solid var(--rule);
  border-top: 2px solid var(--seal);
  box-shadow: none;
}
body.page-workbench .clock-card::before,
body.page-workbench .clock-card::after { display: none; }
body.page-workbench .clock-card .hi {
  font-family: var(--serif); font-size: 25px; font-weight: 600; letter-spacing: .02em;
}
body.page-workbench .clock-card .sub { opacity: 1; color: var(--ink2); }
body.page-workbench .clock-card .clk {
  font-family: var(--serif); font-weight: 600; letter-spacing: .03em;
  font-variant-numeric: tabular-nums;
}
body.page-workbench .clock-card .cmeta { opacity: 1; color: var(--muted); }

/* 瓷砖标题：宋体中文 + 收敛的英文小标 */
body.page-workbench .tile-h .zh { font-family: var(--serif); font-weight: 500; font-size: 15px; }
body.page-workbench .tile-h .en { font-weight: 600; letter-spacing: .16em; }
body.page-workbench .tile-h .r { font-weight: 600; }
body.page-workbench .card h3,
body.page-workbench .panel h3 { font-family: var(--serif); font-weight: 500; }

/* 手机端：顶栏标题宋体、问候卡换纸卡 */
body.page-workbench-m .topbar .title { font-family: var(--serif); font-weight: 600; font-size: 16.5px; }
body.page-workbench-m .topbar .title small {
  font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
body.page-workbench-m .topbar .menu-btn { border-radius: 2px; box-shadow: none; border: 1px solid var(--rule); background: var(--surface); }
body.page-workbench-m .greet {
  background: var(--surface); border: 1px solid var(--rule); border-top: 2px solid var(--seal);
  border-radius: 2px; box-shadow: none; min-height: 0; padding: 20px 18px 22px;
}
body.page-workbench-m .greet::before { display: none; }
body.page-workbench-m .greet h1 { font-family: var(--serif); font-weight: 600; font-size: 24px; letter-spacing: .02em; }
body.page-workbench-m .greet p { color: var(--ink2); }
body.page-workbench-m .greet .add {
  border-radius: 2px; box-shadow: none; font-weight: 600;
}
body.page-workbench-m .card,
body.page-workbench-m .hero,
body.page-workbench-m .hero-ic { border-radius: 2px; }

/* 番茄钟：深色卡 → 纸卡 + 印泥红进度环 */
body.page-workbench .pomo {
  background: var(--surface); color: var(--ink);
  border: 1px solid var(--rule); border-top: 2px solid var(--seal);
  border-radius: 2px; box-shadow: none;
}
body.page-workbench .pomo::before { display: none; }
body.page-workbench .pomo .pen { opacity: 1; color: var(--muted); font-weight: 600; letter-spacing: .16em; }
body.page-workbench .pomo .pzh { font-family: var(--serif); font-weight: 600; font-size: 14px; }
body.page-workbench .pomo .ring-wrap svg circle:first-child { stroke: var(--rule-soft); }
body.page-workbench #pomo-fg { stroke: var(--seal); }
body.page-workbench .pomo .ptime .t { font-family: var(--serif); font-weight: 600; }
body.page-workbench .pomo .ptime .s { opacity: 1; color: var(--muted); font-size: 11.5px; }
body.page-workbench .pomo .pctl button {
  border-radius: 2px; border: 1px solid var(--rule);
  background: transparent; color: var(--ink2); font-weight: 600; font-size: 12.5px;
}
body.page-workbench .pomo .pctl button.primary {
  background: var(--seal); border-color: var(--seal); color: #fbf5ea;
}
body.page-workbench .pomo .pstats .ps { background: var(--surface-nested); border-radius: 2px; }
body.page-workbench .pomo .pstats .pv { font-family: var(--serif); font-weight: 600; }
body.page-workbench .pomo .pstats .pl { opacity: 1; color: var(--muted); }

/* 底部导航共 5 项，原 3 列网格会把后两项挤到第二行 */
body.page-workbench-m .nav {
  display: flex; background: rgba(243, 239, 230, .96);
  border-top: 1px solid var(--rule); backdrop-filter: blur(14px);
}
body.page-workbench-m .nav .n { flex: 1 1 0; min-width: 0; }
body.page-workbench-m .nav .n .lbl { white-space: nowrap; }

/* 侧滑菜单：选中项用印泥红竖线，与桌面侧栏同一规则 */
body.page-workbench-m .drawer .ditem { border-left: 2px solid transparent; padding-left: 20px; }
body.page-workbench-m .drawer .ditem.active { color: var(--seal); border-left-color: var(--seal); }
body.page-workbench-m .drawer .ditem.active svg { color: var(--seal); }
body.page-workbench-m .drawer .dsep { background: var(--rule); }





