/* ============================================================
   语文教师工作台
   规格来源：《高中语文教师工作台 系统说明与AI备课提示词》
   ============================================================ */
/* ---------- 统一外观（20260909 · 视觉高级化批次B） ----------
   主题收敛为单一暖调外观（审查稿拍板项①）：历史 8 套主题 ID 的选择行为保留，
   视觉统一到本块；外观抽屉的主题入口已替换为说明（见 appearanceControlsHtml）。
   基础令牌（--bg/--card/--ink/--accent/--line/--z-*/--space-*…）来自
   assets/css/tokens.css?v=20260909e，此处只保留本页仍在引用的旧名兼容变量。 */
:root,[data-theme]{
  --bg2:#f1e9dd;               /* 旧名兼容：次级背景 */
  --ink3:#7d7268;              /* 旧名兼容：弱文本（#9d978b 对比不足，提至 ≥4.5:1） */
  --danger:#a33f32;            /* 旧名兼容：同 --bad */
  --radius:16px;               /* 旧名兼容：卡片圆角，同 --radius-lg */
  --shadow:var(--shadow-card); /* 旧名兼容：卡片阴影 */
  --app-bg:none;               /* 装饰性渐变背景退役，页面回归单一暖底 */
}

html,body{height:100%}
body{
  font-family:-apple-system,'PingFang SC','Hiragino Sans GB','Microsoft YaHei','Noto Sans CJK SC',sans-serif;
  background:var(--bg);color:var(--ink);line-height:1.7;letter-spacing:.02em;
}
:root,[data-reading-density="standard"]{--reading-paragraph-line-height:2.1;--reading-content-line-height:1.95}
[data-reading-density="compact"]{--reading-paragraph-line-height:1.85;--reading-content-line-height:1.72}
[data-reading-density="relaxed"]{--reading-paragraph-line-height:2.35;--reading-content-line-height:2.18}
.read-body .rb-paras p{line-height:var(--reading-paragraph-line-height)}
.read-body .rb-note p,.md-body,.lesson-md,.lesson-edit{line-height:var(--reading-content-line-height)}
::selection{background:var(--accent);color:#fff}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
input,textarea,select{font-family:inherit;color:inherit}
a{color:inherit;text-decoration:none}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:var(--accent2);opacity:.5;border-radius:8px;border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-track{background:transparent}

/* ---------- 布局：桌面侧边栏 + 主区独立滚动 ---------- */
.app{display:flex;height:100vh;overflow:hidden}
.sidebar{
  width:224px;flex:none;background:var(--card);border-right:1px solid var(--border);
  display:flex;flex-direction:column;overflow-y:auto;
}
.side-logo{padding:22px 18px 14px;display:flex;align-items:center;gap:12px;border-bottom:1px solid var(--line)}
.flower-logo{
  width:42px;height:42px;border-radius:50%;flex:none;background:var(--accent-soft);
  color:var(--accent2);display:flex;align-items:center;justify-content:center;font-size:20px;overflow:hidden;
  box-shadow:var(--shadow-1);border:2px solid var(--card);
}
.flower-logo img{width:100%;height:100%;object-fit:cover;display:block}
.side-logo b{font-size:16px;letter-spacing:.06em;display:block;line-height:1.35}
.side-logo span{font-size:12px;color:var(--ink3);letter-spacing:.1em;display:block;text-align:left;line-height:1.35;margin-top:3px}
.side-nav{flex:1;padding:12px 10px}
.side-item .ic{font-size:16px;width:22px;text-align:center;flex:none}
.side-item.active{background:var(--accent);color:#fff;font-weight:600;box-shadow:0 6px 16px -10px var(--accent2)}
.side-foot{padding:14px 16px;font-size:12px;color:var(--ink3);border-top:1px solid var(--line);line-height:1.7}
.main{flex:1;overflow-y:auto;position:relative}
.main-in{max-width:1080px;margin:0 auto;padding:26px 28px 80px}

/* ---------- 移动端顶栏 & 底栏 ---------- */
.m-topbar{display:none;position:sticky;top:0;z-index:var(--z-sticky);background:var(--card);border-bottom:1px solid var(--border);padding:10px 14px;align-items:center;gap:8px}
.m-topbar .flower-logo{width:34px;height:34px;font-size:16px}
.m-topbar b{font-size:14px;letter-spacing:.05em;white-space:nowrap}
.m-topbar .name-input{flex:1;min-width:0}
.m-topbar input{width:100%;padding:5px 10px;border:1px solid var(--border);border-radius:999px;background:var(--card2);font-size:13px;text-align:center}
.m-bottom{display:none;position:fixed;left:0;right:0;bottom:0;z-index:var(--z-sticky);background:var(--card);border-top:1px solid var(--border)}
.m-bottom-in{display:flex;overflow-x:auto;padding:6px 8px calc(6px + env(safe-area-inset-bottom))}
.m-tab .ic{font-size:16px}
.m-tab.active{color:var(--accent2);background:var(--accent-soft)}

/* ---------- 通用组件 ---------- */
.view{display:none;animation:viewIn .35s ease}
.view.active{display:block}
@keyframes viewIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.page-head{margin-bottom:20px}
.page-head .kicker{font-size:var(--fs-xs);letter-spacing:.14em;color:var(--accent2);margin-bottom:3px}
.page-head h1{font-family:'Noto Serif SC','Songti SC','SimSun',serif;font-size:28px;letter-spacing:.08em;font-weight:600}
.page-head p{color:var(--ink2);font-size:13px;margin-top:5px;letter-spacing:.03em}
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:18px 20px;box-shadow:var(--shadow);margin-bottom:16px;min-width:0}
.card-head{display:flex;align-items:center;gap:8px;margin-bottom:12px;flex-wrap:wrap}
.card-head h3{font-size:16px;font-weight:600;letter-spacing:.06em;display:flex;align-items:center;gap:8px}
.card-head h3 .dot{width:9px;height:9px;border-radius:50%;background:var(--accent);flex:none}
.card-head .hint{font-size:12px;color:var(--ink3)}
.card-head .spacer{flex:1}
.card-head>.card-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:0 0 auto}
.grid{display:grid;gap:16px}
.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:10px;font-size:13px;color:#fff;background:var(--accent);transition:all .15s;white-space:nowrap}
.btn.accent{background:var(--accent)} .btn.accent:hover{background:var(--accent2)}
.btn.ghost{background:var(--card);border:1px solid var(--border);color:var(--ink2)}
.btn.ghost:hover{border-color:var(--accent);color:var(--accent2)}
.btn.danger{background:var(--danger)}
.btn.sm{padding:5px 12px;font-size:13px;border-radius:8px}
.btn:disabled{opacity:.55;cursor:not-allowed}
.btn-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.field{margin-bottom:12px}
.field label{display:block;font-size:13px;color:var(--ink2);letter-spacing:.06em;margin-bottom:5px}
.field label .req{color:var(--danger)}
.input,textarea.input,select.input{
  width:100%;padding:8px 12px;border:1px solid var(--border);border-radius:10px;background:var(--card2);
  font-size:13px;letter-spacing:.02em;transition:border-color .15s;resize:vertical;
}
.input:focus,textarea.input:focus,select.input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 22%, transparent)}
.pill{border:1px solid var(--border);border-radius:999px;padding:5px 13px;font-size:13px;color:var(--ink2);background:var(--card);transition:all .14s;letter-spacing:.04em}
.pill:hover{border-color:var(--accent);color:var(--accent2)}
.pill.active{background:var(--accent);border-color:var(--accent);color:#fff}
.pill-row{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0 14px}
.empty{color:var(--ink3);font-size:13px;text-align:center;padding:24px 0 20px;letter-spacing:.04em;line-height:1.65;font-weight:400}
.tag{font-size:12px;border-radius:999px;padding:2px 10px;letter-spacing:.1em;flex:none;white-space:nowrap}
.modal-mask{position:fixed;inset:0;z-index:var(--z-drawer);background:rgba(40,35,30,.42);display:none;align-items:flex-start;justify-content:center;padding:6vh 18px 40px;overflow-y:auto}
.modal-mask.open{display:flex}
.modal{background:var(--card);border:1px solid var(--border);border-radius:16px;box-shadow:0 26px 70px -24px rgba(0,0,0,.5);width:100%;max-width:560px;padding:22px 24px;max-height:84vh;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.modal h3{font-size:20px;font-weight:600;letter-spacing:.05em;margin-bottom:14px;display:flex;align-items:center;gap:8px}
.modal h3 .dot{width:9px;height:9px;border-radius:50%;background:var(--accent)}
.modal-foot{display:flex;justify-content:flex-end;gap:8px;margin-top:16px;flex-wrap:wrap}

/* ---------- C3-1 内联样式回收：lessonplans / transfer / zuowen / wenxue（20260909） ---------- */
.modal-note{margin:4px 0 10px;font-size:13px;color:var(--ink2);line-height:1.7}
.modal-note.meta{font-size:12px;color:var(--ink3)}
.modal-note.quiet{color:var(--ink3);margin:0 0 10px}
.pill.danger-ink{padding:2px 8px;font-size:12px;color:var(--danger)}
.btn-row.tight{margin:0 0 6px}
.btn-row.snug{margin-top:6px}
.empty.compact{padding:8px 0 4px}
.field-cols{display:flex;gap:8px}
.field-echo{font-size:13px;color:var(--accent2);margin-top:4px}
.quote-figures{margin-top:8px}
.wx-note-gap{margin:8px 0}
.wx-mode-bar{margin:10px 0}
.wx-preview-scroll{max-height:180px;overflow:auto}

/* ---------- C3-3 内联样式回收：scores / mistakes / admin / settings 残余（20260909） ---------- */
.ad-color-accent{color:var(--accent)}
.ad-color-ink3-font-size-12px{color:var(--ink3);font-size:12px}
.ad-color-ink3-font-size-12px-line-height-17{color:var(--ink3);font-size:12px;line-height:1.7}
.ad-color-ink3-text-align-left{color:var(--ink3);text-align:left}
.ad-display-block-margin-top-3px-color-ink3{display:block;margin-top:3px;color:var(--ink3)}
.ad-display-block-margin-top-4px-color-ink3-font{display:block;margin-top:4px;color:var(--ink3);font-size:12px}
.ad-display-flex-align-items-center-gap-8px-font{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink2);margin-top:8px}
.ad-display-flex-align-items-center-gap-8px-marg{display:flex;align-items:center;gap:8px;margin-top:8px;font-size:12px}
.ad-font-size-28px-margin-bottom-8px{font-size:28px;margin-bottom:8px}
.ad-grid-column-1-1-color-ink3{grid-column:1 / -1;color:var(--ink3)}
.ad-grid-template-columns-1fr1fr{grid-template-columns:1fr 1fr}
.ad-grid-template-columns-1fr1fr-margin-top-9px{grid-template-columns:1fr 1fr;margin-top:9px}
.ad-grid-template-columns-repeat2minmax01fr-marg{grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:12px}
.ad-grid-template-columns-repeat5minmax01fr-marg{grid-template-columns:repeat(5,minmax(0,1fr));margin-bottom:12px}
.ad-margin-top-10px-padding-13px{margin-top:10px;padding:13px}
.ad-max-height-72vh-overflow-auto-font-size-13px{max-height:72vh;overflow:auto;font-size:13px}
.ad-overflow-auto{overflow:auto}
.ad-width-100-border-collapse-collapse{width:100%;border-collapse:collapse}
.ad-width-16px-height-16px-accent-color-accent{width:16px;height:16px;accent-color:var(--accent)}
.ap-font-size-13px-flex-none{font-size:13px;flex:none}
.ap-padding-8px10px-border-1pxsolidline-border-r{padding:8px 10px;border:1px solid var(--line);border-radius:10px;margin-bottom:6px;display:flex;gap:8px;align-items:baseline}
.cm-font-size-12px-color-ink2-margin-top-2px{font-size:12px;color:var(--ink2);margin-top:2px}
.cm-font-size-12px-color-ink3-margin-8px014px{font-size:12px;color:var(--ink3);margin:8px 0 14px}
.cm-font-size-12px-color-ink3-margin-top-2px{font-size:12px;color:var(--ink3);margin-top:2px}
.cm-font-size-13px-color-accent2-margin-top-6px{font-size:13px;color:var(--accent2);margin-top:6px}
.cm-margin-10px0{margin:10px 0}
.cm-margin-14px0-padding-10px12px-background-car{margin:14px 0;padding:10px 12px;background:var(--card2);border-radius:10px}
.ex-display-block-margin-top-2px-color-ink3{display:block;margin-top:2px;color:var(--ink3)}
.ex-display-flex-align-items-center-gap-8px-padd{display:flex;align-items:center;gap:8px;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card2);font-size:13px}
.ex-display-flex-align-items-flex-start-gap-8px-{display:flex;align-items:flex-start;gap:8px;margin-top:12px;font-size:12px;color:var(--ink2);line-height:1.6}
.ex-display-flex-gap-8px-align-items-center-marg{display:flex;gap:8px;align-items:center;margin-bottom:6px}
.ex-display-grid-gap-8px-max-height-42vh-overflo{display:grid;gap:8px;max-height:42vh;overflow:auto}
.ex-font-size-12px-color-danger-line-height-16-m{font-size:12px;color:var(--danger);line-height:1.6;margin-top:10px}
.ex-font-size-12px-color-ink3-margin-6px00{font-size:12px;color:var(--ink3);margin:6px 0 0}
.ex-font-size-13px-color-ink2-line-height-175{font-size:13px;color:var(--ink2);line-height:1.75}
.ex-margin-12px0-min-width-0{margin:12px 0;min-width:0}
.ex-margin-top-3px-accent-color-accent{margin-top:3px;accent-color:var(--accent)}
.mk-border-1pxsolidborder-border-radius-10px-pad{border:1px solid var(--border);border-radius:10px;padding:12px;margin-bottom:10px;background:var(--card)}
.mk-color-accent2{color:var(--accent2)}
.mk-color-danger-line-height-17{color:var(--danger);line-height:1.7}
.mk-flex-1-min-width-180px-max-width-240px{flex:1;min-width:180px;max-width:240px}
.mk-flex-2-min-width-240px{flex:2;min-width:240px}
.mk-flex-2-min-width-260px{flex:2;min-width:260px}
.mk-font-size-12px-color-accent2-margin-top-4px{font-size:12px;color:var(--accent2);margin-top:4px}
.mk-font-size-12px-color-ink3-margin-6px0{font-size:12px;color:var(--ink3);margin:6px 0}
.mk-font-size-13px-color-accent2-margin-top-8px{font-size:13px;color:var(--accent2);margin-top:8px}
.mk-font-size-13px-color-ink-line-height-18-marg{font-size:13px;color:var(--ink);line-height:1.8;margin-top:4px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.mk-font-size-13px-color-ink-line-height-19-whit{font-size:13px;color:var(--ink);line-height:1.9;white-space:pre-wrap}
.mk-max-height-60vh-overflow-y-auto{max-height:60vh;overflow-y:auto}
.mk-overflow-x-auto{overflow-x:auto}
.mk-padding-24px0{padding:24px 0}
.mk-padding-24px8px-border-1pxdashedborder-borde{padding:24px 8px;border:1px dashed var(--border);border-radius:10px}
.pf-display-inline-flex-align-items-center-gap-4{display:inline-flex;align-items:center;gap:4px;cursor:pointer}
.pf-margin-6px010px{margin:6px 0 10px}
.pf-margin-8px012px{margin:8px 0 12px}
/* ---------- C3-2 内联样式回收：transcribe / jy / reading / materials / resources / tools（20260909） ---------- */
.view-intro{font-size:13px;color:var(--ink2);margin:6px 0 14px}
.meta-note{margin:4px 0 10px;font-size:12px;color:var(--ink3)}
.jy-thumb-wrap{position:relative;display:inline-block}
.jy-icon{height:30px;vertical-align:middle}
.jy-intro{font-size:13px;color:var(--ink2);margin:6px 0 14px}
.jy-section{margin-top:14px}
.jy-split-card{padding:10px;margin-top:8px;display:flex;justify-content:space-between;gap:8px;align-items:center}
.jy-danger{color:var(--danger)}
.jy-dim{opacity:.85}
.jy-actions{margin-top:6px;display:flex;flex-wrap:wrap}
.jy-gap{margin-top:6px}
.jy-meta{color:var(--ink3)}
.jy-ok{color:var(--ok-strong)}
.jy-panel{margin-top:10px;padding:12px 14px}
.jy-split{display:flex;justify-content:space-between;gap:8px;align-items:center;flex-wrap:wrap}
.jy-kv-key{padding:3px 0;color:var(--ink3);width:7.5em}
.jy-kv-val{padding:3px 0;color:var(--ink3)}
.jy-table{width:100%;margin-top:8px;font-size:13px;border-collapse:collapse}
.rd-article{font-family:serif;max-width:760px;margin:40px auto;line-height:2}
.rd-center{text-align:center;color:var(--muted)}
.rd-indent{text-indent:2em}
.rd-mt12{margin-top:12px}
.rd-check{display:flex;align-items:center;gap:8px;cursor:pointer}
.rd-check-follow{display:flex;align-items:center;gap:8px;cursor:pointer;margin-top:9px}
.rd-checkbox{width:16px;height:16px;accent-color:var(--accent);flex:none}
.rd-meta{color:var(--ink3)}
.rd-note{margin-top:8px;color:var(--ink3);font-size:12px;line-height:1.7}
.rd-h-gap{margin-top:16px;margin-bottom:7px}
.rd-sec-title{font-size:14px}
.rd-follow{margin-top:14px}
.rd-line-meta{display:block;margin-top:3px;color:var(--ink3)}
.rd-mt10{margin-top:10px}
.mat-scroll{max-height:52vh;overflow-y:auto;padding-right:6px}
.doc-serif-view{font-family:serif;max-width:800px;margin:40px auto;line-height:1.9}
.doc-serif-pre{white-space:pre-wrap;font-family:serif}
.mat-inline-icon{display:inline-flex;gap:4px;align-items:center}
.mat-name{font-size:13px;color:var(--ink2)}
.mat-gap{margin-right:6px;max-width:180px}
.rc-actions{margin-top:8px;display:flex;gap:8px;flex-wrap:wrap}
.rc-row-pad{padding:8px 2px}
.rc-scroll{max-height:36vh;overflow-y:auto;padding-right:6px;margin-top:8px}
.rc-gap{margin-top:8px}
.rc-note{font-size:13px;color:var(--ink2);line-height:1.8;max-height:24vh;overflow-y:auto;padding-right:6px;margin-top:8px}
.rc-text{font-size:13px;line-height:1.7;color:var(--ink2)}
.rc-actions2{margin-top:10px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.rc-meta{font-size:13px;color:var(--ink3)}
.tl-note{color:var(--ink3);font-size:13px}
.tr-input{width:100%;height:36px}
.jy-input{width:100%;max-width:460px;height:32px}
.tr-error-line{display:none;color:var(--danger)}
.jy-input{width:100%;height:36px}
.jy-mb10{margin-bottom:10px}
.jy-total{margin-top:10px;font-weight:700}
.jy-mt4{margin-top:4px}
.jy-o7{opacity:.7}
.jy-mt3{margin-top:3px}
.jy-o8{opacity:.8}
.jy-thumb-size{position:absolute;left:0;bottom:-16px;font-size:10.5px;color:var(--ink3)}
.jy-thumb-del{position:absolute;top:-10px;right:-10px;display:grid;place-items:center;width:40px;height:40px;padding:0;background:var(--card);border:1px solid var(--border);border-radius:50%;font-size:14px}
.rd-check-follow{display:flex;align-items:center;gap:8px;cursor:pointer;margin-top:9px}
.rd-hidden{display:none}
.mat-maxw180{max-width:180px}
.mat-mr6{margin-right:6px}
.mat-meta-note{font-size:12px;color:var(--ink3);margin-bottom:10px}
.rc-maxw260{max-width:260px}
.rc-ml8{margin-left:8px}
.rc-note-pre{margin-top:8px;font-size:13px;color:var(--ink2);line-height:1.8;max-height:24vh;overflow-y:auto;padding-right:6px;white-space:pre-wrap}
.rc-fs13{font-size:13px}

/* ---------- C3-4 内联样式回收：home / schedule / prep / classmgr（20260909） ---------- */
.cm-margin-top-12px-padding-10px11px-border-1pxd{margin-top:12px;padding:10px 11px;border:1px dashed var(--accent);border-radius:10px;background:var(--accent-soft);font-size:12px;line-height:1.65;color:var(--ink2)}
.hm-background-accent{background:var(--accent)}
.hm-background-danger{background:var(--danger)}
.hm-display-grid-grid-template-columns-repeat7mi{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px}
.pp-font-family-serif-max-width-800px-margin-40p{font-family:serif;max-width:800px;margin:40px auto;line-height:1.9}
.pp-white-space-pre-wrap-font-family-serif{white-space:pre-wrap;font-family:serif}
.sc-display-grid-grid-template-columns-minmax01f{display:grid;grid-template-columns:minmax(0,1fr) 100px;gap:8px}
.mistake-flow{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin:-3px 0 14px;padding:4px;background:var(--card2);border:1px solid var(--line);border-radius:10px}
.mistake-flow-step{display:flex;align-items:center;justify-content:center;gap:4px;min-width:0;padding:6px 4px;border-radius:8px;color:var(--ink3);font-size:12px;line-height:1.3;text-align:center;transition:background-color .16s,color .16s}
.mistake-flow-step.active{background:var(--accent-soft);color:var(--accent2);font-weight:600}
.mistake-flow-step.done{color:var(--accent2)}
.mistake-flow-status{min-height:20px;margin:0 0 10px;color:var(--ink2);font-size:12px;line-height:1.6}
.mistake-image-meta{margin-top:7px;color:var(--ink3);font-size:12px;line-height:1.55}
@media (max-width:560px){.mistake-flow{gap:4px}.mistake-flow-step{font-size:12px;padding-inline:2px}.mistake-flow-step span:last-child{display:none}}

.toast{position:fixed;left:50%;bottom:26px;transform:translate(-50%,16px);z-index:var(--z-toast);background:var(--card);color:var(--ink);border:1px solid var(--line);padding:9px 18px;border-radius:16px;font-size:13px;letter-spacing:.02em;line-height:1.65;max-width:min(86vw,430px);text-align:center;opacity:0;pointer-events:none;transition:all .25s;box-shadow:var(--shadow-pop)}
.toast.show{opacity:1;transform:translate(-50%,0)}
.toast.warn{background:color-mix(in srgb,var(--danger) 7%,var(--card));border-color:color-mix(in srgb,var(--danger) 32%,var(--line));color:var(--danger)}
.bar-row{display:flex;align-items:center;gap:8px;margin-bottom:6px;font-size:12px}
.bar-row .bl{width:64px;flex:none;color:var(--ink3);text-align:right}
.bar-row .bt{flex:1;background:var(--card2);border-radius:8px;height:14px;overflow:hidden}
.bar-row .bf{height:100%;background:var(--accent);border-radius:8px;min-width:2px}
.bar-row .bv{width:40px;flex:none;color:var(--ink2)}

/* ---------- 首页 ---------- */
/* 今日教学工作台：按行动时段聚合，保留现有主题与卡片体系 */
.home-workboard{margin:14px 0;display:grid;gap:12px}.home-workboard-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.home-workboard-head h3{margin:0}.home-workboard-head .spacer{flex:1}.home-workboard-head p{flex-basis:100%;margin:0;color:var(--ink3);font-size:12px}.home-workboard-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.home-workboard-section{min-width:0;padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--card)}.home-workboard-section[hidden]{display:none}.home-workboard-section h4{margin:0 0 8px;color:var(--ink);font-size:14px}.home-workboard-count{margin-left:5px;color:var(--accent2);font-size:12px}.home-workboard-list{display:grid;gap:8px}.home-workboard-item{display:flex;align-items:flex-start;gap:8px;width:100%;padding:8px;border:1px solid var(--line);border-radius:10px;background:var(--card2);color:var(--ink);text-align:left;cursor:pointer}.home-workboard-item:hover,.home-workboard-item:focus-visible{border-color:var(--accent);outline:none}.home-workboard-item b{display:block;font-size:13px}.home-workboard-item small{display:block;margin-top:3px;color:var(--ink3);line-height:1.45}.home-workboard-empty{padding:9px 2px;color:var(--ink3);font-size:12px;line-height:1.6}.home-workboard-actions{display:flex;gap:6px;margin-top:9px;flex-wrap:wrap}.home-workboard-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 7px;border-radius:999px;background:var(--accent-soft);color:var(--accent2);font-size:12px}@media(max-width:900px){.home-workboard-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:640px){.home-workboard{margin:10px 0}.home-workboard-grid{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;padding-bottom:2px}.home-workboard-section{flex:0 0 min(86vw,320px);scroll-snap-align:start}.home-workboard-head p{flex-basis:100%}}
/* 20260911：今日教学工作台是唯一没有 .card 外壳的板块，标题行缺了卡片那层水平内边距，
   导致「管理区块」与相邻卡片的「管理课题 / 读取安排表」不在同一竖线上（实测移动端差 17px、
   桌面端差 23px，即 .card 的 16px/22px 内边距 + 1px 边框）。这里补上同样的内边距，
   标题与按钮都与卡片内容盒对齐；下方 .home-workboard-grid 保持通栏不动。 */
@media (max-width:768px){.home-workboard-head{padding-left:16px;padding-right:16px}}
@media (min-width:769px){.home-workboard-head{padding-left:22px;padding-right:22px}}
.home-workboard-chip.chip-overdue{background:color-mix(in srgb,var(--danger) 14%,var(--card2));color:var(--danger)}
.home-workboard-chip.chip-muted{background:var(--card2);border:1px solid var(--line);color:var(--ink3)}
/* 模块速览：紧凑双列，条目仍可进入对应板块 */
.home-workboard-modules{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}
.home-workboard-module{display:flex;flex-direction:column;gap:3px;width:100%;padding:9px 10px;border:1px solid var(--line);border-radius:10px;background:var(--card2);color:var(--ink);text-align:left;cursor:pointer}
.home-workboard-module:hover,.home-workboard-module:focus-visible{border-color:var(--accent);outline:none}
.home-workboard-module b{font-size:12.5px}
.home-workboard-module small{color:var(--ink3);font-size:11.5px;line-height:1.45}
@media(max-width:640px){.home-workboard-modules{grid-template-columns:repeat(2,minmax(0,1fr))}}
/* 今日课程卡：上课/授课记录状态徽标 */
.mc-stateline{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:8px}
.mc-state{display:inline-flex;align-items:center;min-height:20px;padding:2px 8px;border-radius:999px;border:1px solid var(--line);background:var(--card2);color:var(--ink3);font-size:11px;font-weight:600}
.mc-state.is-done{border-color:transparent;background:var(--accent-soft);color:var(--accent2)}
.mc-state-action,.mc-type-action{font-family:inherit;cursor:pointer;transition:border-color .16s ease,background-color .16s ease,box-shadow .16s ease}
.mc-state-action:hover,.mc-state-action:focus-visible{border-color:color-mix(in srgb,var(--accent2) 45%,var(--line));background:color-mix(in srgb,var(--accent2) 9%,#fff)}
.mc-state-action.is-done:hover,.mc-state-action.is-done:focus-visible{border-color:color-mix(in srgb,var(--accent) 45%,transparent)}
button.mc-type-action{border:0}
.btn.is-loading{position:relative;color:transparent !important;pointer-events:none}
.btn.is-loading::before{content:"";position:absolute;inset:0;margin:auto;width:16px;height:16px;border-radius:50%;border:2px solid var(--accent-soft);border-top-color:var(--accent);animation:btnSpin .7s linear infinite}
@keyframes btnSpin{to{transform:rotate(360deg)}}
.btn:active,.pill:active,.quick-action:active{transform:translateY(1px)} /* C2：1px 下压反馈铺开 */
.mc-state-action,button.mc-type-action{min-height:24px;position:relative} /* B2 触控目标 */
/* B2 使用实体 ≥24px 目标，不以未生成或重叠的伪元素冒充热区。 */
.mc-type-action:hover,.mc-type-action:focus-visible{background:var(--control-bg);box-shadow:0 8px 16px -14px rgba(61,63,67,.6)}
.mc-state-action:focus-visible,.mc-type-action:focus-visible{outline:2px solid var(--accent2);outline-offset:2px}
/* 今日课程空状态：文案 + 真实下一步 */
.empty-courses{display:grid;gap:4px;justify-items:start;padding:10px 0}
.empty-courses b{color:var(--ink);font-size:13.5px}
.empty-courses span{color:var(--ink3);font-size:12px;line-height:1.6}

.home-clock{font-family:'Noto Serif SC','Songti SC',serif;font-size:20px;letter-spacing:.06em;color:var(--ink);line-height:1.2}
.home-clock small{font-size:14px;color:var(--ink3);letter-spacing:.2em;margin-left:8px}
.todo-item{display:flex;align-items:center;gap:8px;padding:9px 4px;border-bottom:1px dashed var(--line)}
.todo-item:last-child{border-bottom:none}
.todo-item .td-tag{width:9px;height:9px;border-radius:50%;flex:none}
.todo-item .td-tag.red{background:var(--danger)}
.todo-item .td-tag.blue{background:var(--accent)}
.todo-item .tt{flex:1;font-size:14px}
.todo-item.done .tt{color:var(--ink3);text-decoration:line-through}
.todo-item .td-date{font-size:12px;color:var(--ink3)}

/* ---------- 课表 ---------- */
.sched-toolbar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px;align-items:center}
.sched-wrap{overflow-x:auto}
table.sched{width:100%;border-collapse:collapse;min-width:620px}
table.sched th,table.sched td{border:1px solid var(--line);padding:8px 7px;text-align:center;font-size:13px}
table.sched thead th{background:var(--card2);font-weight:600;letter-spacing:.05em;font-size:13px}
table.sched td.ptime{background:var(--card2);font-size:12px;color:var(--ink3);min-width:96px}
table.sched td.cell{cursor:pointer;min-width:104px;transition:background .12s}
table.sched td.cell:hover{background:var(--accent-soft)}
/* 有课淡粉高亮（文档要求） */
table.sched td.cell.has{background:var(--accent-soft);color:var(--accent2)}
table.sched td.cell.has:hover{background:color-mix(in srgb, var(--accent) 14%, var(--card))}
/* 班级颜色：颜色用于快速区分班级，同时保留文字与标题信息，避免只靠颜色传达含义 */
table.sched td.cell.class-colored.has{background:var(--class-color-bg);border-color:var(--class-color-border);color:var(--class-color);font-weight:600}
table.sched td.cell.class-colored.has:hover{background:var(--class-color-bg-hover)}
.sched-cell-class{display:block;margin-top:2px;font-size:12px;font-weight:500;color:var(--class-color);line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sched-class-legend{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:10px 0 2px;padding:8px 10px;border:1px dashed var(--border);border-radius:10px;background:var(--card2);font-size:12px;color:var(--ink3)}
.sched-class-legend-label{margin-right:2px;color:var(--ink2)}
.sched-class-legend-item{display:inline-flex;align-items:center;gap:4px;color:var(--ink2)}
.sched-class-dot{width:10px;height:10px;border-radius:50%;background:var(--class-color);box-shadow:0 0 0 2px var(--class-color-bg);flex:none}

table.sched th.today-col{background:var(--accent-soft);color:var(--accent2)}
table.sched td.cell.today-col{border-right:2px solid var(--accent2)}
table.sched td.cell.today-col.has{border-right:2px solid var(--accent2)}
.font-a{font-size:13px}.font-b{font-size:14px}.font-c{font-size:16px}
.wk-dot{width:9px;height:9px;border-radius:50%;display:inline-block}
.audit-in{width:100%;padding:5px 7px;border:1px solid var(--border);border-radius:8px;background:var(--card2);font-size:13px;text-align:center}
.audit-in:focus{outline:none;border-color:var(--accent)}
.th-del{width:18px;height:18px;border-radius:50%;background:var(--danger);color:#fff;font-size:12px;line-height:1;margin-left:4px;vertical-align:middle}
.th-del:hover{transform:scale(1.15)}
.audit-cell{cursor:pointer}
.audit-cell:hover{background:var(--accent-soft)}
/* 听课安排按老师分成独立标签：不换行，也不让首条记录的底色覆盖同格的其他老师。 */
table.sched td.audit-schedule-cell{background:color-mix(in srgb,var(--accent-soft) 34%,var(--card));color:var(--ink2);vertical-align:middle}
table.sched td.audit-schedule-cell.has{background:color-mix(in srgb,var(--accent-soft) 48%,var(--card));color:var(--ink);font-weight:400}
table.sched td.audit-schedule-cell.audit-cell:hover{background:color-mix(in srgb,var(--accent-soft) 70%,var(--card))}
table.sched.audit-timetable{table-layout:fixed}
table.sched.audit-timetable th:first-child,table.sched.audit-timetable td.ptime{width:88px}
table.sched.audit-timetable td.audit-schedule-cell{min-height:58px;height:auto;padding:9px 8px}
.audit-entry-list{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;min-width:0}
.audit-entry-list.is-single{width:min(100%,148px);margin-inline:auto}
.audit-entry-list.is-single .audit-entry{width:100%}
.audit-entry-list.is-multi{flex-direction:column;align-items:stretch;gap:4px}
.audit-entry-list.is-multi .audit-entry{width:100%;gap:4px;padding:3px 6px;font-size:12px;white-space:normal;overflow:visible}
.audit-entry{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-width:0;max-width:100%;min-height:29px;box-sizing:border-box;padding:4px 8px;border:0;border-radius:8px;line-height:1.35;text-align:center;font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden}
.audit-entry-class,.audit-entry-teacher{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.audit-entry-class{font-weight:500;opacity:.88}
.audit-entry-teacher{font-weight:700}
/* 同一课节有多位老师时，班级与老师文本都允许自然换行，避免第二条安排被裁掉。 */
.audit-entry-list.is-multi .audit-entry-class,.audit-entry-list.is-multi .audit-entry-teacher{min-width:0;overflow-wrap:anywhere;white-space:normal;text-overflow:clip}
.audit-entry-list.is-multi .audit-entry-class{max-width:none}
.audit-empty{color:var(--ink3)}
.audit-empty.is-readonly{opacity:.72}
@media(max-width:768px){
  /* 移动端听课课表密度（20260915）：行高/内边距/字号收紧，格内老师与班级信息完整保留 */
  table.sched{min-width:560px}
  table.sched th,table.sched td{padding:6px 4px;font-size:12px}
  table.sched thead th{font-size:12px}
  table.sched.audit-timetable th:first-child,table.sched.audit-timetable td.ptime{width:58px}
  table.sched.audit-timetable td.audit-schedule-cell{min-height:42px;height:auto;padding:4px 3px}
  .audit-entry-list{gap:3px}
  .audit-entry{min-height:24px;padding:2px 5px;font-size:11.5px}
  .audit-entry-list.is-multi .audit-entry{padding:2px 5px;font-size:11px}
}
.audit-teacher-options{display:grid;gap:8px;max-height:330px;overflow-y:auto}
.audit-teacher-option{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid var(--line);border-radius:10px;background:var(--card2);transition:border-color .15s,background-color .15s}
.audit-teacher-option:hover,.audit-teacher-option:focus-within{border-color:var(--accent)}
.audit-teacher-option.is-selected{border-color:var(--accent);background:var(--accent-soft)}
.audit-teacher-option::before{content:"";width:8px;height:8px;border:1px solid var(--line);border-radius:50%;background:transparent;flex:none}
.audit-teacher-option.is-selected::before{border-color:var(--accent);background:var(--accent)}
.audit-teacher-toggle{display:flex;align-items:center;min-width:0;flex:1;padding:2px 0;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer}
.audit-teacher-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:8px}
.audit-teacher-option-main{display:flex;flex-direction:column;gap:4px;flex:1;min-width:0}
.audit-teacher-option-main strong{font-size:13px;color:var(--ink)}
.audit-teacher-option-main small{font-size:12px;color:var(--ink3)}
.audit-class-select{flex:1 1 96px;min-width:0;max-width:132px;min-height:30px;padding:4px 6px;font-size:12px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}
.audit-teacher-choice{flex:none;min-width:60px;min-height:30px;padding:4px 10px;border:1px solid var(--line);border-radius:8px;background:var(--card2);color:var(--ink2);font-size:12px;font-family:inherit;cursor:pointer;white-space:nowrap}
.audit-teacher-choice.is-on{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}
.audit-teacher-choice:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.at-item{display:flex;align-items:center;gap:8px;padding:7px 2px;border-bottom:1px dashed var(--line);font-size:14px}
.at-item:last-child{border-bottom:none}
.file-preview{margin-top:10px}
.file-preview img{max-width:100%;border-radius:10px;border:1px solid var(--line)}
.file-preview iframe{width:100%;height:480px;border:1px solid var(--line);border-radius:10px;background:#fff}
.file-preview table{width:100%;border-collapse:collapse;font-size:13px}
.file-preview table th,.file-preview table td{border:1px solid var(--line);padding:5px 8px}
.file-preview .docx-body{padding:16px 20px;background:#fff;border:1px solid var(--line);border-radius:10px;font-size:14px;line-height:1.9}
.up-meta{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink2);margin-bottom:8px;flex-wrap:wrap}

/* 调课记录 */
.transfer-item{padding:12px 4px;border-bottom:1px dashed var(--line)}
.transfer-item:last-child{border-bottom:none}
.ti-head{display:flex;align-items:center;gap:8px;margin-bottom:7px}
.ti-head b{font-size:14px;color:var(--ink);letter-spacing:.03em}
.ti-date{margin-left:auto;font-size:12px;color:var(--ink3);white-space:nowrap}
.ti-rows{display:flex;flex-direction:column;gap:4px}
.ti-row{display:flex;align-items:baseline;gap:8px;font-size:13px;color:var(--ink2);line-height:1.6}
.ti-row .ti-tag{flex:none;font-size:12px;color:var(--accent2);border:1px solid var(--accent);border-radius:999px;padding:0 8px;background:var(--card);white-space:nowrap}
.ti-row .ti-val{min-width:0}

/* ---------- 教案库（备课中心 · 独立板块） ---------- */
.lp-toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:6px}
.lp-toolbar .input{flex:1;min-width:150px}
.lp-row{display:flex;align-items:flex-start;gap:8px;padding:11px 2px;border-bottom:1px solid var(--line)}
.lp-row:last-child{border-bottom:0}
.lp-main{flex:1;min-width:0}
.lp-title{display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap}
.lp-title b{font-size:13px;color:var(--ink);line-height:1.55;word-break:break-word}
.lp-meta{margin-top:3px;font-size:12px;color:var(--ink3);line-height:1.6;word-break:break-word}
.lp-source{flex:none;padding:2px 8px;border-radius:999px;background:var(--accent-soft);color:var(--accent2);font-size:12px;line-height:1.7}
.lp-actions{flex:none;display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
@media(max-width:560px){.lp-row{flex-direction:column}.lp-actions{justify-content:flex-start}}
.lp-file-row{display:flex;align-items:center;gap:8px;padding:7px 9px;border:1px solid var(--line);border-radius:10px;background:var(--card2);font-size:12px;margin-bottom:6px}
.lp-file-row b{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink);font-weight:500}
.lp-file-row small{color:var(--ink3);flex:none}
/* 教案编辑防丢失：保存状态徽标 + 本机草稿横幅（0907） */
.lp-save-state{display:flex;align-items:flex-start;gap:8px;margin:8px 0 2px;font-size:12px;line-height:1.6;color:var(--ink3)}
.lp-save-state .lp-save-dot{width:8px;height:8px;border-radius:50%;background:var(--ok);flex:none;margin-top:5px}
.lp-save-state[data-state="dirty"]{color:var(--warn-strong)}.lp-save-state[data-state="dirty"] .lp-save-dot{background:var(--warn)}
.lp-save-state[data-state="saving"]{color:var(--ink2)}.lp-save-state[data-state="saving"] .lp-save-dot{background:var(--ink3)}
.lp-save-state[data-state="failed"]{color:var(--danger)}.lp-save-state[data-state="failed"] .lp-save-dot{background:var(--danger)}
.lp-draft-banner{display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap;margin:0 0 10px;padding:8px 11px;border:1px solid var(--line);border-radius:10px;background:var(--accent-soft);font-size:12px;line-height:1.7;color:var(--ink2)}
/* ---------- 录音转文字（备课中心 · 独立板块） ---------- */
.tr-row{display:flex;align-items:flex-start;gap:8px;padding:11px 2px;border-bottom:1px solid var(--line)}
.tr-row:last-child{border-bottom:0}
.tr-main{flex:1;min-width:0}
.tr-title b{font-size:13px;color:var(--ink);line-height:1.55;word-break:break-word}
.tr-meta{margin-top:3px;font-size:12px;color:var(--ink3);line-height:1.6;word-break:break-word}
@media(max-width:560px){.tr-row{flex-direction:column}}
/* ---------- 日常备课 ---------- */
.prep-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start}
.prep-params{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.prep-params .full{grid-column:1/-1}
.res-btns{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.res-btns a{display:inline-flex;align-items:center;gap:8px;padding:9px 14px;border-radius:10px;border:1px solid var(--border);background:var(--card2);font-size:13px;color:var(--ink);transition:all .15s}
.res-btns a:hover{border-color:var(--accent);color:var(--accent2);transform:translateY(-1px)}
.lesson-out{margin-top:14px;background:var(--card2);border:1px solid var(--line);border-radius:10px;padding:16px 18px}
.lesson-out h4{font-size:14px;color:var(--ink2);margin-bottom:8px;letter-spacing:.05em}
/* 阅读字号走 CSS 变量：操作栏缩放只改此变量，白名单 70%~160%，内容与导出不受影响 */
.lesson-md{white-space:pre-wrap;font-size:var(--lesson-read-fs,13px);line-height:1.9;color:var(--ink);max-height:560px;overflow-y:auto;overflow-wrap:break-word}
/* 教案阅读操作栏（复制 + 缩放）：在 .lesson-md 滚动容器之外，正文内滚时保持可见，无需 sticky/fixed */
.lesson-readbar{display:flex;align-items:center;gap:2px;flex-wrap:wrap;margin:0 0 8px}
.lrb-btn{display:inline-flex;align-items:center;justify-content:center;gap:5px;min-height:28px;padding:3px 10px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--ink2);font-size:12px;line-height:1.4;cursor:pointer;transition:border-color .15s,color .15s}
.lrb-btn:hover{border-color:var(--accent);color:var(--accent2)}
.lrb-btn:focus-visible{outline:2px solid var(--accent2);outline-offset:2px}
.lrb-btn svg{flex:none}
.lrb-ico{width:30px;padding:3px 0;font-size:15px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.lrb-pct{min-width:52px;font-variant-numeric:tabular-nums}
.lrb-btn[aria-disabled="true"]{opacity:.38;cursor:default}
.lrb-btn[aria-disabled="true"]:hover{border-color:var(--line);color:var(--ink2)}
.lrb-copy.is-copied{border-color:color-mix(in srgb,var(--ok) 55%,var(--line));color:var(--ok-strong)}
.lrb-sep{width:1px;height:16px;background:var(--line);margin:0 6px;flex:none}
.lesson-readbar[data-editing="1"] .lrb-zoom{display:none}
@media(max-width:768px){
  .lrb-btn{min-height:38px;padding:5px 12px;font-size:13px}
  .lrb-ico{width:38px;min-height:38px}
  .lrb-pct{min-width:56px}
  .lrb-sep{height:18px;margin:0 4px}
}
.lesson-edit{width:100%;min-height:320px;border:1.5px solid var(--accent);border-radius:10px;background:var(--card2);color:var(--ink);padding:14px 16px;font-family:'Noto Serif SC','Songti SC',serif;font-size:13px;line-height:1.9;letter-spacing:.02em;resize:vertical;overflow-y:auto}
.lesson-edit:focus{outline:none;box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 22%, transparent)}
.prep-linked-summary{display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap;margin-top:7px;padding:7px 8px;border:1px dashed var(--line);border-radius:8px;background:var(--card2);font-size:12px;color:var(--ink2);line-height:1.55}
.prep-linked-summary[hidden]{display:none}
.prep-linked-summary b{color:var(--accent2);font-weight:600}
.prep-linked-reading-tabs{display:flex;gap:8px;flex-wrap:wrap;margin:-2px 0 12px}
.prep-linked-reading-tabs .pill{margin:0}
.prep-linked-reading-filters{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:0 0 10px}
.prep-linked-reading-filters .field{margin:0}
.prep-linked-reading-filters .full{grid-column:1/-1}
.prep-linked-reading-meta{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:8px 0;color:var(--ink3);font-size:12px}
.prep-linked-reading-list{display:grid;gap:8px;max-height:42vh;overflow:auto;padding:2px 2px 4px}
.prep-linked-reading-option{display:flex;align-items:flex-start;gap:8px;padding:9px 10px;border:1px solid var(--line);border-radius:10px;background:var(--card2);cursor:pointer;transition:border-color .1s ease-out,background-color .1s ease-out}
.prep-linked-reading-option:hover{border-color:var(--accent)}
.prep-linked-reading-option.is-selected{border-color:var(--accent);background:var(--accent-soft)}
.prep-linked-reading-option input{width:16px;height:16px;flex:none;margin:2px 0 0;accent-color:var(--accent)}
.prep-linked-reading-option-main{display:block;min-width:0}
.prep-linked-reading-option b{display:block;color:var(--ink);font-size:13px;line-height:1.5}
.prep-linked-reading-option small{display:block;margin-top:2px;color:var(--ink3);font-size:12px;line-height:1.45}
/* 备课课文搜索（题目片段 / 拼音全拼 / 首字母） */
.prep-lesson-search{position:relative;margin-top:6px}
.prep-lesson-search-list{position:absolute;z-index:var(--z-sticky);left:0;right:0;top:calc(100% + 5px);max-height:286px;overflow:auto;background:var(--card);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);padding:5px;display:none}
.prep-lesson-search-list.open{display:block}
.prep-lesson-search-item{display:block;padding:7px 10px;border-radius:8px;font-size:13px;cursor:pointer}
.prep-lesson-search-item b{display:block;color:var(--ink);font-weight:600;line-height:1.5}
.prep-lesson-search-item small{display:flex;align-items:center;gap:8px;margin-top:2px;color:var(--ink3);font-size:12px;line-height:1.4}
.prep-lesson-search-item .py-hint{font-style:normal;font-size:12px;color:var(--ink3);letter-spacing:.06em;padding-left:8px;border-left:1px solid var(--line)}
.prep-lesson-search-item:hover,.prep-lesson-search-item.hl{background:var(--accent-soft)}
.prep-lesson-search-item mark{background:transparent;color:var(--accent2);font-weight:700;padding:0}
.prep-pick-modes{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 12px}
.prep-mode-tab{border:1px solid var(--border);border-radius:999px;padding:6px 15px;font-size:13px;color:var(--ink2);background:var(--card);letter-spacing:.04em;cursor:pointer;transition:all .14s}
.prep-mode-tab:hover{border-color:var(--accent);color:var(--accent2)}
.prep-mode-tab.active{background:var(--accent);border-color:var(--accent);color:#fff}
.prep-mode-tab:focus-visible{outline:2px solid var(--accent2);outline-offset:2px}
.prep-pick-modes[hidden],#prepLessonSearchWrap[hidden],#prepSearchPane[hidden],#prepParamsBody[hidden]{display:none}
.prep-search-hint{margin:9px 0 0;color:var(--ink3);font-size:12px;line-height:1.6}
.prep-search-hint[data-state="warn"]{color:var(--warn-strong)}
.prep-pick-summary{margin-top:10px;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card2);color:var(--ink2);font-size:12px;line-height:1.6}
.prep-pick-summary[data-state="empty"]{border-style:dashed;color:var(--ink3)}
.prep-pick-summary .pps-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.prep-pick-summary .pps-head b{flex:1;min-width:0;color:var(--ink);font-size:13px}
.prep-pick-summary .pps-meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:4px;color:var(--ink3)}
@media(max-width:560px){.prep-mode-tab{padding:7px 13px;font-size:12px}.prep-pick-summary .pps-head b{flex-basis:100%}}
/* 今日课程标注课型：胶囊分组 + 联读内联选择（单弹窗） */
.lt-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.lt-head h3{margin-bottom:0}
.lt-class-chip{width:auto;min-width:0;padding:4px 10px;border-radius:999px;background:var(--accent-soft);border:1px solid transparent;color:var(--accent2);font-size:12px;font-weight:600}
.lt-desc{font-size:13px;color:var(--ink3);line-height:1.7;margin:0 0 12px}
.lt-content-hint{margin-top:5px;font-size:12px;color:var(--ink3);line-height:1.55}
.lt-content-hint.is-optional{color:var(--accent2)}
.lt-type-block{margin:0 0 10px}
.lt-type-label{font-size:12px;color:var(--ink3);margin-bottom:6px;letter-spacing:.02em}
.lt-type-chips{display:flex;flex-wrap:wrap;gap:8px}
.lt-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border:1px solid var(--border);border-radius:999px;background:var(--card2);color:var(--ink2);font-size:13px;line-height:1.4;cursor:pointer;transition:border-color .1s ease-out,background-color .1s ease-out,color .1s ease-out}
.lt-chip:hover{border-color:var(--accent)}
.lt-chip.active{border-color:transparent;background:var(--accent);color:#fff;font-weight:600}
.lt-field-row{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:2px 0 10px}
.lt-field-row .field{margin:0}
.lt-field-row.is-linked{grid-template-columns:repeat(3,1fr)}
#ltLinkedSection{border:1px solid var(--line);border-radius:10px;background:color-mix(in srgb, var(--accent-soft) 42%, var(--card));padding:12px;margin:0 0 10px}
.lt-linked-top{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 0 9px}
.lt-linked-top .prep-linked-reading-tabs{margin:0}
.lt-linked-search{margin:0}
.lt-linked-search .input{width:100%}
@media(max-width:560px){.lt-field-row{grid-template-columns:1fr 1fr}.lt-field-row.is-linked{grid-template-columns:1fr 1fr}.lt-field-row.is-linked #ltLessonField{display:none!important}}
@media(max-width:560px){.prep-linked-reading-filters{grid-template-columns:1fr}.prep-linked-reading-filters .full{grid-column:auto}.prep-linked-reading-list{max-height:38vh}}
.loading-dots{display:inline-block;animation:blink 1.2s infinite}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.35}}
/* 素材库 */
.mat-item{display:flex;align-items:center;gap:8px;padding:12px 4px;border-bottom:1px dashed var(--line);flex-wrap:wrap}
.mat-item:last-child{border-bottom:none}
.mat-t{flex:1;min-width:0}
.mat-t .t{font-size:14px;color:var(--ink)}
.mat-t .n{font-size:12px;color:var(--ink3);margin-top:3px}
.md-body{font-size:13px;line-height:1.95;color:var(--ink);word-break:break-word}
.md-body h2,.md-body h3{font-family:'Noto Serif SC','Songti SC',serif;letter-spacing:.04em;margin:14px 0 6px;color:var(--ink)}
.md-body h2{font-size:16px;border-left:3px solid var(--accent);padding-left:8px}
.md-body h3{font-size:14px}
.md-body p{margin:7px 0;text-indent:0}
.md-body ul,.md-body ol{margin:6px 0 6px 20px}
.md-body li{margin:3px 0}
.md-body strong{color:var(--accent2)}
.md-body .md-para{margin:7px 0}
/* —— Markdown 扩展（20260914 柚柚聊天）：围栏代码块（带语言与复制）/ 表格 / 引用 / 分隔线 / 链接 —— */
.md-body pre{margin:10px 0;padding:12px 14px;background:var(--card2);border:1px solid var(--line);border-radius:10px;overflow-x:auto}
.md-body pre code{font-family:var(--font-mono);font-size:12px;line-height:1.7;color:var(--ink);white-space:pre}
.md-code{margin:10px 0;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--card2)}
.md-code-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:5px 8px 5px 12px;border-bottom:1px solid var(--line-soft);background:color-mix(in srgb,var(--card2) 55%,var(--line-soft))}
.md-code-lang{font-size:12px;color:var(--muted);font-family:var(--font-mono)}
.md-code-copy{padding:3px 10px;border:1px solid var(--line);border-radius:999px;background:var(--card);color:var(--muted);font-size:12px;font-family:inherit;cursor:pointer;transition:color .12s,border-color .12s}
.md-code-copy:hover{color:var(--accent2);border-color:var(--accent)}
.md-code pre{margin:0;border:0;border-radius:0}
.md-body table{margin:10px 0;border-collapse:collapse;width:100%;font-size:13px}
.md-body th,.md-body td{border:1px solid var(--line);padding:6px 10px;text-align:left;vertical-align:top}
.md-body th{background:var(--card2);font-weight:600;color:var(--ink)}
.md-body blockquote{margin:10px 0;padding:8px 14px;border-left:3px solid var(--accent);background:var(--accent-soft);border-radius:0 10px 10px 0;color:var(--ink2)}
.md-body blockquote p{margin:4px 0}
.md-body hr{border:0;border-top:1px solid var(--line);margin:14px 0}
.md-body a{color:var(--accent2);text-decoration:underline;text-underline-offset:2px;word-break:break-all}
/* 产出区 */
.po-wrap{margin-top:14px;padding:14px 16px;border:1px solid var(--accent);border-radius:10px;background:var(--card2);}
.po-title{font-size:13px;font-weight:600;letter-spacing:.1em;color:var(--accent2);margin-bottom:10px}
.po-file{display:flex;align-items:center;gap:8px;background:var(--card);border:1px solid var(--border);border-radius:10px;padding:11px 13px;flex-wrap:wrap}
.po-file-ic{font-size:20px;flex:none}
.po-file-name{flex:1;min-width:0;font-size:13px;color:var(--ink);word-break:break-all;line-height:1.5}
.po-actions{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
.po-actions .btn{flex:1;justify-content:center}
.gen-task{border:1px solid var(--line);border-radius:var(--radius-lg);padding:12px 14px;margin-top:10px;background:var(--bg-soft,rgba(0,0,0,.02))}
.gen-task-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.gen-task-id{font-size:12px;color:var(--ink3);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.gen-task-status{font-size:13px;font-weight:500}
.gen-task-bar{height:6px;border-radius:8px;background:rgba(0,0,0,.08);overflow:hidden;margin-bottom:10px}
.gen-task-bar > i{display:block;height:100%;width:35%;background:var(--accent,#8a7f6d);transition:width .4s ease}
.gen-task-files{display:flex;gap:8px;flex-wrap:wrap}
.gen-task-files .btn{flex:0 0 auto}
.gen-task-error{font-size:13px;color:var(--danger,#b23c3c);line-height:1.6;word-break:break-all}
.gen-task-quality{font-size:12px;color:var(--ink3);margin-top:8px;line-height:1.6}
.po-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-top:10px}
.po-grid .btn{min-width:0;justify-content:center}
@media (max-width:820px){ .po-grid{grid-template-columns:1fr 1fr} .po-grid .btn{white-space:normal;line-height:1.35;padding:8px 10px} }
@media (max-width:430px){ .po-grid{grid-template-columns:1fr} }

.assessment-flow-card{margin-bottom:16px}.assessment-dashboard{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin-top:8px}.assessment-metric{min-height:72px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}.assessment-metric b{display:block;color:var(--accent2);font-size:20px;line-height:1.1}.assessment-metric span{display:block;margin-top:5px;color:var(--ink2);font-size:12px;line-height:1.45}.assessment-list{display:grid;gap:8px;margin-top:12px}.assessment-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:start;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}.assessment-row.active{border-color:var(--accent);background:var(--accent-soft)}.assessment-main b{display:block;color:var(--ink);font-size:13px}.assessment-main span{display:block;margin-top:3px;color:var(--ink3);font-size:12px;line-height:1.55}.assessment-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.assessment-detail{margin-top:14px;padding-top:14px;border-top:1px dashed var(--line)}.assessment-question-list{display:grid;gap:8px;margin-top:10px}.assessment-question{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:start;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card)}.assessment-question.is-target{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.assessment-question b{display:block;color:var(--ink);font-size:13px}.assessment-question span{display:block;margin-top:3px;color:var(--ink3);font-size:12px;line-height:1.55}.assessment-roster-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;max-height:42vh;overflow:auto;margin-top:8px}.assessment-student-check{display:flex;align-items:center;gap:8px;min-height:36px;padding:7px 9px;border:1px solid var(--line);border-radius:10px;background:var(--card2);font-size:13px;color:var(--ink2)}.assessment-student-check input{accent-color:var(--accent)}.assessment-source-badge{display:inline-flex;align-items:center;gap:4px;margin-top:6px;padding:2px 7px;border:1px solid color-mix(in srgb,var(--accent) 35%,var(--border));border-radius:999px;background:var(--accent-soft);color:var(--accent2);font-size:12px}.assessment-question-lines{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px}@media(max-width:640px){.assessment-row,.assessment-question{grid-template-columns:1fr}.assessment-actions{justify-content:flex-start}}
.assessment-review-plan{display:grid;gap:12px;margin-top:14px}.assessment-review-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px}.assessment-review-col{min-width:0;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}.assessment-review-col h4{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 0 8px;font-size:13px;color:var(--ink)}.assessment-review-col h4 span{font-size:12px;color:var(--ink3);font-weight:400}.assessment-review-item{padding:7px 0;border-bottom:1px dashed var(--line);font-size:12px;color:var(--ink2);line-height:1.55}.assessment-review-item:last-child{border-bottom:0}.assessment-review-item b{display:block;color:var(--ink);font-size:13px}.assessment-practice-row{display:grid;grid-template-columns:88px minmax(0,1fr);gap:8px;padding:8px 0;border-bottom:1px dashed var(--line);font-size:12px;color:var(--ink2);line-height:1.55}.assessment-practice-row:last-child{border-bottom:0}.assessment-practice-row b{color:var(--accent2)}@media(max-width:560px){.assessment-practice-row{grid-template-columns:1fr}}
/* ---------- 背诵默写 ---------- */
.recite-hero{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(280px,.92fr);gap:16px;align-items:stretch;margin:-4px 0 16px;padding:18px 20px;border:1px solid color-mix(in srgb,var(--accent) 42%,var(--border));border-radius:var(--radius);background:var(--card)}
.recite-hero-main{display:flex;flex-direction:column;gap:8px;justify-content:center;min-width:0}
.recite-hero-main b{font-family:'Noto Serif SC','Songti SC','SimSun',serif;font-size:20px;font-weight:650;letter-spacing:.08em;color:var(--ink);line-height:1.45}
.recite-hero-main p{max-width:68ch;color:var(--ink2);font-size:13px;line-height:1.8}
.recite-hero-tags{display:flex;gap:8px;flex-wrap:wrap;margin-top:2px}
.recite-hero-tags span{display:inline-flex;align-items:center;min-height:25px;padding:2px 9px;border:1px solid var(--border);border-radius:999px;background:var(--card);color:var(--ink2);font-size:12px;letter-spacing:.05em}
.recite-hero-panel{display:grid;gap:8px;align-content:center;padding:12px;border:1px solid var(--line);border-radius:10px;background:color-mix(in srgb,var(--card) 76%,var(--accent-soft));min-width:0}
.recite-flow{margin:0}
.recite-hero-panel .btn{justify-content:center;width:100%}
.recite-builder-card{padding:0;overflow:hidden}
.recite-builder-card>.card-head{margin:0;padding:17px 20px 13px;border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--card2) 64%,var(--card))}
.recite-builder-card #recParamsBody{padding:18px 20px 19px}
.recite-params{display:grid;gap:12px}
.recite-param-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.recite-param-grid .full{grid-column:1/-1}
.recite-filter-panel,.recite-article-panel{padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}
.recite-filter-panel .field,.recite-article-panel .field{margin:0}
.recite-scope-label{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:7px;font-size:13px;color:var(--ink2);letter-spacing:.06em}
.recite-scope-label small{color:var(--ink2);font-weight:400;letter-spacing:.02em}
.rec-scope-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0;padding:0;background:transparent;border:0;border-radius:0}
.rec-scope-pill{font-size:12px;padding:5px 11px;background:var(--card)}
.rec-scope-note{flex-basis:100%;padding-top:2px;font-size:12px;color:var(--ink2);line-height:1.6}
.recite-article-toolbar{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:9px;flex-wrap:wrap}
.recite-article-title{display:flex;flex-direction:column;gap:4px;min-width:0}
.recite-article-title b{font-size:13px;color:var(--ink2);letter-spacing:.06em;font-weight:500}
.recite-article-title span{font-size:12px;color:var(--ink2)}
.recite-article-toolbar .btn-row{margin:0}
.recite-article-list{display:grid;gap:8px;max-height:240px;overflow-y:auto;padding:3px 3px 3px 0}
.rec-article-row{display:flex;align-items:center;gap:8px;min-width:0;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--card);color:var(--ink2);cursor:pointer;transition:border-color .14s ease,background-color .14s ease,transform .14s ease}
.rec-article-row:hover{border-color:var(--accent);background:var(--accent-soft);transform:translateY(-1px)}
.rec-article-row input{width:16px;height:16px;flex:none;accent-color:var(--accent)}
.rec-article-main{flex:1;min-width:0;display:flex;align-items:baseline;gap:6px;flex-wrap:wrap;font-size:13px;line-height:1.45}
.rec-article-main b{color:var(--ink);font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.rec-article-main small{color:var(--ink2);font-size:12px;white-space:nowrap}
.rec-source,.rec-type-tag{display:inline-flex;align-items:center;justify-content:center;min-height:22px;padding:1px 8px;border:1px solid var(--border);border-radius:999px;background:var(--card2);color:var(--ink2);font-size:12px;line-height:1.35;white-space:nowrap;flex:none}
.rec-type-tag{color:var(--ink2);background:var(--card)}
.recite-empty .pill{margin-top:8px}
.recite-action-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px;padding-top:14px;border-top:1px dashed var(--line)}
.recite-action-row .btn{justify-content:center}
.recite-plan-surface{padding:16px 20px 20px;border-top:1px solid var(--line);background:color-mix(in srgb,var(--card2) 38%,transparent)}
.recite-plan-surface .card-head{margin-bottom:13px}
.recite-plan{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;margin-top:0}
.day-card{position:relative;display:flex;flex-direction:column;gap:8px;background:var(--card);border:1px solid var(--border);border-radius:10px;padding:14px 15px;overflow:hidden}
.day-card::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:var(--accent)}
.day-card b{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:13px;color:var(--ink);letter-spacing:.04em;line-height:1.4}
.day-card b::after{content:"计划";font-size:12px;font-weight:500;color:var(--ink2);letter-spacing:.08em}
.day-card .dc-item{position:relative;font-size:13px;color:var(--ink);line-height:1.65;padding:5px 0 5px 14px;border-top:1px dashed var(--line)}
.day-card .dc-item::before{content:"";position:absolute;left:0;top:14px;width:5px;height:5px;border-radius:50%;background:var(--accent)}
.day-card .dc-item.review{color:var(--ink2);font-size:13px}
.day-card .dc-item.review::before{background:var(--ink3)}
.recite-track-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px;margin-top:8px}
.recite-track-metric{min-height:70px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}
.recite-track-metric b{display:block;color:var(--accent2);font-size:20px;line-height:1.1}.recite-track-metric span{display:block;margin-top:5px;color:var(--ink2);font-size:12px;line-height:1.45}
.recite-track-morning{margin-top:12px}.recite-track-review{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:7px 0;border-bottom:1px dashed var(--line);font-size:13px}.recite-track-review b{color:var(--ink)}.recite-track-review span{min-width:0;color:var(--ink3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.recite-track-list{display:grid;gap:8px;margin-top:14px}.recite-track-row{display:flex;align-items:flex-start;gap:8px;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}.recite-track-main{flex:1;min-width:0}.recite-track-main b{display:block;color:var(--ink);font-size:13px}.recite-track-main span{display:block;margin-top:2px;color:var(--ink3);font-size:12px}.recite-track-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.recite-wrong-list{display:flex;gap:6px;flex-wrap:wrap;margin-top:7px}.recite-wrong-line{display:inline-flex;align-items:center;min-height:24px;padding:2px 8px;border:1px solid color-mix(in srgb,var(--danger) 30%,var(--border));border-radius:999px;background:color-mix(in srgb,var(--danger) 6%,var(--card));color:var(--danger);font-size:12px;line-height:1.4}
@media(max-width:560px){.recite-track-row{display:grid}.recite-track-actions{justify-content:flex-start}.recite-track-review{display:grid;gap:4px}.recite-track-review span{white-space:normal}}
.recite-output-card{overflow:hidden}
.recite-output-card>.card-head{margin:-18px -20px 14px;padding:16px 20px 13px;border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--card2) 60%,var(--card))}
.recite-list,.recite-quiz-list{display:grid;gap:8px}
.recite-q{background:var(--card2);border:1px solid var(--line);border-radius:10px;padding:13px 14px}
.recite-q .rq-t{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;font-size:14px;font-weight:650;color:var(--ink);margin-bottom:6px;line-height:1.5}
.recite-q .rq-t small{color:var(--ink2);font-size:12px;font-weight:400}
.recite-q .rq-line,.recite-q .rq-q{font-size:13px;color:var(--ink2);line-height:1.95;white-space:pre-wrap}
.recite-q .rq-line .blanks{color:var(--danger);letter-spacing:.06em}
.recite-q .rq-ans{display:none;margin-top:9px;padding:9px 10px;border:1px dashed color-mix(in srgb,var(--accent) 58%,var(--border));border-radius:10px;background:var(--card);font-size:13px;color:var(--accent2);line-height:1.9;white-space:pre-wrap}
.recite-q.open .rq-ans{display:block}
.recite-q .rq-btn{margin-top:10px}
@media(max-width:820px){.recite-hero{grid-template-columns:1fr}.recite-param-grid{grid-template-columns:1fr}.recite-param-grid .full{grid-column:auto}}
@media(max-width:560px){.recite-hero{padding:15px}.recite-hero-main b{font-size:20px}.recite-builder-card>.card-head,.recite-builder-card #recParamsBody,.recite-plan-surface{padding-left:14px;padding-right:14px}.recite-article-toolbar{align-items:stretch}.recite-article-toolbar .btn-row{width:100%;display:grid;grid-template-columns:1fr 1fr}.recite-action-row{display:grid;grid-template-columns:1fr}.rec-article-row{align-items:flex-start}.rec-source,.rec-type-tag{margin-top:1px}}

/* ---------- 学情分析 ---------- */
.stat-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:12px;margin-bottom:16px}
.stat-card{background:var(--card2);border:1px solid var(--border);border-radius:10px;padding:12px 13px;text-align:center}
.stat-card b{display:block;font-size:20px;color:var(--ink);line-height:1.2}
.stat-card span{font-size:12px;color:var(--ink3);letter-spacing:.1em}
.rank-row{display:flex;align-items:center;gap:8px;padding:5px 0;border-bottom:1px dashed var(--line);font-size:13px}
.rank-row .rk{width:30px;color:var(--ink3);text-align:right;flex:none}
.rank-row .rn{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rank-row .rs{width:70px;text-align:right;color:var(--ink2);flex:none}
.rank-row .rd{width:84px;text-align:right;flex:none;font-size:12px}
.rank-row .rd.up{color:var(--accent2)}
.rank-row .rd.down{color:var(--danger)}
.score-list-filter{display:inline-flex;align-items:center;gap:6px;margin-left:auto;font-size:12px;color:var(--ink3);white-space:nowrap}.score-list-filter .input{width:150px;min-height:32px;padding:5px 8px;font-size:12px}
.score-exam-row{display:flex;align-items:center;gap:8px;padding:10px 0;border-bottom:1px dashed var(--line)}.score-exam-row:last-child{border-bottom:0}.score-exam-main{flex:1;min-width:0}.score-exam-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink);font-size:13px}.score-exam-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:3px;color:var(--ink3);font-size:12px}.score-exam-class{display:inline-flex;align-items:center;padding:2px 7px;border:1px solid var(--border);border-radius:999px;background:var(--card2);color:var(--accent2)}.score-exam-class.pending{border-style:dashed;color:var(--warn-strong);background:color-mix(in srgb,var(--warn-bg) 62%,var(--card2))}.score-exam-source{color:var(--ink3)}.score-exam-title>svg{width:14px;height:14px;flex:none;margin-right:6px;vertical-align:-2px;color:var(--accent2)}.score-exam-actions{display:flex;align-items:center;justify-content:flex-end;gap:6px;flex:none}.score-exam-actions .input{width:130px;min-height:32px;padding:5px 7px;font-size:12px}.score-import-review-list{display:grid;gap:8px;max-height:42vh;overflow:auto;margin-top:12px}.score-import-review-row{display:grid;grid-template-columns:minmax(0,1fr) 190px;align-items:center;gap:8px;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}.score-import-review-row b{display:block;font-size:13px;color:var(--ink)}.score-import-review-row small{display:block;margin-top:2px;color:var(--ink3);font-size:12px}.score-import-review-row .input{min-height:34px;font-size:12px}.score-setup-guide{margin-bottom:14px;padding:14px 15px;border:1px solid color-mix(in srgb,var(--accent) 48%,var(--border));border-radius:10px;background:var(--card2);color:var(--ink2);line-height:1.7}.score-setup-guide strong{display:block;color:var(--ink);font-size:14px;margin-bottom:4px}.score-setup-guide p{margin:0;font-size:13px}.score-setup-guide .btn-row{margin-top:10px}.score-setup-guide .pill{background:var(--card)}
@media(max-width:768px){.score-list-filter{flex:1 1 100%;margin-left:0}.score-list-filter .input{flex:1;width:auto}.score-exam-row{align-items:flex-start;flex-wrap:wrap}.score-exam-main{flex-basis:calc(100% - 0px)}.score-exam-actions{width:100%;justify-content:flex-start;flex-wrap:wrap}.score-exam-actions .input{flex:1;min-width:150px}.score-import-review-row{grid-template-columns:1fr}.score-import-review-row .input{width:100%}}
.multi-table{width:100%;border-collapse:collapse;font-size:13px}
.multi-table th,.multi-table td{border:1px solid var(--line);padding:6px 8px;text-align:center}
.multi-table thead th{background:var(--card2)}
.layers{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.layer{border-radius:10px;padding:10px;text-align:center;border:1px solid var(--border)}
.layer b{display:block;font-size:20px}
.layer span{font-size:12px;color:var(--ink3)}


/* ---------- 语文学情地图 ---------- */
.map-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 16px}
.map-range{margin:0}
.map-range .pill{margin:0;border-color:transparent;background:transparent}
.map-range .pill.active{background:var(--card);border-color:var(--border);color:var(--accent2);box-shadow:var(--shadow)}
.map-meta{margin-left:auto;font-size:12px;color:var(--ink3)}
.map-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}
.map-stat{background:var(--card2);border:1px solid var(--border);border-radius:10px;padding:14px;min-width:0}
.map-stat .map-stat-label{display:block;font-size:12px;color:var(--ink3);letter-spacing:.08em;margin-bottom:6px}
.map-stat b{display:block;font-size:28px;line-height:1.2;color:var(--ink);font-variant-numeric:tabular-nums}
.map-stat small{display:block;margin-top:5px;font-size:12px;color:var(--ink2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.map-grid{display:grid;grid-template-columns:minmax(0,1.12fr) minmax(300px,.88fr);gap:16px;align-items:start}
.map-panel{background:var(--card);border:1px solid var(--border);border-radius:16px;padding:15px}
.map-panel + .map-panel{margin-top:16px}
.map-panel .card-head{margin:0 0 10px}
.map-panel .card-head h3{font-size:14px}
.map-panel-entry{margin-left:auto;display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}
.map-section-guide,.map-copy-card{display:grid;gap:4px;margin:0 0 10px;padding:9px 11px;border:1px dashed var(--line);border-radius:10px;background:color-mix(in srgb,var(--card2) 70%,transparent);text-align:left}
.map-section-guide b,.map-copy-card b{color:var(--ink);font-size:13px;font-weight:600;line-height:1.45}
.map-section-guide span,.map-copy-card span{color:var(--muted);font-size:12px;line-height:1.62;text-wrap:pretty}
.map-copy-card .pill{justify-self:start;margin-top:3px}
.map-panel-note{margin:8px 0 0;color:var(--muted);font-size:12px;line-height:1.62;text-wrap:pretty}
.map-section-row{display:grid;grid-template-columns:minmax(120px,1.1fr) minmax(100px,1fr) 60px 76px;align-items:center;gap:8px;padding:9px 0 4px;font-size:13px;line-height:1.45}
.map-section-row:last-child{border-bottom:0}
.map-section-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.map-section-missing{grid-column:2/-1;color:var(--muted);font-size:12px;line-height:1.5;text-align:left}
.map-section-note{margin:0 0 9px;padding:0 0 10px;color:var(--muted);font-size:12px;line-height:1.62;text-wrap:pretty;border-bottom:1px dashed var(--line)}
.map-section-note:last-of-type{margin-bottom:0;padding-bottom:0;border-bottom:0}
[data-view="scores"] .map-panel>.hint{margin:9px 0 0;color:var(--muted);font-size:12px;line-height:1.62;text-wrap:pretty}
[data-view="scores"] .map-panel .map-empty{font-size:12px;line-height:1.65;color:var(--muted)}
[data-view="scores"] .map-panel .map-empty-link{font-size:12px}
.map-progress{height:8px;background:var(--card2);border-radius:999px;overflow:hidden;border:1px solid var(--line)}
.map-progress i{display:block;height:100%;border-radius:inherit;background:var(--accent2)}
.map-progress i.warn{background:#c89b5d}
.map-progress i.danger{background:var(--danger)}
.map-rate{font-variant-numeric:tabular-nums;text-align:right;color:var(--ink2)}
.map-status{font-size:12px;text-align:right;white-space:nowrap}
.map-status.good{color:var(--accent2)}
.map-status.warn{color:var(--accent)}
.map-status.danger{color:var(--danger)}
.map-weak-list{display:grid;gap:9px}
.map-weak-card{border:1px solid var(--line);border-radius:10px;padding:10px 11px;background:color-mix(in srgb,var(--card2) 76%,transparent)}
.map-weak-top{display:flex;align-items:baseline;gap:8px;min-width:0}
.map-weak-top b{font-size:13px;font-weight:600;line-height:1.45;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.map-weak-top span{font-size:12px;color:var(--ink3);white-space:nowrap}
.map-weak-card p{margin:5px 0 0;color:var(--muted);font-size:12px;line-height:1.62;text-wrap:pretty}
.map-weak-meter{display:flex;align-items:center;gap:8px;margin:8px 0 9px}
.map-weak-meter .map-progress{flex:1}
.map-weak-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:9px}
.map-weak-actions .pill{font-size:12px;padding:5px 8px}
.map-error-note{margin-top:6px;padding-top:6px;border-top:1px dashed var(--line);font-size:12px;line-height:1.58;color:var(--ink3);text-wrap:pretty}
.map-weak-note{margin-top:8px}
.map-student-select{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px}
.map-student-select label{font-size:12px;color:var(--ink3)}
.map-student-select .input{max-width:180px}
.map-picker{position:relative;flex:1 1 190px;max-width:300px;min-width:150px}
.map-picker-input{width:100%!important;max-width:none!important;padding-right:26px}
.map-picker-caret{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:12px;color:var(--ink3);pointer-events:none}
.map-picker-list{position:absolute;z-index:var(--z-sticky);left:0;top:calc(100% + 5px);width:max-content;min-width:100%;max-width:280px;max-height:272px;overflow:auto;background:var(--card);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow);padding:5px;display:none}
.map-picker-list.open{display:block}
.map-picker-item{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:8px;font-size:13px;cursor:pointer;white-space:nowrap}
.map-picker-item:hover,.map-picker-item.hl{background:var(--accent-soft)}
.map-picker-item.sel span{color:var(--accent2);font-weight:600}
.map-picker-item .py-hint{font-style:normal;font-size:12px;color:var(--ink3);letter-spacing:.06em;padding-left:10px;border-left:1px solid var(--line)}
.map-picker-empty{padding:12px 10px;font-size:13px;color:var(--ink3);text-align:center}
.pt-student-wrap{flex:0 1 200px;min-width:150px;max-width:240px}
.map-trend{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:10px}
.map-trend-item{padding:9px 10px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}
.map-trend-item.is-action{display:block;width:100%;font:inherit;text-align:left;color:inherit;cursor:pointer;transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease}
.map-trend-item.is-action:hover,.map-trend-item.is-action:focus-visible{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 16%,transparent);transform:translateY(-1px);outline:none}
.map-trend-item.is-selected{border-color:var(--accent);background:var(--accent-soft)}
.map-trend-item span{display:block;font-size:12px;color:var(--ink3);margin-bottom:4px}
.map-trend-item b{font-size:16px;color:var(--ink);font-variant-numeric:tabular-nums}
.map-dynamic-panel{margin-top:12px;padding:12px;border:1px solid var(--border);border-radius:10px;background:var(--card2)}
.map-dynamic-head{display:flex;align-items:flex-start;gap:8px;margin-bottom:10px}
.map-dynamic-head h4{margin:0;font-size:14px;color:var(--ink)}
.map-dynamic-head p{margin:3px 0 0;font-size:12px;color:var(--ink3);line-height:1.6}
.map-dynamic-head .pill{margin-left:auto;flex:none}
.map-dynamic-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:9px;padding:8px 9px;border:1px dashed var(--line);border-radius:10px;background:var(--card)}
.map-dynamic-filter{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--ink3)}
.map-dynamic-filter .input{min-height:30px;width:auto;min-width:120px;padding:4px 7px;font-size:12px}
.map-dynamic-count{margin-left:auto;font-size:12px;color:var(--ink3)}
.map-dynamic-list{display:grid;gap:6px}
.map-dynamic-row{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px dashed var(--line);min-width:0}
.map-dynamic-row:last-child{border-bottom:0}
.map-dynamic-index{width:22px;flex:none;text-align:center;color:var(--ink3);font-size:12px}
.map-dynamic-main{flex:1;min-width:0}
.map-student-link{display:block;max-width:100%;padding:0;border:0;background:none;color:var(--ink);font-family:inherit;font-size:13px;font-weight:600;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}
.map-student-link:hover,.map-student-link:focus-visible{color:var(--accent2);text-decoration:underline;outline:none}
.map-dynamic-meta{display:block;margin-top:3px;color:var(--ink3);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.map-dynamic-values{flex:none;min-width:144px;text-align:right;color:var(--ink2);font-size:12px;line-height:1.55;font-variant-numeric:tabular-nums}
.map-dynamic-current-rank{display:block;color:var(--ink);font-size:12px;font-weight:600}
.map-dynamic-values b{display:block;font-size:14px}
.map-dynamic-values b.up,.map-dynamic-status.up{color:var(--accent2)}
.map-dynamic-values b.down,.map-dynamic-status.down{color:var(--danger)}
.map-dynamic-values b.steady,.map-dynamic-status.steady{color:var(--ink3)}
.map-dynamic-status{flex:none;min-width:64px;text-align:right;font-size:12px;white-space:nowrap}.map-dynamic-values b.absent,.map-dynamic-status.absent{color:var(--danger)}.map-dynamic-values b.pending,.map-dynamic-status.pending{color:var(--accent)}.map-dynamic-row.is-exception{padding:10px 8px;margin:0 -8px;border:1px solid color-mix(in srgb,var(--danger) 22%,var(--border));border-radius:10px;background:color-mix(in srgb,var(--danger) 4%,var(--card2))}.rank-row.is-absent{color:var(--ink3);background:color-mix(in srgb,var(--danger) 4%,transparent)}
.map-dynamic-empty{padding:12px 4px;text-align:center;color:var(--ink3);font-size:13px;line-height:1.7}
.classmgr-roster-row{margin:0 0 10px}
.score-view-tabs{display:none;flex:none;max-width:min(560px,60vw)}
@media(min-width:761px){.score-view-tabs{display:flex}#scoreViewMode{display:none}}
.classmgr-quick-sections{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;margin-bottom:16px}
.classmgr-quick-section{display:flex;align-items:center;gap:10px;min-width:0;padding:12px 13px;border:1px solid var(--border);border-radius:12px;background:var(--card);color:var(--ink);text-align:left;cursor:pointer;transition:background-color .16s,border-color .16s,box-shadow .16s,transform .16s}
.classmgr-quick-section:hover,.classmgr-quick-section:focus-visible{border-color:var(--accent);background:var(--accent-soft);box-shadow:0 8px 20px -16px var(--accent2);transform:translateY(-1px);outline:none}
.classmgr-quick-section.active{border-color:var(--accent);background:var(--accent-soft);box-shadow:inset 3px 0 0 var(--accent)}
.classmgr-quick-icon{display:grid;place-items:center;width:32px;height:32px;flex:none;border-radius:10px;background:var(--card2);font-size:20px}
.classmgr-quick-section>span:nth-child(2){display:flex;flex-direction:column;gap:4px;min-width:0}
.classmgr-quick-section b{font-size:13px;white-space:nowrap}
.classmgr-quick-section small{color:var(--ink3);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.classmgr-quick-arrow{margin-left:auto;color:var(--accent2);font-size:20px;line-height:1}
.roster-summary{font-size:12px;color:var(--ink3)}
.roster-view-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;max-height:52vh;overflow:auto;margin-top:10px;padding:2px}
.roster-view-item{display:flex;align-items:center;gap:8px;min-width:0;padding:9px 10px;border:1px solid var(--border);border-radius:10px;background:var(--card2);color:var(--ink);font-size:13px;line-height:1.45}
.roster-view-item span:last-child{min-width:0;overflow-wrap:anywhere}
.roster-view-index{display:grid;place-items:center;width:22px;height:22px;flex:none;border-radius:50%;background:var(--accent-soft);color:var(--accent2);font-size:12px;font-weight:700}
.roster-view-empty{padding:14px;border:1px dashed var(--border);border-radius:10px;color:var(--ink3);font-size:13px;line-height:1.7}
@media(min-width:560px){.roster-view-list{grid-template-columns:repeat(3,minmax(0,1fr))}}
.student-group-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.student-group-file{display:inline-flex;align-items:center;gap:6px;min-height:34px;padding:7px 10px;border:1px dashed var(--border);border-radius:10px;background:var(--card2);color:var(--ink2);font-size:12px}
.student-group-file b{color:var(--ink)}
.student-group-summary{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px;color:var(--ink3);font-size:12px}
.student-group-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px;margin-top:12px}
.student-group-card{min-width:0;padding:12px;border:1px solid var(--border);border-radius:10px;background:var(--card2)}
.student-group-card-head{display:flex;align-items:baseline;gap:8px;margin-bottom:9px}
.student-group-card-head b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;color:var(--ink)}
.student-group-card-head span{flex:none;color:var(--accent2);font-size:12px}
.student-group-members{display:flex;flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none}
.student-group-member{display:inline-flex;align-items:center;min-height:28px;padding:4px 8px;border:1px solid var(--line);border-radius:999px;background:var(--card);color:var(--ink2);font-size:12px}
.student-group-empty{padding:12px;border:1px dashed var(--border);border-radius:10px;color:var(--ink3);font-size:13px;line-height:1.7}
.student-group-review{display:grid;gap:8px;max-height:46vh;overflow:auto;margin-top:12px}
.student-group-review-row{display:flex;align-items:flex-start;gap:8px;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}
.student-group-review-row strong{display:block;color:var(--ink);font-size:13px}
.student-group-review-row small{display:block;margin-top:3px;color:var(--ink3);font-size:12px}
@media(max-width:900px){.classmgr-quick-sections{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:768px){.classmgr-quick-sections{grid-template-columns:1fr}.classmgr-quick-section{min-height:54px}.student-group-grid{grid-template-columns:1fr}}
/* ---------- 班级状态工作台（摘要 / 待处理事项 / 学生状态 / 班级动态，只读派生展示） ---------- */
.cw-wrap{display:flex;flex-direction:column;gap:10px;margin-bottom:16px}
.cw-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px}
.cw-stat{display:flex;flex-direction:column;gap:3px;min-width:0;padding:11px 14px;border:1px solid var(--border);border-radius:12px;background:var(--card)}
.cw-stat>b{font-size:14.5px;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cw-stat>small{color:var(--ink3);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cw-stat.click{cursor:pointer;transition:border-color .16s,background-color .16s}
.cw-stat.click:hover,.cw-stat.click:focus-visible{border-color:var(--accent);background:var(--accent-soft);outline:none}
.cw-stat.alert>b{color:var(--danger)}
.cw-panel{border:1px solid var(--border);border-radius:12px;background:var(--card);padding:12px 14px;min-width:0}
.cw-panel-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin-bottom:6px}
.cw-panel-head h3{font-size:13px;margin:0}
.cw-panel-head small{color:var(--ink3);font-size:11px}
.cw-item{display:flex;align-items:center;gap:10px;padding:8px 0;border-top:1px dashed var(--line);min-width:0}
.cw-item-text{flex:1;min-width:0;font-size:12.5px;line-height:1.6}
.cw-item-text>span{display:block}
.cw-item-text small{display:block;color:var(--ink3);font-size:11px;line-height:1.5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cw-item .pill{flex-shrink:0}
.cw-more{margin-top:8px}
.cw-onboard p{color:var(--ink2);font-size:12.5px;line-height:1.7;margin:6px 0 10px}
.cs-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:8px 0 12px}
.cs-chip{padding:5px 12px;border-radius:999px;border:1px solid var(--border);background:var(--card);color:var(--ink);font-size:12px;cursor:pointer;transition:border-color .16s,background-color .16s}
.cs-chip:hover,.cs-chip:focus-visible{border-color:var(--accent);background:var(--accent-soft);outline:none}
.cs-chip[aria-pressed="true"]{border-color:var(--accent);background:var(--accent-soft);font-weight:600}
.cs-headrow,.cs-row{display:grid;grid-template-areas:"name group seat score delta trend";grid-template-columns:minmax(64px,.9fr) minmax(72px,1fr) minmax(96px,1.3fr) minmax(64px,.7fr) minmax(64px,.7fr) minmax(96px,1fr);gap:8px;align-items:center;min-width:0}
.cs-headrow{font-size:11px;color:var(--ink3);padding:0 10px 6px}
.cs-row{padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--card);margin-bottom:6px;font-size:12.5px}
.cs-name{grid-area:name}.cs-group{grid-area:group}.cs-seat{grid-area:seat}.cs-score{grid-area:score}.cs-delta{grid-area:delta}.cs-trendcell{grid-area:trend;text-align:right}
.cs-cell{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cs-row b{font-size:13px}
.cs-trend{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;padding:2px 9px;border-radius:999px;border:1px solid var(--border);white-space:nowrap}
.cs-trend.watch{color:var(--danger);border-color:var(--danger)}
.cs-trend.rise{color:var(--ink);border-color:var(--ink3)}
.cs-trend.stable{color:var(--ink3)}
.cs-trend.insufficient{color:var(--ink3);border-style:dashed}
.cw-tl{list-style:none;margin:0;padding:0}
.cw-tl li{display:flex;gap:10px;align-items:baseline;padding:7px 0;border-top:1px dashed var(--line);font-size:12.5px;min-width:0}
.cw-tl li:first-child{border-top:none}
.cw-tl-date{flex:0 0 84px;color:var(--ink3);font-size:11.5px}
.cw-tl-main{flex:1;min-width:0}
.cw-tl-main small{color:var(--ink3);margin-left:8px;font-size:11px}
.cw-tl .pill{flex-shrink:0}
/* 图标体系 B 批：cw 提示项/时间线的描边图标色与对齐 */
.cw-item .ui-icon{color:var(--accent);flex:none;align-self:center}
.cw-item .ui-icon.danger{color:var(--danger)}
.cw-tl-main .ui-icon{color:var(--ink3);vertical-align:-3px;margin-right:2px}
@media(max-width:768px){
  .cs-headrow{display:none}
  .cs-row{grid-template-areas:"name trend" "group seat" "score delta";grid-template-columns:1fr 1fr;row-gap:4px}
  .cs-trendcell{text-align:left}
  .cw-tl-date{flex-basis:76px}
}
/* 移动端规则已在上方合并 */
.map-bullets{margin:0;padding-left:18px;color:var(--ink2);font-size:13px;line-height:1.9}
.map-advice{border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:color-mix(in srgb,var(--accent-soft) 36%,var(--card));color:var(--ink2);font-size:13px;line-height:1.85}
.map-advice strong{color:var(--ink)}
.map-empty{padding:10px 2px;text-align:center;border:0;border-radius:0;color:var(--ink3);font-size:13px;line-height:1.75;font-weight:400}.map-empty-link{color:var(--accent2);cursor:pointer;font-size:12px;margin-left:4px}
@media (max-width:900px){.map-summary{grid-template-columns:repeat(2,minmax(0,1fr))}.map-grid{grid-template-columns:1fr}}
@media (max-width:560px){.map-summary{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.map-stat{padding:11px}.map-stat b{font-size:20px}.map-section-row{grid-template-columns:1fr 74px 64px;gap:8px}.map-section-row .map-progress{grid-column:1/-1;grid-row:2}.map-section-row .map-status{grid-column:3;grid-row:1}.map-meta{width:100%;margin-left:0}.map-panel{padding:12px}.map-dynamic-head{gap:8px}.map-dynamic-head .pill{padding-inline:7px}.map-dynamic-toolbar{align-items:stretch}.map-dynamic-filter{flex:1 1 100%;justify-content:space-between}.map-dynamic-filter .input{flex:1;min-width:0}.map-dynamic-count{width:100%;margin-left:0}.map-dynamic-row{align-items:flex-start;flex-wrap:wrap;gap:4px 8px}.map-dynamic-index{width:24px;padding-top:2px}.map-dynamic-main{min-width:calc(100% - 32px)}.map-dynamic-values{margin-left:32px;min-width:0;flex:1;text-align:left}.map-dynamic-status{align-self:center}}
/* ---------- 学习画像（学情分析 · 综合整合视图） ---------- */
.pf-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-bottom:4px}
.pf-toolbar-group{display:inline-flex;flex-wrap:wrap;align-items:center;gap:6px}
.pf-toolbar-label{color:var(--ink3);font-size:12px}
.pf-custom-range{display:none;align-items:center;gap:6px}
.pf-custom-range.is-on{display:inline-flex}
.pf-custom-range .input{max-width:138px;min-height:34px}
.pf-coverage{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 2px}
.pf-coverage-chip{display:inline-flex;align-items:center;gap:4px;padding:4px 9px;border:1px solid var(--line);border-radius:999px;background:var(--card2);color:var(--ink2);font-size:12px}
.pf-coverage-chip.is-zero{opacity:.55;border-style:dashed}
.pf-coverage-chip b{color:var(--ink)}
.pf-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px}
.pf-panel{min-width:0;border:1px solid var(--line);border-radius:10px;background:var(--card2);padding:13px 14px;margin-bottom:14px}
.pf-panel>.card-head{margin-bottom:6px}
.pf-panel .card-head .hint{font-size:12px}
.pf-list{display:grid;gap:8px}
.pf-alert{border:1px solid var(--line);border-left:3px solid var(--ink3);border-radius:10px;padding:9px 11px;background:var(--card)}
.pf-alert.is-warn{border-left-color:var(--danger)}
.pf-alert.is-good{border-left-color:var(--ok)}
.pf-alert-title{font-size:13px;color:var(--ink);font-weight:600}
.pf-alert-detail{margin-top:3px;color:var(--ink2);font-size:13px;line-height:1.7}
.pf-evidence{margin:7px 0 0;padding-left:17px;color:var(--ink3);font-size:12px;line-height:1.75}
.pf-evidence-title{color:var(--ink3);font-size:12px;margin-top:6px}
.pf-dim-row{display:flex;justify-content:space-between;gap:8px;padding:6px 0;border-bottom:1px dashed var(--line);font-size:13px;color:var(--ink2);flex-wrap:wrap}
.pf-dim-row:last-child{border-bottom:0}
.pf-dim-row>b{color:var(--ink);font-weight:600}
.pf-tag{display:inline-block;padding:1px 8px;border-radius:999px;font-size:12px;border:1px solid var(--line);color:var(--ink3);white-space:nowrap}
.pf-tag.is-warn{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 45%,transparent)}
.pf-tag.is-good{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 55%,transparent)}
.pf-common-item{padding:8px 0;border-bottom:1px dashed var(--line)}
.pf-common-item:last-child{border-bottom:0}
.pf-common-item b{font-size:13px;color:var(--ink)}
.pf-common-item .hint{margin-top:2px}
.pf-student-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin-bottom:8px}
.pf-dims{display:grid;grid-template-columns:1fr 1fr;gap:0 18px}
@media (max-width:900px){.pf-grid,.pf-dims{grid-template-columns:1fr}}
.pf-sug-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.pf-sug-text{white-space:pre-wrap;font-family:inherit;font-size:13px;line-height:1.85;color:var(--ink2);border:1px solid var(--line);border-radius:10px;padding:12px;background:var(--card);max-height:52vh;overflow:auto;margin:0}
.pf-metrics{display:grid;gap:8px}
.pf-metric-item{padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}
.pf-metric-item b{display:block;font-size:13px;color:var(--ink);margin-bottom:3px}
.pf-metric-item span{color:var(--ink3);font-size:12px;line-height:1.75}
@media (max-width:768px){
  /* 学习画像窄屏：筛选换行、日期输入整行 */
  [data-view="scores"] .pf-toolbar{align-items:stretch}
  [data-view="scores"] .pf-toolbar-group{width:100%;justify-content:flex-start}
  [data-view="scores"] .pf-custom-range.is-on{width:100%}
  [data-view="scores"] .pf-custom-range .input{flex:1;max-width:none}
}
@media (max-width:768px){
  /* 学情分析窄屏：标题与操作区分层，避免按钮把卡片头顶开 */
  [data-view="scores"] .card-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px 7px}
  [data-view="scores"] .card-head h3{flex:1 1 100%;min-width:0}
  [data-view="scores"] .card-head .hint{flex:1 1 100%;margin-left:0}
  [data-view="scores"] .card-head .spacer{display:none}
  [data-view="scores"] .card-head .btn{flex:1 1 calc(50% - 7px);min-width:0;padding-inline:8px;white-space:nowrap}
  [data-view="scores"] #examList{margin-top:10px}
  [data-view="scores"] #scoreAnalysis2>.card>.card-head select{width:100%;max-width:none!important}
  [data-view="scores"] .map-toolbar{align-items:stretch}
  [data-view="scores"] .map-range{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}
  [data-view="scores"] .map-range .pill{min-width:0;padding-inline:5px}
  [data-view="scores"] .map-summary{margin-bottom:12px}
  [data-view="scores"] .map-panel{padding:13px;margin-bottom:12px}
  [data-view="scores"] .map-panel + .map-panel{margin-top:12px}
  [data-view="scores"] .map-trend{grid-template-columns:1fr 1fr}
  [data-view="scores"] .rank-row{gap:4px;font-size:12px}
  [data-view="scores"] .rank-row .rk{width:48px;text-align:left}
  [data-view="scores"] .rank-row .rs{width:62px}
  [data-view="scores"] .rank-row .rd{width:72px}
  [data-view="scores"] .multi-table{display:block;overflow-x:auto;white-space:nowrap}
}


/* 学情地图 · 个人变化精修：保留原结构，强化摘要、表格节奏与触控可读性 */
[data-view="scores"] .map-trend-item{position:relative;min-width:0}
[data-view="scores"] .map-trend-item.is-action{min-height:68px;padding-right:24px}
[data-view="scores"] .map-trend-item.is-action::after{content:"›";position:absolute;right:10px;top:50%;transform:translateY(-50%);color:var(--accent2);font-size:20px;line-height:1;opacity:.68}
[data-view="scores"] .map-trend-item.is-selected{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 35%,transparent)}
[data-view="scores"] .map-trend-item.is-selected::after{opacity:1}
.map-trend-delta.up{color:var(--accent2)!important}
.map-trend-delta.down{color:var(--danger)!important}
.map-trend-delta.steady{color:var(--ink3)!important}
.map-student-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:2px 0 10px}
.map-student-summary span{display:flex;flex-direction:column;gap:4px;min-width:0;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:color-mix(in srgb,var(--card2) 82%,transparent);color:var(--ink3);font-size:12px;line-height:1.45}
.map-student-summary b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink);font-size:13px;font-weight:700;font-variant-numeric:tabular-nums}
.map-student-summary .warn b{color:var(--accent)}
.map-student-summary .up b{color:var(--accent2)}
.map-student-summary .down b{color:var(--danger)}
.map-student-timeline{display:grid;gap:0;margin-top:2px}
.map-student-timeline .rank-row{display:grid;grid-template-columns:minmax(92px,.9fr) minmax(86px,1fr) 72px 86px;gap:8px;align-items:center;padding:7px 0}
.map-student-timeline .rank-row .rk,.map-student-timeline .rank-row .rn,.map-student-timeline .rank-row .rs,.map-student-timeline .rank-row .rd{width:auto;min-width:0}
.map-student-timeline .rank-row .rk{text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.map-student-timeline .rank-row .rn{color:var(--ink);font-variant-numeric:tabular-nums}
.map-student-timeline .rank-row .rs,.map-student-timeline .rank-row .rd{text-align:right;font-variant-numeric:tabular-nums}
.map-student-timeline .rank-row.is-head{padding-top:6px;color:var(--ink3);font-size:12px;border-bottom:1px solid var(--line)}
.map-student-timeline .rank-row.is-head span{font-weight:600;color:var(--ink3)}
.map-student-timeline .rank-row.is-absent{margin:0 -6px;padding-inline:6px;border-radius:10px;background:color-mix(in srgb,var(--danger) 4%,transparent)}
.map-student-timeline .rank-row.is-absent .rn{color:var(--danger)}
@media (max-width:560px){
  [data-view="scores"] .map-student-summary{grid-template-columns:1fr 1fr}
  [data-view="scores"] .map-student-timeline .rank-row{grid-template-columns:minmax(0,1fr) 74px 62px;gap:4px 7px;padding:8px 0}
  [data-view="scores"] .map-student-timeline .rank-row .rk{grid-column:1;text-align:left}
  [data-view="scores"] .map-student-timeline .rank-row .rn{grid-column:2;text-align:right}
  [data-view="scores"] .map-student-timeline .rank-row .rs{grid-column:3;text-align:right}
  [data-view="scores"] .map-student-timeline .rank-row .rd{grid-column:1/-1;text-align:left;font-size:12px;color:var(--ink3)}
  [data-view="scores"] .map-student-timeline .rank-row .rd.up{color:var(--accent2)}
  [data-view="scores"] .map-student-timeline .rank-row .rd.down{color:var(--danger)}
  [data-view="scores"] .map-student-timeline .rank-row.is-head .rd{display:none}
}


/* ---------- 每日一读 ---------- */
.read-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.read-body{background:var(--card2);border:1px solid var(--line);border-radius:10px;padding:20px 22px;max-width:760px;margin-inline:auto}
.read-body .rb-title{font-family:'Noto Serif SC','Songti SC',serif;font-size:20px;letter-spacing:.08em;margin-bottom:4px}
.read-body .rb-meta{font-size:12px;color:var(--ink3);margin-bottom:14px}
.read-body .rb-sec{font-size:13px;color:var(--accent2);letter-spacing:.18em;margin:16px 0 8px;border-bottom:1px solid var(--line);padding-bottom:4px}
.read-body .rb-paras p{font-size:14px;line-height:2.1;text-indent:2em;color:var(--ink)}
.read-body .rb-note p{font-size:13px;line-height:2;color:var(--ink2);text-indent:2em}
.word-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px;margin-top:6px}
.word-card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:11px 13px}
.word-card .wc-w{font-family:'Noto Serif SC','Songti SC',serif;font-size:20px;color:var(--ink);letter-spacing:.08em}
.word-card .wc-p{font-size:13px;color:var(--accent2);margin-top:2px}
.word-card .wc-m{font-size:12px;color:var(--ink2);margin-top:4px;line-height:1.7}

/* ---------- 设置中心 ---------- */
.theme-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.theme-card{border:1.5px solid var(--border);border-radius:10px;padding:10px;cursor:pointer;transition:all .15s;background:var(--card)}
.theme-card:hover{border-color:var(--accent)}
.theme-card.active{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent)}
.theme-card .swatch{height:52px;border-radius:10px;margin-bottom:8px;border:1px solid var(--line)}
.theme-card span{font-size:13px;color:var(--ink2);display:block;text-align:center}
.font-opts{display:flex;gap:8px;flex-wrap:wrap}
.font-opt{border:1px solid var(--border);border-radius:10px;padding:10px 16px;cursor:pointer;background:var(--card);transition:all .15s}
.font-opt:hover{border-color:var(--accent)}
.font-opt.active{border-color:var(--accent);background:var(--accent-soft)}
.settings-overview{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-bottom:16px}
.settings-stat{position:relative;display:block;padding:13px 14px;min-width:0;border-left:3px solid transparent;transition:border-color .16s ease,background-color .16s ease,box-shadow .16s ease,transform .16s ease}
.settings-stat::after{display:none}
.settings-stat:hover,.settings-stat:focus-visible{border-left-color:var(--accent);background:color-mix(in srgb,var(--accent-soft) 38%,var(--card));transform:translateY(-1px)}
.settings-stat:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.settings-stat .ss-label{display:block;font-size:12px;color:var(--ink3);letter-spacing:.1em;margin-bottom:5px}
.settings-stat b{display:block;font-size:16px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.settings-stat small{display:block;margin-top:3px;font-size:12px;color:var(--ink3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.settings-stat-action.is-targeted{animation:settings-target-pulse .8s ease}@keyframes settings-target-pulse{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 42%,transparent)}100%{box-shadow:0 0 0 8px transparent}}
.settings-management{margin-top:16px}
.settings-management-card .card-head{flex:none}
.settings-management-card-body .settings-note:last-child{margin-bottom:0}
.settings-quick-action > span:not(.sq-ic){display:block;min-width:0}
.settings-advanced-actions .btn{white-space:nowrap}
.settings-card-intro{font-size:13px;color:var(--ink2);line-height:1.8;margin:-3px 0 14px}.appearance-settings-card .settings-card-intro{font-size:12px;line-height:1.6;margin:-2px 0 10px}.appearance-settings-card .theme-grid{gap:8px}.appearance-settings-card .theme-card{padding:8px}.appearance-settings-card .theme-card .swatch{height:44px;margin-bottom:5px}.appearance-settings-card .theme-card span{font-size:12px}.appearance-settings-card .font-opts{gap:6px}.appearance-settings-card .font-opt{padding:8px 12px}.settings-section-label{display:flex;align-items:center;gap:8px;margin:16px 0 9px;font-size:12px;color:var(--ink3);letter-spacing:.08em}
.settings-section-label::after{content:"";height:1px;flex:1;background:var(--line)}
.settings-profile-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(120px,.5fr);gap:12px}
.settings-profile-grid .full{grid-column:1/-1}
.settings-storage{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:11px 12px;border:1px dashed var(--border);border-radius:10px;background:var(--card2);font-size:13px;color:var(--ink2)}
.settings-storage strong{color:var(--accent2)}
.settings-action-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:12px}
.settings-action{display:flex;align-items:center;gap:8px;padding:12px;border:1px solid var(--border);border-radius:10px;background:var(--card2);text-align:left;transition:all .15s}
.settings-action:hover{border-color:var(--accent);background:var(--accent-soft);transform:translateY(-1px)}
.settings-action .sa-ic{font-size:20px;flex:none}
.settings-action b{display:block;font-size:13px}
.settings-action span{display:block;font-size:12px;color:var(--ink3);margin-top:2px;line-height:1.5}
.settings-action.danger{border-color:color-mix(in srgb,var(--danger) 25%,var(--border));background:color-mix(in srgb,var(--danger) 5%,var(--card2))}
.settings-action.danger b{color:var(--danger)}
.settings-about{display:grid;gap:8px}
.settings-about-action .sa-copy{flex:1;min-width:0}
.settings-about-action .sa-copy b,.settings-about-action .sa-copy span{display:block}
.settings-about-action .sa-copy span{margin-top:3px;color:var(--ink3);font-size:12px;line-height:1.55}
.settings-about-action .sa-arrow{flex:none;color:var(--accent2);font-size:20px;line-height:1}
.settings-note{padding:11px 12px;border-radius:10px;background:var(--card2);border:1px solid var(--line);font-size:13px;color:var(--ink2);line-height:1.8}
.settings-note b{color:var(--accent2)}
@media (max-width:900px){.settings-overview{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:560px){.settings-profile-grid{grid-template-columns:1fr}.settings-action-grid{grid-template-columns:1fr}.settings-advanced-actions .btn{flex:1}}.appearance-drawer-mask,.profile-drawer-mask{position:fixed;inset:0;z-index:var(--z-drawer);background:rgba(40,35,30,.42);display:none;align-items:center;justify-content:center;padding:18px;overflow-y:auto}.appearance-drawer-mask.open,.profile-drawer-mask.open{display:flex}.appearance-drawer,.profile-drawer{width:min(560px,100%);max-height:min(84vh,720px);overflow-y:auto;background:var(--card);border:1px solid var(--border);border-radius:16px;padding:22px 24px;box-shadow:0 26px 70px -24px rgba(0,0,0,.5);transform:translateY(10px) scale(.985);transition:transform .2s ease}.appearance-drawer-mask.open .appearance-drawer,.profile-drawer-mask.open .profile-drawer{transform:none}.appearance-drawer-head{display:flex;align-items:center;gap:8px;margin-bottom:12px}.appearance-drawer-head h3{font-size:16px}.appearance-drawer-head button{margin-left:auto;font-size:28px;line-height:1;padding:2px 8px;color:var(--ink2)}.appearance-drawer .theme-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.appearance-drawer .theme-card{padding:8px}.appearance-drawer .theme-card .swatch{height:42px}.appearance-drawer .font-opt{flex:1;min-width:84px;text-align:center}
.profile-save-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:14px;padding-top:12px;border-top:1px dashed var(--line)}.profile-save-status{font-size:12px;color:var(--ink3)}.profile-save-status.pending{color:var(--accent2)}.profile-save-status.success{color:var(--accent2)}.profile-save-status.error{color:var(--danger)}
.class-manage-list{display:grid;gap:8px;margin-top:8px}.class-manage-row{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--border);border-radius:10px;background:var(--card2)}.class-manage-row .cm-main{flex:1;min-width:0}.class-manage-row b{display:block;font-size:13px}.class-manage-row small{display:block;color:var(--ink3);font-size:12px;margin-top:1px}.class-manage-row .pill{flex:none}.class-history-list{display:grid;gap:8px}.class-history-row{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px dashed var(--border);border-radius:10px;color:var(--ink2);font-size:13px}.class-history-row span{flex:1;min-width:0}.undo-bar{position:fixed;left:50%;bottom:30px;z-index:var(--z-toast);display:flex;align-items:center;gap:8px;max-width:calc(100vw - 28px);padding:9px 10px 9px 16px;border-radius:999px;background:var(--ink);color:#f5f2ec;box-shadow:0 12px 30px -12px rgba(0,0,0,.5);font-size:13px;transform:translate(-50%,16px);opacity:0;pointer-events:none;transition:all .2s}.undo-bar.show{transform:translate(-50%,0);opacity:1;pointer-events:auto}.undo-bar button{padding:3px 9px;border:1px solid rgba(255,255,255,.55);border-radius:999px;color:#fff;font-size:12px}@media (max-width:768px){.appearance-drawer,.profile-drawer{padding-left:14px;padding-right:14px}.undo-bar{bottom:86px}}

/* ---------- 柚柚 AI 助手 ---------- */
.yuyou-fab{position:fixed;right:20px;bottom:24px;z-index:var(--z-nav);width:58px;height:58px;border-radius:50%;border:3px solid var(--card);box-shadow:0 12px 26px -10px rgba(0,0,0,.55);overflow:visible;background:none;padding:0;transition:transform .15s}
.yuyou-fab img{width:100%;height:100%;border-radius:50%;object-fit:cover;display:block}
.yuyou-fab:hover{transform:scale(1.07)}
.yuyou-fab .yuyou-badge{position:absolute;top:-3px;right:-3px;background:var(--danger);color:#fff;border-radius:999px;font-size:12px;line-height:1;padding:4px 6px;border:2px solid var(--card)}
/* 柚柚 FAB 暗色描边变体（D2 微优化）：亮色品牌件用页面暖黑描边扣进暗色世界，
   外环 1px 暖白微光保持轮廓可辨（与 dir-c rgba(.14) 线框语言同源，海拔不变） */
html[data-dark="1"] .yuyou-fab{border-color:var(--bg);box-shadow:0 12px 26px -10px rgba(0,0,0,.62),0 0 0 1px rgba(216,207,196,.14)}
html[data-dark="1"] .yuyou-fab .yuyou-badge{border-color:var(--bg);box-shadow:0 0 0 1px rgba(216,207,196,.14)}
/* ========== 柚柚 AI 助手 · 聊天工作区（20260914 重构，对齐主流 AI Chat 信息架构） ==========
   布局：yuyou 路由下主区不滚动，聊天区自占满高度、消息区内部滚动；
   桌面左侧会话栏（可收起）+ 中央消息列（限宽 760）+ 底部输入区（视觉焦点）；
   移动端会话栏变抽屉，聊天区高度跟随 visualViewport（键盘不顶破布局）。 */
body.yuyou-route .shell-content>.main{overflow:hidden}
body.yuyou-route .page-shortcuts{display:none}   /* 聊天页隐藏快捷入口条：全高度 Chat 布局，导航由聊天顶栏/侧栏承担 */
.yuyou-route .main-in{max-width:none;padding:0;height:100%;overflow:hidden}
.yuyou-route .view[data-view="yuyou"]{display:flex;height:100%;animation:none}
.yc-shell [hidden]{display:none}
.yc-shell{--yc-reading-width:760px;flex:1;display:flex;min-width:0;min-height:0;background:var(--bg);position:relative}
.yuyou-route .yuyou-fab{display:none}   /* 聊天页内不显示悬浮球，避免遮挡输入区 */

/* —— 会话侧栏 —— */
.yc-side{width:224px;flex:none;display:flex;flex-direction:column;background:var(--card);border-right:1px solid var(--line);padding:14px 10px 10px;min-height:0}
.yc-side-top{display:flex;gap:6px;padding:0 4px 10px}
.yc-new{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:var(--card2);color:var(--ink);font-size:14px;font-weight:600;font-family:inherit;cursor:pointer;transition:border-color .15s,background .15s,color .15s}
.yc-new:hover{border-color:var(--accent);color:var(--accent2);background:var(--accent-soft)}
.yc-new:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}
.yc-new .ic{width:16px;height:16px;flex:none}
.yc-side-label{padding:6px 10px 4px;font-size:12px;color:var(--muted);letter-spacing:.06em}
.yc-side-list{flex:1;overflow-y:auto;padding:2px 4px;display:flex;flex-direction:column;gap:2px;min-height:0;overscroll-behavior:contain}
.yc-side-empty{padding:18px 10px;font-size:12px;color:var(--muted);text-align:center;line-height:1.8}
.yc-sess{display:flex;align-items:center;border-radius:10px;position:relative}
.yc-sess-main{flex:1;min-width:0;text-align:left;padding:11px 36px 11px 10px;border:0;border-radius:10px;background:none;color:var(--ink2);font-size:13px;font-family:inherit;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:background .12s,color .12s}
.yc-sess-main:hover{background:var(--card2);color:var(--ink)}
.yc-sess.active .yc-sess-main{background:var(--accent-soft);color:var(--accent2);font-weight:600}
.yc-sess-del{position:absolute;right:6px;top:50%;transform:translateY(-50%);display:grid;place-items:center;width:30px;height:30px;border:0;border-radius:8px;background:var(--card);color:var(--muted);cursor:pointer;opacity:0;transition:opacity .12s,color .12s,background .12s}
.yc-sess:hover .yc-sess-del,.yc-sess-del:focus-visible{opacity:1}
.yc-sess-del:hover{color:var(--danger);background:var(--bad-bg)}
.yc-side-foot{flex:none;padding:10px 4px 2px;border-top:1px solid var(--line-soft);margin-top:8px}
.yc-side-extra{display:flex;align-items:center;gap:10px;padding:7px 10px;border:0;border-radius:10px;background:none;font-family:inherit;text-align:left;cursor:pointer;transition:background .12s}
.yc-side-extra:hover{background:var(--card2)}
.yc-side-extra:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}
.yc-side-extra-ic{display:grid;place-items:center;width:28px;height:28px;border-radius:8px;background:var(--accent-soft);color:var(--accent2);font-size:15px;flex:none}
.yc-side-extra-ic .ic{width:15px;height:15px}
.yc-side-extra-tx{display:flex;flex-direction:column;min-width:0}
.yc-side-extra-tx b{font-size:13px;color:var(--ink);font-weight:600}
.yc-side-extra-tx small{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 桌面收起会话栏（DeepSeek 式全收起，入口在聊天顶栏） */
@media (min-width:769px){body.yuyou-side-collapsed .yc-side{display:none}}
body.yuyou-side-collapsed .yc-top .yc-d-only .ic{transform:rotate(180deg)}
@media (min-width:769px) and (max-width:1024px){.yc-side{width:200px}}

/* 会话导航和能力说明保持低干扰，不伪造模型切换。 */
.yc-side-foot summary,.yc-capabilities summary{display:flex;align-items:center;gap:6px;list-style:none;cursor:pointer;color:var(--ink2);font-size:13px;padding:8px 10px;border-radius:10px}
.yc-side-foot summary::-webkit-details-marker,.yc-capabilities summary::-webkit-details-marker{display:none}
.yc-side-foot summary .ic{margin-left:auto;width:14px;height:14px}
.yc-side-tools{display:grid;gap:2px;padding-top:4px}
.yc-side-foot summary:hover,.yc-capabilities summary:hover{background:var(--card2)}
.yc-side-foot summary:focus-visible,.yc-capabilities summary:focus-visible,.yc-act:focus-visible,.yc-sess-main:focus-visible,.yc-jump:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}
.yc-capabilities{position:relative}
.yc-capabilities summary .ic{width:14px;height:14px}
.yc-capability-pop{position:absolute;bottom:calc(100% + 14px);left:0;z-index:8;width:260px;max-width:calc(100vw - 92px);padding:6px 16px;background:var(--card);border:1px solid var(--line-strong);border-radius:16px}
.yc-capability-pop p{margin:12px 0;display:grid;gap:4px;font-size:13px;line-height:1.6}
.yc-capability-pop span{color:var(--muted);font-size:12px}
.yc-top-heading{flex:1;min-width:0;display:flex;align-items:baseline;gap:12px;overflow:hidden}
.yc-brand{font-size:14px;font-weight:600;white-space:nowrap;color:var(--ink)}
@media (prefers-reduced-motion:reduce){.yc-shell *{animation:none!important;transition:none!important}}

/* —— 主列：顶栏 / 消息区 / 输入区 —— */
.yc-main{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;position:relative}
.yc-top{flex:none;display:flex;align-items:center;gap:6px;padding:9px 14px;border-bottom:1px solid var(--line-soft);background:var(--bg);min-height:56px}
.yc-top-title{min-width:0;font-size:12px;font-weight:400;color:var(--ink);letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.yc-icon-btn{display:grid;place-items:center;width:34px;height:34px;flex:none;border:1px solid transparent;border-radius:10px;background:none;color:var(--ink2);cursor:pointer;transition:background .12s,color .12s,border-color .12s}
.yc-icon-btn:hover{background:var(--card2);color:var(--accent2)}
.yc-icon-btn:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}
.yc-icon-btn .ic{width:18px;height:18px;transition:transform .15s}
.yc-m-only{display:none}
.yc-scroll{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;overflow-anchor:none;scrollbar-gutter:stable;padding:28px 24px 12px}

/* —— 消息 —— */
.yc-welcome,.yc-msg,.yc-transient{max-width:var(--yc-reading-width);margin-left:auto;margin-right:auto}
.yc-msg{display:flex;gap:12px;margin-bottom:32px;min-width:0}
.yc-msg.user{flex-direction:column;align-items:flex-end;gap:8px}
.yc-msg.user .yc-bubble{max-width:78%;background:var(--accent-soft);color:var(--ink);border-radius:16px 16px 4px 16px;padding:10px 16px;font-size:15px;line-height:1.75;white-space:pre-wrap;word-break:break-word}
.yc-msg .ym-avatar{width:28px;height:28px;border-radius:50%;object-fit:cover;flex:none;margin-top:2px;border:1px solid var(--line)}
.yc-msg.ai .yc-msg-body{flex:1;min-width:0}
.yc-msg-attach{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.yc-msg .ym-img{max-width:180px;border-radius:10px;border:1px solid var(--line);display:block}
.yc-msg .ym-doc{display:inline-flex;align-items:center;gap:4px;background:var(--card);border:1px solid var(--border);border-radius:8px;padding:3px 9px;font-size:12px;color:var(--ink2)}
.yc-md{font-size:16px;line-height:1.85;overflow-wrap:anywhere}
.yc-md p{margin:0 0 14px}
.yc-md h2,.yc-md h3{font-family:inherit;letter-spacing:0;border:0;padding:0;margin:28px 0 12px;line-height:1.5}
.yc-md h2{font-size:20px}.yc-md h3{font-size:18px}
.yc-md ul,.yc-md ol{margin:12px 0 20px;padding-left:24px}
.yc-md li{margin:6px 0}
.yc-md blockquote{margin:18px 0;padding:8px 16px;border-left:1px solid var(--line-strong);background:none;color:var(--ink2)}
.yc-md blockquote p:last-child{margin:0}
.yc-md .yc-table-scroll{max-width:100%;overflow-x:auto;margin:18px 0;border:1px solid var(--line);border-radius:10px}
.yc-md table{margin:0;min-width:100%;width:max-content;max-width:none;border:0;font-size:14px}
.yc-md th,.yc-md td{max-width:320px;min-width:100px;padding:10px 14px;white-space:normal}
.yc-md .md-code{margin:18px 0;min-width:0}
.yc-md pre{max-width:100%;overflow-x:auto;padding:16px;font-size:13px;line-height:1.7;white-space:pre;overflow-wrap:normal}
.yc-md>:first-child{margin-top:0}
.yc-thinking{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:13px;min-height:28px}
.yc-dots{display:inline-flex;gap:4px}
.yc-dots i{width:6px;height:6px;border-radius:50%;background:var(--accent);opacity:.4;animation:yuDots 1.2s ease-in-out infinite}
.yc-dots i:nth-child(2){animation-delay:.15s}
.yc-dots i:nth-child(3){animation-delay:.3s}
@keyframes yuDots{0%,60%,100%{transform:none;opacity:.35}30%{transform:translateY(-4px);opacity:1}}
.yc-acts{display:flex;gap:2px;margin-top:10px;opacity:.65;transition:opacity .15s}
.yc-msg:hover .yc-acts,.yc-acts:focus-within{opacity:1}
@media (hover:none){.yc-acts{opacity:1}}
.yc-act{display:inline-flex;align-items:center;gap:5px;padding:5px 9px;border:0;border-radius:8px;background:none;color:var(--muted);font-size:12px;font-family:inherit;cursor:pointer;transition:background .12s,color .12s}
.yc-act:hover{background:var(--card2);color:var(--accent2)}
.yc-act .ic{width:13px;height:13px}
.yc-stopped-tag{margin-top:8px;display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--warn-strong);font-size:12px}

/* —— 空状态欢迎页 —— */
.yc-scroll:has(.yc-welcome){display:flex;align-items:center}
.yc-welcome{width:100%;padding:24px 8px 40px;display:flex;flex-direction:column;align-items:center;text-align:center}
.yc-welcome-avatar{width:52px;height:52px;border-radius:50%;object-fit:cover;border:0;box-shadow:none}
.yc-welcome h2{margin:16px 0 8px;font-size:26px;letter-spacing:0;color:var(--ink)}
.yc-welcome-sub{font-size:14px;color:var(--muted);margin:0 0 24px;line-height:1.7}
.yc-suggest{display:flex;justify-content:center;flex-wrap:wrap;gap:8px;width:100%;max-width:560px}
.yc-suggest-card{display:flex;align-items:center;gap:8px;padding:9px 12px;border:1px solid var(--line-soft);border-radius:10px;background:transparent;font-family:inherit;text-align:left;cursor:pointer;transition:border-color .15s,background .15s}
.yc-suggest-card:hover{border-color:var(--line-strong);background:var(--card)}
.yc-suggest-card:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}
.yc-suggest-ic{display:grid;place-items:center;width:18px;height:18px;flex:none;color:var(--muted)}
.yc-suggest-ic .ic{width:16px;height:16px}
.yc-suggest-tx{min-width:0;display:flex;flex-direction:column;gap:2px}
.yc-suggest-tx b{font-size:13px;color:var(--ink)}
.yc-suggest-tx small{font-size:12px;color:var(--muted);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

/* —— 回到底部 —— */
.yc-jump{position:absolute;left:50%;bottom:calc(100% + 8px);transform:translateX(-50%);z-index:6;display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border:1px solid var(--line);border-radius:999px;background:var(--card);color:var(--ink2);font-size:12px;font-family:inherit;box-shadow:none;cursor:pointer;transition:color .12s,border-color .12s}
.yc-jump:hover{color:var(--accent2);border-color:var(--line-strong)}
.yc-jump .ic{width:14px;height:14px}

/* —— 错误 / 停止临时行（不写入历史） —— */
.yc-transient{display:flex;align-items:center;gap:10px;padding:10px 14px;margin-bottom:22px;border:1px solid var(--warn-border);background:var(--warn-bg);border-radius:12px;color:var(--warn-strong);font-size:13px}
.yc-transient-ic{display:grid;place-items:center;flex:none}
.yc-transient-ic .ic{width:15px;height:15px}
.yc-transient-tx{flex:1;min-width:0;line-height:1.6;word-break:break-word}
.yc-transient .yc-act.retry{flex:none;border:1px solid var(--warn-border);border-radius:999px;background:var(--card);color:var(--warn-strong);padding:5px 12px}
.yc-transient .yc-act.retry:hover{border-color:var(--warn-strong)}

/* —— 输入区（视觉焦点） —— */
.yc-composer{position:relative;flex:none;width:100%;max-width:calc(var(--yc-reading-width) + 48px);margin:0 auto;padding:8px 24px calc(12px + env(safe-area-inset-bottom))}
/* ---------- 对话提问导航（Conversation Outline，20260916 悬浮化） ----------
   桌面默认收起为右缘短横线轨（rail），悬停/聚焦/点击向左展开问题浮层；
   浮层绝对定位不占布局列——正文使用全部宽度。#yuyouMsgs 仍是唯一滚动容器，
   跳转、当前项判定、会话生命周期等数据逻辑与 20260915 版保持一致。 */
.yc-outline{position:absolute;right:6px;top:50%;transform:translateY(-50%);z-index:34;max-height:min(600px,80%);display:flex;align-items:center;pointer-events:none}
.yc-outline.is-hidden{display:none}
/* 收起态：短横线轨。整体是可聚焦入口（button），横线为纯展示；热区远大于细线本身。 */
.yc-outline-rail{pointer-events:auto;flex:none;display:flex;flex-direction:column;justify-content:center;align-items:stretch;width:36px;max-height:min(560px,72vh);padding:8px 0;border:0;border-radius:11px;background:transparent;cursor:pointer;overflow-y:auto;scrollbar-width:none}
.yc-outline-rail::-webkit-scrollbar{display:none}
.yc-outline-rail:hover{background:color-mix(in srgb,var(--card2) 76%,transparent)}
.yc-outline-rail:focus-visible{outline:var(--focus-ring);outline-offset:2px}
.yc-rail-slot{display:grid;place-items:center;width:100%;height:clamp(9px,calc(52vh / var(--rail-n,1)),15px);flex:none}
.yc-outline-rail.is-overflow .yc-rail-slot{height:9px}
.yc-rail-line{display:block;width:14px;height:2px;border-radius:2px;background:color-mix(in srgb,var(--ink3) 50%,transparent);transition:width .15s ease,background .15s ease}
.yc-rail-slot.is-active .yc-rail-line{width:19px;height:3px;background:var(--accent)}
/* 展开态：问题浮层，自横线列向左展开并与横线轨几何连续（右缘重叠 4px，无关闭空隙）。 */
.yc-outline-pop{pointer-events:auto;position:absolute;right:38px;top:50%;width:272px;max-height:min(560px,78%);display:flex;flex-direction:column;background:var(--card);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow-pop);opacity:0;visibility:hidden;transform:translateY(-50%) translateX(8px);transition:opacity .15s ease,transform .15s ease,visibility 0s linear .15s}
.yc-outline.is-expanded .yc-outline-pop{opacity:1;visibility:visible;transform:translateY(-50%);transition:opacity .15s ease,transform .15s ease}
.yc-outline-head{flex:none;display:flex;align-items:center;gap:6px;padding:10px 8px 6px 12px}
.yc-outline-label{font-size:12px;color:var(--muted);letter-spacing:.06em}
.yc-outline-count{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.yc-outline-close{display:none;margin-left:auto}
.yc-outline-list{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable;padding:2px 6px 10px;display:flex;flex-direction:column;gap:2px}
.yc-outline-empty{padding:14px 12px;font-size:12px;color:var(--muted);line-height:1.7}
.yc-outline-item{display:flex;gap:8px;align-items:center;width:100%;text-align:left;padding:7px 9px;border:0;border-radius:9px;background:none;color:var(--ink2);font-family:inherit;font-size:13px;line-height:1.5;cursor:pointer;transition:background .12s,color .12s}
.yc-outline-item:hover{background:var(--card2)}
.yc-outline-item:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}
.yc-outline-item[aria-current="true"]{background:var(--accent-soft);color:var(--ink);font-weight:600}
.yc-outline-tx{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.yc-outline-dot{flex:none;width:12px;height:2px;border-radius:2px;background:color-mix(in srgb,var(--ink3) 42%,transparent)}
.yc-outline-item[aria-current="true"] .yc-outline-dot{width:16px;height:3px;background:var(--accent)}
.yc-outline-toggle{width:auto;padding:0 10px;display:none;gap:6px;font-size:12px;white-space:nowrap}
.yc-outline-toggle.is-hidden{display:none!important}
/* 悬浮导航不占布局列：产物面板打开（桌面并排布局）时横线轨照常显示，两者互不叠压。
   仅产物面板进入窄屏浮层模式（<1280 覆盖正文）时轨道暂时被盖住，浮层关闭后自然露出。 */
.yc-outline-mask{position:fixed;inset:0;border:0;padding:0;margin:0;background:rgba(0,0,0,.32);z-index:81;display:none}
@media(max-width:768px){
  /* 移动端：不显示横线轨，沿用覆盖面板 + 顶栏入口按钮 */
  .yc-outline-rail{display:none}
  .yc-outline-toggle{display:inline-flex}
  .yc-outline{pointer-events:auto;position:fixed;right:0;top:var(--yuyou-viewport-top,0px);transform:translateX(100%);height:var(--yuyou-viewport-height,100dvh);width:min(280px,86vw);max-height:none;z-index:82;border-left:1px solid var(--line);box-shadow:-12px 0 32px rgba(0,0,0,.18);visibility:hidden;transition:transform .18s ease,visibility .18s ease}
  .yc-outline.is-open{transform:none;visibility:visible}
  /* 浮层容器在移动端恢复为面板内的普通流内容 */
  .yc-outline-pop{position:static;transform:none;width:auto;max-height:none;flex:1;min-height:0;border:0;border-radius:0;box-shadow:none;background:transparent;opacity:1;visibility:visible;transition:none}
  .yc-outline-close{display:grid}
  .yc-outline-mask{display:block}
  .yc-outline-mask[hidden]{display:none}
}
@media(prefers-reduced-motion:reduce){.yc-outline-pop,.yc-rail-line{transition:none}}

.yc-attach{display:flex;gap:8px;flex-wrap:nowrap;overflow-x:auto;max-height:92px;padding:12px 16px 0}
.yc-box{position:relative;border:1px solid var(--line-strong);border-radius:24px;background:var(--card);box-shadow:none;transition:border-color .15s,box-shadow .15s}
.yc-box:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 14%,transparent)}
.yc-box textarea{display:block;width:calc(100% - 40px);border:0;outline:none;resize:none;background:none;margin:16px 20px 8px;padding:0;font-size:16px;line-height:1.7;font-family:inherit;color:var(--ink);max-height:156px;min-height:56px;overflow-y:auto;border-radius:0;box-shadow:none}
.yc-box textarea:focus,.yc-box textarea:focus-visible{border:0;outline:none;box-shadow:none}
.yc-box textarea::placeholder{color:var(--muted)}
.yc-box-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 12px 12px}
.yc-box-left,.yc-box-right{display:flex;align-items:center;gap:8px;min-width:0}
.yc-box-left{flex:1}
.yc-capabilities{flex-shrink:0}
.yc-mode{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:999px;background:var(--accent-soft);color:var(--accent2);font-size:12px;min-width:0;max-width:280px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.yc-hint{font-size:12px;color:var(--muted);white-space:nowrap}
.yc-send{display:grid;place-items:center;width:40px;height:40px;flex:none;border:1px solid transparent;border-radius:50%;background:var(--accent);color:#fff;cursor:pointer;transition:background .15s,transform .15s,border-color .15s,color .15s}
.yc-send:hover:not(:disabled){background:var(--accent2);transform:translateY(-1px)}
.yc-send:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}
.yc-send:disabled{background:var(--card2);color:var(--ink-disabled);border-color:var(--line);cursor:default}
.yc-send .ic{width:17px;height:17px}
.yc-send.stop{background:var(--card);color:var(--ink2);border-color:var(--line-strong)}
.yc-send.stop:hover{border-color:var(--ink2);color:var(--ink)}
.yc-under{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 4px 0;min-height:24px}
.yc-status:empty{display:none}
.yc-under:has(.yc-status:not(:empty)) .yc-hint{display:none}
.yc-status{font-size:12px;color:var(--warn-strong)}
.yc-disclaimer{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* —— 附件胶囊（沿用旧 .yu-attach 视觉，尺寸微调） —— */
.yu-attach{display:inline-flex;align-items:center;gap:6px;background:var(--card);border:1px solid var(--border);border-radius:10px;padding:5px 8px;font-size:12px;color:var(--ink2);max-width:220px;flex-shrink:0}
.yu-attach img{width:32px;height:32px;object-fit:cover;border-radius:8px;flex:none}
.yu-attach .yu-attach-doc{display:grid;place-items:center;width:32px;height:32px;border-radius:8px;background:var(--accent-soft);color:var(--accent2);flex:none}
.yu-attach .yu-attach-doc .ic{width:15px;height:15px}
.yu-attach .ya-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.yu-attach .ya-x{color:var(--muted);font-size:14px;padding:0 2px;flex:none}
.yu-attach .ya-x:hover{color:var(--danger)}

/* —— 柚柚右侧文件与产物（独立本机资产，不覆盖对话列） —— */
.yc-artifacts-toggle{width:auto;padding:0 10px;display:flex;gap:6px;font-size:12px;white-space:nowrap}
.yc-artifacts{width:340px;flex:none;min-width:0;min-height:0;display:flex;flex-direction:column;border-left:1px solid var(--line);background:var(--card)}
.ya-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:16px 14px 12px;flex:none}
.ya-head h2{font-size:15px;margin:0;color:var(--ink)}
.ya-head p{font-size:12px;margin:5px 0 0;color:var(--muted)}
.ya-tabs{display:flex;gap:4px;padding:0 12px 10px;border-bottom:1px solid var(--line-soft);flex:none}
.ya-tabs button{flex:1;min-height:36px;border:0;border-radius:10px;background:none;color:var(--muted);font:inherit;font-size:13px}
.ya-tabs button[aria-selected="true"]{background:var(--accent-soft);color:var(--accent2);font-weight:600}
.ya-tabs button:focus-visible,.ya-item:focus-visible{outline:var(--focus-ring);outline-offset:-3px}
.ya-notice{font-size:12px;line-height:1.6;padding:10px 14px;color:var(--ink2);background:var(--card2);overflow-wrap:anywhere;flex:none}
.ya-notice:empty{display:none}.ya-notice.is-error{color:var(--danger);background:var(--bad-bg)}
.ya-body{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}
.ya-list{max-height:26%;flex:none;overflow-y:auto;border-bottom:1px solid var(--line-soft);padding:6px 8px;overscroll-behavior:contain}
.ya-item{display:flex;align-items:center;gap:10px;width:100%;padding:10px 8px;text-align:left;border:0;border-radius:10px;background:none;color:var(--ink2)}
.ya-item:hover{background:var(--card2)}.ya-item.active{background:var(--accent-soft);color:var(--accent2)}
.ya-item>span:first-child{flex:none;display:flex}.ya-item-text{min-width:0;flex:1}
.ya-item b{display:block;font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ya-item small{display:block;font-size:11px;margin-top:4px;color:var(--muted)}
.ya-empty-list{font-size:12px;color:var(--muted);margin:12px 6px}
.ya-preview{display:flex;flex-direction:column;flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:16px 14px;gap:12px}
.ya-preview-title h3{margin:0;font-size:14px;overflow-wrap:anywhere;font-weight:600}.ya-preview-title p{font-size:11px;margin:5px 0 0;color:var(--muted)}
.ya-document{flex:1;min-height:90px;overflow:auto;overscroll-behavior:contain}
.ya-document .yc-md{font-size:14px;line-height:1.8}.ya-document .yc-md h2{font-size:18px}.ya-document .yc-md h3{font-size:16px}
.ya-note{font-size:12px;line-height:1.6;color:var(--muted);margin:0 0 12px}
.ya-plain,.ya-slide pre{font:inherit;font-size:13px;white-space:pre-wrap;overflow-wrap:anywhere;margin:0;color:var(--ink2);line-height:1.8}
.ya-slide{border-bottom:1px solid var(--line-soft);padding:12px 0}.ya-slide h3{font-size:12px;color:var(--muted);margin:0 0 6px;font-weight:500}
.ya-image{display:block;max-width:100%;height:auto;object-fit:contain;margin:0 auto}
.ya-actions{display:flex;flex-wrap:wrap;gap:6px;flex:none;padding-top:10px;border-top:1px solid var(--line-soft)}
.ya-actions .btn{font-size:12px;min-height:34px;padding:6px 10px}.ya-actions [data-ya="remove"]{color:var(--muted)}
.ya-placeholder{margin:auto 0;padding:24px 6px;text-align:center;color:var(--muted);font-size:13px;line-height:1.8}
.ya-placeholder>span{display:inline-flex;color:var(--ink3)}.ya-placeholder h3{color:var(--ink2);font-size:14px;margin:12px 0 8px}
.ya-placeholder p{margin:0 0 16px}
.ya-foot{flex:none;padding:12px 14px;border-top:1px solid var(--line-soft);font-size:11px;line-height:1.6;color:var(--muted)}
.ya-foot a{display:inline-block;margin-top:6px;color:var(--accent2)}
.ya-edit-head{display:grid;gap:6px}.ya-edit-head label,.ya-editor-label{font-size:12px;color:var(--ink2)}
.ya-edit-head input{width:100%;min-width:0;font-size:14px;border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:var(--card);color:var(--ink)}
.ya-editor{width:100%;min-height:140px;flex:1;resize:vertical;box-sizing:border-box;font:inherit;font-size:14px;line-height:1.8;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--bg);color:var(--ink)}
.ya-mask{display:none}
@media(min-width:1280px) and (max-width:1439px){.yc-artifacts{width:300px}.yc-top-title{max-width:120px}.yc-artifacts-toggle span{display:none}.yc-hint{display:none}}
@media(max-width:1279px){
  .yc-artifacts{position:fixed;right:0;top:var(--yuyou-viewport-top,0px);height:var(--yuyou-viewport-height,100dvh);width:min(440px,100vw);z-index:var(--z-drawer);border-left:1px solid var(--line)}
  .ya-mask{display:block;position:fixed;inset:0;border:0;border-radius:0;background:rgba(0,0,0,.28);z-index:calc(var(--z-drawer) - 1);padding:0}
  body.yuyou-route:has(.artifacts-open) .sync-status-badge{visibility:hidden}
  .ya-head{padding-top:calc(14px + env(safe-area-inset-top))}.ya-foot{padding-bottom:calc(12px + env(safe-area-inset-bottom))}
}
@media(max-width:768px){
  .yc-artifacts-toggle{width:44px;padding:0;justify-content:center}.yc-artifacts-toggle span{display:none}
  .yc-top:has(.yc-artifacts-toggle) .yc-top-heading{padding-right:18px}
  body.yuyou-route:has(.yc-artifacts-toggle) .sync-status-badge{right:110px;max-width:16px}
  body.yuyou-route:has(.yc-artifacts-toggle) .sync-status-badge button{padding:3px;min-height:44px}
  body.yuyou-route:has(.yc-artifacts-toggle) #syncStatusLabel{display:none}
  body.yuyou-route:has(.yc-artifacts-toggle) .sync-status-dot{display:block}
  .ya-tabs button,.ya-actions .btn{min-height:44px}.ya-edit-head input,.ya-editor{font-size:16px}
  .ya-preview{padding:12px;gap:8px}.ya-notice{max-height:76px;overflow:auto}.ya-list{max-height:22%}
}

/* —— 移动端：会话栏抽屉化，聊天区高度跟随 visualViewport —— */
@media (max-width:768px){
  .yuyou-fab{right:14px;bottom:84px;width:52px;height:52px}
  body.yuyou-route .shell-content>.main{overflow:hidden}
  body.yuyou-route .m-bottom{display:none}
  .yuyou-route .main{padding-bottom:0}
  .yuyou-route .main-in{height:auto;overflow:visible}
  .yuyou-route .view[data-view="yuyou"]{display:block;height:auto}
  .yc-shell{position:fixed;top:var(--yuyou-viewport-top,0px);left:0;width:100%;height:var(--yuyou-viewport-height,100dvh);flex-direction:column}
  .yc-side{position:fixed;top:0;bottom:0;left:0;width:min(300px,84vw);z-index:var(--z-drawer);transform:translateX(-105%);visibility:hidden;pointer-events:none;transition:transform .2s var(--ease-ui),visibility 0s linear .2s;box-shadow:var(--shadow-pop);padding-top:calc(14px + env(safe-area-inset-top))}
  .yc-shell.side-open .yc-side{transform:none;visibility:visible;pointer-events:auto;transition:transform .2s var(--ease-ui),visibility 0s}
  .yc-side-mask{position:fixed;inset:0;z-index:calc(var(--z-drawer) - 1);background:rgba(40,35,30,.42);opacity:0;pointer-events:none;transition:opacity .18s}
  .yc-shell.side-open .yc-side-mask{opacity:1;pointer-events:auto}
  .yc-d-only{display:none}
  .yc-m-only{display:grid}
  .yc-top-heading{padding-right:100px}
  .yc-top-title{display:none}
  .yc-brand{font-size:13px}
  body.yuyou-route .sync-status-badge{left:auto;right:60px;top:calc(var(--yuyou-viewport-top,0px) + 6px);bottom:auto;max-width:100px;border:0;background:none;box-shadow:none;backdrop-filter:none}
  body.yuyou-route .sync-status-badge button{padding:6px;font-size:11px}
  body.yuyou-route:has(.yc-shell.side-open) .sync-status-badge{visibility:hidden}
  .yc-scroll{padding:20px 16px 8px;scrollbar-gutter:auto}
  .yc-msg.user .yc-bubble{max-width:86%}
  .yc-welcome{padding:20px 0}
  .yc-welcome h2{font-size:24px}
  .yc-msg{gap:8px;margin-bottom:26px}
  .yc-msg .ym-avatar{width:24px;height:24px}
  .yc-md{font-size:16px}
  .yc-composer{padding:6px 12px calc(8px + env(safe-area-inset-bottom))}
  .yc-box textarea{width:calc(100% - 32px);margin:14px 16px 6px;min-height:52px;max-height:min(156px,30dvh);padding:0}
  .yc-icon-btn,.yc-send{width:44px;height:44px}
  .yc-mode{max-width:140px;padding:4px 8px}
  .yc-capabilities summary{min-height:44px}
  .yc-sess-del{opacity:1;width:36px;height:36px}
  .yc-act{min-height:44px}
  .yc-capability-pop{max-height:45dvh;overflow-y:auto}
  .yc-hint{display:none}
  .yc-disclaimer{font-size:11px}
  .yc-under:has(.yc-status:not(:empty)) .yc-disclaimer{display:none}
  .yc-under{justify-content:center}
  .yc-side{top:var(--yuyou-viewport-top,0px);bottom:auto;height:var(--yuyou-viewport-height,100dvh)}
}
@media (min-width:769px){.yc-side-mask{display:none}}

/* —— 打印：聊天壳不参与打印 —— */
@media print{.yc-side,.yc-top,.yc-composer,.yc-jump,.yc-side-mask{display:none !important}.yuyou-route .main-in{height:auto}.yuyou-route .view[data-view="yuyou"]{display:block}}

/* —— 减少动效 —— */
@media (prefers-reduced-motion:reduce){
  .yc-dots i{animation:none;opacity:.7}
  .yc-side,.yc-suggest-card,.yc-send,.yc-icon-btn .ic{transition:none}
}


/* 打印（20260912c 按 HANDOFF A1 合并：全站唯一生效 print 块；SPA 只打印活动视图） */
@media print{
  @page{size:A4;margin:14mm 12mm}
  body{background:#fff !important}
  .sidebar,.m-topbar,.m-bottom,.app-topbar,.mobile-nav-drawer,.yuyou-fab,.side-foot,.side-nav,.class-switcher,.auth-screen,.toast,.no-print{display:none !important}
  .app{display:block;height:auto}
  .main{overflow:visible}
  .main-in{padding:0;max-width:none}
  .view{display:none !important}
  .view.active{display:block !important}
  .view.active .card,.view.active .zw-card,.view.active .home-list-item{break-inside:avoid}
  .view.active table{width:100%;border-collapse:collapse}
  .view.active thead{display:table-header-group}
  .card{box-shadow:none;border-color:#ccc;background:#fff}
  *,*::before,*::after{box-shadow:none !important;text-shadow:none !important}
}
@media (max-width:768px){
  .app{display:block;height:auto;overflow:visible}
  .sidebar{display:none}
  .m-topbar{display:flex}
  .m-bottom{display:block}
  .main{overflow:visible;padding-bottom:70px}
  .main-in{padding:18px 14px 30px}.prep-grid{grid-template-columns:1fr}
  .layers{grid-template-columns:repeat(2,1fr)}
  .home-clock{font-size:20px}
  .page-head h1{font-size:20px}
  .prep-params{grid-template-columns:1fr}
  .res-btns a{width:100%;justify-content:flex-start}
}
.picker-stage{margin-top:14px;min-height:88px;background:var(--card2);border:1px dashed var(--border);border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:14px;color:var(--ink3);font-size:13px;letter-spacing:.15em;text-align:center}
.picker-stage .pick-who{font-size:28px;font-weight:700;color:var(--accent2);letter-spacing:.1em;font-family:'Noto Serif SC','Songti SC','SimSun',serif;line-height:1.3}
.picker-stage .pick-sub{font-size:12px;color:var(--ink3)}
.picker-stage .pick-roll{opacity:.55}
.picker-stage .pick-final{animation:pickPop .35s ease}
@keyframes pickPop{0%{transform:scale(.6);opacity:0}100%{transform:scale(1);opacity:1}}
.search-hit{display:block;width:100%;text-align:left;background:var(--card2);border:1px solid var(--border);border-radius:10px;padding:9px 12px;margin-bottom:8px;transition:border-color .15s}
.search-hit:hover{border-color:var(--accent)}
.sh-k{font-size:12px;color:var(--accent2);letter-spacing:.1em;margin-bottom:2px}
.sh-t{font-size:14px;color:var(--ink);font-weight:600}
.sh-c{font-size:12px;color:var(--ink3);margin-top:2px;line-height:1.6;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.chip{display:inline-flex;align-items:center;gap:8px;background:var(--card2);border:1px solid var(--border);border-radius:999px;padding:5px 12px;font-size:13px;margin:0 8px 8px 0}
.chip button{min-width:24px;min-height:24px;display:inline-flex;align-items:center;justify-content:center;border:none;background:none;color:var(--ink3);font-size:14px;line-height:1;cursor:pointer;padding:0}
.chip button:hover{color:var(--danger)}
/* 作文素材 */
.zw-grid{display:grid;gap:16px}
@media (min-width:920px){.zw-grid{grid-template-columns:1fr 1fr}}
.zw-card{position:relative;background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:18px 20px 20px;box-shadow:var(--shadow)}
.zw-card.is-target{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft),0 16px 32px -18px var(--accent2)}
.zw-fav:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
.zw-card h4{font-size:16px;display:flex;align-items:baseline;gap:8px;margin-bottom:12px;letter-spacing:.05em;padding-right:26px}
.zw-card h4 .tno{font-size:12px;color:var(--accent2);letter-spacing:.1em;font-weight:400}
.zw-fav{min-width:24px;min-height:24px;position:absolute;top:12px;right:14px;font-size:20px;color:var(--ink3);background:none;border:none;cursor:pointer;line-height:1;padding:2px}
.zw-fav.on{color:#d8a24a}
.zw-card.is-target{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft),0 16px 32px -18px var(--accent2)}
.zw-fav:focus-visible{outline:3px solid var(--accent);outline-offset:2px}
.zw-quote{font-size:13px;line-height:1.85;color:var(--ink2);padding:7px 12px;background:var(--card2);border-left:3px solid var(--accent);border-radius:8px;margin-bottom:8px}
.zw-quote .zw-src{display:block;font-size:12px;color:var(--ink3);text-align:right;margin-top:2px}
.zw-figure{font-size:13px;color:var(--ink2);padding:4px 2px;line-height:1.8}
.zw-figure b{color:var(--accent2)}
.composition-review-card{margin-bottom:16px}.comp-uncertain{display:block;margin-top:5px;color:var(--danger);font-size:12px;line-height:1.5}.comp-review-card input[type=checkbox]{margin-right:6px}.comp-review-card label+label{margin-left:14px}.zw-material-head{margin:2px 0 12px}.comp-dashboard{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin-top:8px}.comp-metric{min-height:72px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}.comp-metric b{display:block;color:var(--accent2);font-size:20px;line-height:1.1}.comp-metric span{display:block;margin-top:5px;color:var(--ink2);font-size:12px;line-height:1.45}.comp-review-list{display:grid;gap:8px;margin-top:12px}.comp-review-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:start;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}.comp-review-main b{display:block;color:var(--ink);font-size:13px}.comp-review-main span{display:block;margin-top:3px;color:var(--ink3);font-size:12px;line-height:1.55}.comp-review-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.comp-chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}.comp-chip{display:inline-flex;align-items:center;min-height:24px;padding:2px 8px;border:1px solid var(--border);border-radius:999px;background:var(--card);color:var(--ink2);font-size:12px}.comp-chip.warn{border-color:color-mix(in srgb,var(--danger) 32%,var(--border));color:var(--danger);background:color-mix(in srgb,var(--danger) 6%,var(--card))}.comp-rubric-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.comp-compare-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}@media(max-width:640px){.comp-review-row,.comp-rubric-grid,.comp-compare-grid{grid-template-columns:1fr}.comp-review-actions{justify-content:flex-start}}
/* 文学常识翻卡 */
.wx-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(215px,1fr))}
.wx-flip{perspective:1000px;height:132px;cursor:pointer}
.wx-flip-in{position:relative;width:100%;height:100%;transition:transform .45s;transform-style:preserve-3d}
.wx-flip.flipped .wx-flip-in{transform:rotateY(180deg)}
.wx-face{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:14px;border-radius:16px;border:1px solid var(--border);background:var(--card);box-shadow:var(--shadow)}
.wx-front{font-size:14px;font-weight:600;color:var(--ink);letter-spacing:.03em;line-height:1.8}
.wx-front .wx-hint{font-size:12px;color:var(--ink3);font-weight:400;margin-top:8px;letter-spacing:.15em}
.wx-back{transform:rotateY(180deg);background:var(--accent-soft);border-color:var(--accent)}
.wx-back .wx-a{font-size:13px;line-height:1.8;color:var(--ink)}
.wx-done{opacity:.55}
.wx-master{margin-top:10px;border:1px solid var(--accent);background:var(--card);color:var(--accent2);border-radius:999px;padding:3px 12px;font-size:12px;cursor:pointer}
.wx-master.on{background:var(--accent);color:#fff}
.wx-meta{font-size:12px;color:var(--ink3);margin-top:4px}
.content-maint-row{display:flex;align-items:center;gap:8px;justify-content:space-between;padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:var(--card2)}
.content-maint-row .cm-info{display:flex;flex-direction:column;gap:4px;font-size:13px}
.content-maint-row .cm-info span{font-size:12px;color:var(--ink3)}
/* 成语语用 */
.yy-idiom-grid{display:grid;gap:8px}
@media (min-width:760px){.yy-idiom-grid{grid-template-columns:1fr 1fr}}
.yy-idiom{display:flex;flex-direction:column;gap:4px;background:var(--card2);border:1px solid var(--border);border-radius:10px;padding:11px 13px;font-size:13px;color:var(--ink2);line-height:1.7}
.yy-idiom .yy-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.yy-idiom .yy-w{font-size:14px;font-weight:700;color:var(--accent2);letter-spacing:.06em}
.yy-idiom .yy-tag{font-size:12px;color:var(--accent2);border:1px solid var(--accent);border-radius:999px;padding:0 7px;background:var(--card);white-space:nowrap}
.yy-err{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;background:var(--card2);border:1px solid var(--border);border-radius:10px;padding:10px 13px;margin-bottom:8px;font-size:13px}
.yy-err .bad{color:var(--danger);text-decoration:line-through;opacity:.85}
.yy-err .arrow{color:var(--ink3);font-size:12px}
.yy-err .good{color:var(--accent2);font-weight:600}
.yy-err .note{flex-basis:100%;font-size:12px;color:var(--ink3)}

/* ---------- 首页 Dashboard 卡片体系（DashboardCardShell） ----------
   统一外壳承载三档卡片：--primary（今日概览/本周课务）、--feature（今日课表/我的代课/
   可听课程/待办事项）、--support（今日运势）。复用全局 token，不重写 .card。 */
.dash-card{background:var(--card);border:1px solid var(--border);border-radius:16px;box-shadow:var(--shadow);padding:18px 20px;margin-bottom:16px;min-width:0}
.dash-card>.card-head{margin-bottom:14px}
.dash-card--support{padding:13px 16px}
.dash-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:stretch;margin-bottom:16px}
.dash-row>.dash-card{margin-bottom:0;display:flex;flex-direction:column}
.dash-row>.dash-card>.card-head{flex:none}
.dash-row>.dash-card>:last-child:not(.card-head){flex:1 0 auto}
/* 同排卡片操作区贴底对齐：头部定高、内容自然生长。 */
.dash-card__foot{margin-top:auto;padding-top:12px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.home-sched-card{margin-bottom:16px}
.home-todo-card{margin-bottom:16px}

/* ---------- 单人工作台整改：任务总览 / 课题工作区 ---------- */
.home-task-grid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:16px;align-items:stretch}
.home-task-grid>.card{margin-bottom:0;height:100%}
.quick-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.quick-action{display:flex;align-items:center;gap:8px;min-height:58px;padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:var(--card2);color:var(--ink);text-align:left;cursor:pointer;transition:background-color .16s,border-color .16s,transform .16s}
.quick-action:hover{border-color:var(--accent);background:var(--accent-soft);transform:translateY(-1px)}
.quick-action .qa-ic{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;flex:none;color:var(--accent2)}.quick-action .qa-ic svg{display:block;width:20px;height:20px}.quick-action b{display:block;font-size:13px}.quick-action span{display:block;margin-top:2px;font-size:12px;color:var(--ink3);line-height:1.4}
.qa-empty{padding:4px 2px;color:var(--ink3);font-size:13px;line-height:1.7}
.qa-manage-list{display:flex;flex-direction:column;gap:8px;max-height:46vh;overflow:auto}
.qa-manage-row{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}
.qa-manage-row .qa-ic{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;flex:none;color:var(--accent2)}.qa-manage-row .qa-ic svg{display:block;width:18px;height:18px}
.qa-manage-row .qmr-main{flex:1;min-width:0}
.qa-manage-row .qmr-title{display:block;font-size:13px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qa-manage-row .qmr-desc{display:block;margin-top:2px;font-size:12px;color:var(--ink3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qa-manage-row .qmr-ops{display:flex;gap:4px;flex:none}
.qa-manage-row .qmr-ops .pill[disabled]{opacity:.38;cursor:not-allowed}
.qa-manage-candidate{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;padding-top:12px;border-top:1px dashed var(--line)}
.qa-chip{display:inline-flex;align-items:center;gap:4px;min-height:32px;padding:0 10px;border:1px dashed var(--border);border-radius:999px;background:var(--card2);color:var(--ink2);font-size:13px;cursor:pointer}
.qa-chip:hover{border-color:var(--accent);color:var(--accent2);background:var(--accent-soft)}
.home-list{display:flex;flex-direction:column;gap:8px}.home-list-item{display:flex;align-items:center;gap:8px;min-width:0;padding:8px 9px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}
.home-list-item .hli-main{flex:1;min-width:0}.home-list-item .hli-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;color:var(--ink)}
.home-list-item .hli-meta{display:block;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:var(--ink3)}
.home-list-item .hli-action{flex:none}.home-list-empty{padding:10px 2px;color:var(--ink3);font-size:13px;line-height:1.7}
.home-empty-cta{display:grid;justify-items:center;gap:10px;padding:14px 0 4px;text-align:center}
.home-empty-cta .home-list-empty{padding:0}
.workspace-toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px}.workspace-toolbar .input{min-width:180px;flex:1}
.workspace-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.workspace-card{position:relative;padding:16px;border:1px solid var(--border);border-radius:10px;background:var(--card2);transition:border-color .16s,background-color .16s}
.workspace-card:hover{border-color:var(--accent);background:var(--accent-soft)}
.workspace-card .wc-head{display:flex;align-items:flex-start;gap:8px}.workspace-card .wc-title{flex:1;min-width:0;font-size:14px;font-weight:700;color:var(--ink);line-height:1.45}.workspace-card .wc-star{flex:none}
.workspace-card .wc-meta{margin-top:7px;color:var(--ink3);font-size:12px;line-height:1.7}.workspace-card .wc-status{display:inline-flex;align-items:center;gap:4px;margin-top:10px;padding:3px 8px;border-radius:999px;background:var(--card);font-size:12px;color:var(--accent2)}
.workspace-card .wc-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:13px}.workspace-detail{margin-top:16px;border-top:1px dashed var(--line);padding-top:16px}.workspace-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.workspace-detail-grid .full{grid-column:1/-1}
.workspace-source-summary{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 13px;padding:11px 12px;border:1px dashed var(--border);border-radius:10px;background:color-mix(in srgb,var(--accent-soft) 44%,var(--card2));color:var(--ink2);font-size:12px;line-height:1.6}.workspace-source-summary b{display:block;color:var(--ink);font-size:13px}.workspace-source-summary span{display:block;color:var(--ink3);font-size:12px}.workspace-import-tools{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:8px 0 12px}.workspace-import-tools .input{flex:1;min-width:180px}.workspace-import-list{display:grid;gap:8px;max-height:52vh;overflow:auto;padding-right:2px}.workspace-import-card{display:flex;align-items:flex-start;gap:8px;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card2);cursor:pointer;transition:border-color .15s,background .15s}.workspace-import-card:hover{border-color:var(--accent);background:var(--accent-soft)}.workspace-import-card.is-selected{border-color:var(--accent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 65%,transparent)}.workspace-import-card input{margin-top:4px;accent-color:var(--accent)}.workspace-import-main{flex:1;min-width:0}.workspace-import-head{display:flex;align-items:center;gap:8px;justify-content:space-between}.workspace-import-head b{font-size:13px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.workspace-import-head em{flex:none;font-style:normal;font-size:12px;color:var(--accent2);background:var(--accent-soft);border-radius:999px;padding:2px 7px}.workspace-import-main small,.workspace-import-main span{display:block;margin-top:3px;color:var(--ink3);font-size:12px;line-height:1.55}.workspace-import-main span{color:var(--ink2);white-space:pre-wrap;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.recent-list{display:flex;flex-direction:column;gap:8px}.recent-row{display:flex;align-items:center;gap:8px;padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:var(--card2)}.recent-row .rr-icon{font-size:20px;flex:none}.recent-row .rr-main{flex:1;min-width:0}.recent-row .rr-title{font-size:13px;color:var(--ink);display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.recent-row .rr-meta{font-size:12px;color:var(--ink3);display:block;margin-top:2px}
.material-filters{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:-2px 0 13px}.material-filters .pill{font-size:12px}.mat-item{display:flex;align-items:center;gap:8px}.mat-item .mat-star{flex:none}.mat-item .mat-t{flex:1;min-width:0}
@media(max-width:1050px){.home-task-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:768px){.home-task-grid{grid-template-columns:1fr}.quick-actions{grid-template-columns:repeat(2,minmax(0,1fr))}.workspace-detail-grid{grid-template-columns:1fr}.workspace-detail-grid .full{grid-column:auto}.workspace-toolbar .input{min-width:0;flex-basis:100%}}
@media(max-width:768px){.workplan-list{grid-template-columns:1fr}.wpr-grid{grid-template-columns:1fr 1fr}.workplan-review-row{align-items:flex-start}.workplan-review-row>.pill{flex:none}}
.workplan-home-card{margin-top:0}.workplan-source{font-size:12px;color:var(--ink3);margin-bottom:9px}.workplan-source a{color:var(--accent2)}.workplan-source .pill{margin-left:7px}.workplan-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.workplan-item{display:flex;align-items:center;gap:8px;min-width:0;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--card2);text-align:left;color:var(--ink);cursor:pointer}.workplan-item:hover{border-color:var(--accent);background:var(--accent-soft)}.workplan-date{font-size:12px;color:var(--accent2);font-weight:600;flex:none;min-width:62px}.workplan-main{display:flex;flex-direction:column;gap:4px;min-width:0;flex:1}.workplan-main b{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.workplan-main span,.workplan-main small{font-size:12px;color:var(--ink3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.workplan-type{font-size:12px;color:var(--accent2);border:1px solid var(--border);border-radius:999px;padding:2px 6px;flex:none}.workplan-more{font-size:12px;color:var(--ink3);padding-top:9px}.workplan-review-intro{font-size:13px;color:var(--ink2);line-height:1.7;margin:8px 0}.workplan-review-list{max-height:54vh;overflow:auto;display:flex;flex-direction:column;gap:8px}.workplan-review-row{display:flex;align-items:flex-start;gap:8px;padding:9px;background:var(--card2);border:1px solid var(--line);border-radius:10px}.workplan-review-no{font-size:12px;color:var(--accent2);padding-top:8px;min-width:18px}.workplan-review-fields{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}.wpr-grid{display:grid;grid-template-columns:1fr 1fr 1fr 90px;gap:6px}.wpr-grid .input,.workplan-review-fields>.input{min-width:0}.workplan-detail{display:flex;flex-direction:column;gap:8px;font-size:13px;line-height:1.6;color:var(--ink2);padding:10px 0}.workplan-detail b{color:var(--ink)}.workplan-online-summary{display:grid;gap:4px;margin:10px 0;padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:var(--card2);font-size:12px;color:var(--ink2);line-height:1.6}.workplan-online-summary b{color:var(--ink)}.workplan-online-summary label{display:flex;align-items:flex-start;gap:8px;margin-top:3px}.workplan-online-summary input{margin-top:3px;accent-color:var(--accent)}
.today-sched-head{font-size:12px;color:var(--accent2);letter-spacing:.12em;margin-top:10px;border-top:1px dashed var(--line);padding-top:9px}
/* 首页本周课表 */
.home-sched{overflow-x:auto;border:1px solid var(--border);border-radius:10px;background:var(--card2)}
.home-sched table{width:100%;border-collapse:collapse;font-size:12px;min-width:460px}
.home-sched th{font-size:12px;color:var(--ink3);padding:5px 4px;border-bottom:1px solid var(--line);font-weight:500;letter-spacing:.03em}
.home-sched th.today{color:var(--accent2);font-weight:600}
.home-sched td{padding:4px 5px;border-bottom:1px dashed var(--line);text-align:center;color:var(--ink2)}
.home-sched tr:last-child td{border-bottom:none}
.home-sched td.ptime{font-size:12px;color:var(--ink3);white-space:nowrap;text-align:left;padding-right:8px}
.home-sched td.today-col{background:var(--accent-soft)}
.home-sched td .c{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}
.home-sched td.has .c{background:var(--accent);color:#fff;border-radius:8px;padding:1px 7px;font-size:12px;max-width:80px}
@media (max-width:820px){.dash-row{grid-template-columns:minmax(0,1fr)}}
/* 教研 */
.jy-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start}
.jy-rec-item{display:flex;align-items:center;gap:12px;padding:11px 4px;border-bottom:1px dashed var(--line)}
.jy-rec-item:last-child{border-bottom:none}
.jy-rec-item .jr-t{flex:1;min-width:0}
.jy-rec-item .jr-t .t{font-size:14px;color:var(--ink)}
.jy-rec-item .jr-t .n{font-size:12px;color:var(--ink3)}
.jy-img-list{display:flex;gap:8px 14px;flex-wrap:wrap;margin-top:8px;padding-bottom:18px}
.jy-img-thumb{display:block;padding:0;border:0;background:none;cursor:zoom-in}
.jy-img-list img{width:72px;height:72px;object-fit:cover;border-radius:10px;border:1px solid var(--line)}
.doc-preview{white-space:pre-wrap;font-size:14px;color:var(--ink);line-height:2;background:var(--card2);border:1px solid var(--border);border-radius:10px;padding:16px 18px;margin-top:12px}
.rec-status{font-size:13px;color:var(--ink3);margin-top:6px}
.rec-status.live{color:var(--danger)}
/* 备课资源网站 */
.website-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;margin-top:6px}
.site-card{display:block;background:var(--card2);border:1px solid var(--border);border-radius:10px;padding:12px 14px;transition:border-color .15s,transform .15s}
.site-card:hover{border-color:var(--accent);transform:translateY(-1px)}
.site-card b{font-size:14px;color:var(--accent2);letter-spacing:.03em;display:block}
.site-card span{font-size:12px;color:var(--ink3);line-height:1.6;display:block;margin-top:3px}
.site-group{margin-bottom:14px}
.site-group-title{font-size:12px;color:var(--accent2);letter-spacing:.12em;margin-bottom:8px;font-weight:600}
.site-group .website-grid{margin-top:0}
.fav-list-head{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-bottom:10px;padding:8px 10px;border-radius:10px;background:var(--card2);font-size:12px;color:var(--ink3)}
.fav-card{padding:12px 4px;border-bottom:1px dashed var(--line)}
.fav-card:last-child{border-bottom:none;padding-bottom:2px}
.fav-card-head{display:flex;align-items:flex-start;gap:8px;justify-content:space-between}
.fav-card-head b{display:block;font-size:14px;color:var(--accent2);letter-spacing:.04em}
.fav-card-head span{display:block;margin-top:2px;font-size:12px;color:var(--ink3)}
.fav-remove{flex:none;color:var(--ink3);font-size:20px;line-height:1;padding:0 4px}
.fav-remove:hover{color:var(--danger)}
.fav-preview{margin-top:8px;padding:8px 10px;border-left:3px solid var(--accent);border-radius:8px;background:var(--card2);font-size:13px;line-height:1.75;color:var(--ink2)}
.fav-preview small{display:block;color:var(--ink3);font-size:12px;text-align:right}
.fav-figure{margin-top:7px;font-size:13px;line-height:1.75;color:var(--ink2);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.fav-figure b{color:var(--ink)}
.fav-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px}
@media (max-width:900px){.jy-layout{grid-template-columns:minmax(0,1fr)}}


.todo-item.overdue .tt{color:var(--danger);font-weight:600}
.todo-item.overdue .td-date{color:var(--danger)}

/* ===== 课文标注样式 ===== */
.ann-para{ line-height:2.1; font-size:16px; margin-bottom:4px; user-select:text; -webkit-user-select:text; }
mark.ann-hl{ background:transparent; padding:1px 2px; border:1px solid color-mix(in srgb,var(--accent) 62%,transparent); border-left:0; border-right:0; border-radius:3px; box-decoration-break:clone; -webkit-box-decoration-break:clone; } /* 20260913 拍板：弃荧光黄底改边框圈注，功能性可读且暗色自适应 */
b.ann-b{ color:var(--ink); font-weight:700; }
span.ann-note{ border-bottom:1.5px dashed var(--bad); cursor:help; position:relative; }
span.ann-note i.ann-note-pop{
  display:none; position:absolute; left:0; bottom:135%; white-space:normal;
  max-width:280px; min-width:120px; background:#2c2c2c; color:#fff; font-style:normal;
  font-size:13px; line-height:1.6; padding:8px 10px; border-radius:8px; z-index:var(--z-sticky); font-weight:400;
}
span.ann-note:hover i.ann-note-pop{ display:block; }
#annBar{ display:none; position:fixed; z-index:var(--z-sync); gap:4px; background:var(--control-bg);
  border:1px solid var(--line); box-shadow:0 4px 14px rgba(0,0,0,.12); border-radius:8px; padding:5px 6px; }
#annBar button{ border:none; background:transparent; cursor:pointer; font-size:13px; padding:4px 8px; border-radius:8px; color:var(--ink); white-space:nowrap; }
#annBar button:hover{ background:color-mix(in srgb,var(--accent2) 8%,var(--control-bg)); }
.ann-tools{ display:flex; gap:8px; margin:12px 0 4px; flex-wrap:wrap; }
.ann-tools button{ font-size:13px; }
.qn-lv{ display:inline-block; font-size:12px; padding:1px 6px; border-radius:8px; margin-right:4px; font-weight:600; }
.qn-lv.基础{ background:var(--ok-bg); color:var(--ok-strong); }
.qn-lv.进阶{ background:var(--warn-bg); color:var(--warn-strong); }
.qn-lv.拔高{ background:var(--bad-bg); color:var(--bad-strong); }
.wl-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px;justify-content:space-between;margin-bottom:4px}
.wl-table{margin-top:10px;border:1px solid var(--border);border-radius:10px;overflow:hidden}
.wl-row{display:flex;align-items:center;gap:8px;padding:7px 10px;border-bottom:1px dashed var(--line);font-size:13px;flex-wrap:wrap}
.wl-row:last-child{border-bottom:none}
.wl-row.done{opacity:.72}
.wl-row.done .wl-cell{text-decoration:line-through}
.wl-cell{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wl-sel{font-size:12px;padding:3px 6px;border-radius:8px;flex:none;max-width:110px}
.wl-summary{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px;padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:var(--card2);font-size:13px;color:var(--ink2)}
.wl-summary .wl-summary-main{font-weight:600;color:var(--accent2)}
.wl-summary .wl-summary-sub{color:var(--ink3)}
.wl-week-complete{display:flex;justify-content:center;margin:12px auto 0;padding:2px 8px;border:0;background:transparent;color:var(--ink);text-align:center;font-size:14px;font-weight:700;letter-spacing:.04em}
.wl-complete-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:12px}
.wl-complete-action{display:flex;align-items:center;gap:8px;min-height:58px;padding:11px 12px;border:1px solid var(--border);border-radius:16px;background:var(--card);color:var(--ink);text-align:left;box-shadow:0 10px 24px -22px rgba(61,63,67,.45);transition:background-color .16s,border-color .16s,box-shadow .16s,transform .16s}
.wl-complete-action:hover,.wl-complete-action:focus-visible{border-color:color-mix(in srgb,var(--accent2) 45%,var(--border));background:color-mix(in srgb,var(--card) 82%,var(--accent-soft));box-shadow:0 16px 28px -24px rgba(61,63,67,.62);transform:translateY(-1px);outline:none}
.wl-complete-action:active{transform:translateY(0);box-shadow:0 8px 18px -20px rgba(61,63,67,.55)}
.wl-action-ic{display:grid;place-items:center;width:34px;height:34px;flex:none;border-radius:10px;background:color-mix(in srgb,var(--accent-soft) 72%,var(--card));color:var(--accent2)}
.wl-action-ic svg{width:19px;height:19px;display:block;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.wl-action-text{display:flex;min-width:0;flex:1;flex-direction:column;gap:4px}
.wl-action-text b{font-size:13px;line-height:1.35;color:var(--ink)}
.wl-action-text small{font-size:12px;line-height:1.35;color:var(--ink3);white-space:normal}
.wl-completed-lessons{margin-top:12px;padding-top:12px;border-top:1px dashed var(--line)}
.wl-completed-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-bottom:8px;color:var(--ink3);font-size:12px}
.wl-completed-head b{color:var(--ink);font-size:13px}
.wl-completed-list{display:grid;gap:8px}
.wl-completed-row{display:grid;grid-template-columns:96px auto minmax(0,1fr) auto;align-items:center;gap:8px;padding:9px 10px;border:1px solid var(--line);border-radius:10px;background:var(--card2);font-size:13px}
.wl-completed-time{color:var(--ink3);font-size:12px;white-space:nowrap}
.wl-completed-main{min-width:0}
.wl-completed-main b{display:flex;align-items:center;gap:4px;min-width:0;color:var(--ink);font-size:13px;line-height:1.45}
.wl-completed-main b>span:last-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wl-completed-main small{display:block;margin-top:2px;color:var(--ink3);font-size:12px;line-height:1.45;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wl-completed-row-actions{display:flex;align-items:center;justify-content:flex-end;gap:6px;flex-wrap:wrap}
.weekly-history-row.with-action{grid-template-columns:130px minmax(120px,.8fr) auto auto}
.weekly-history-actions{display:flex;justify-content:flex-end;gap:6px;align-self:center}
.wl-progress{height:6px;flex:1 1 120px;min-width:90px;background:var(--card);border-radius:999px;overflow:hidden}
.wl-progress i{display:block;height:100%;background:var(--accent);border-radius:inherit}
.wl-type-summary{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:8px;font-size:12px;color:var(--ink3)}
.wl-type-summary-label{margin-right:2px}
.wl-stat-pill{font-size:12px;padding:4px 9px;color:var(--accent2);background:var(--card);border-color:var(--accent)}
.wl-stat-pill:hover{background:var(--accent-soft)}
.wl-hidden-list{display:grid;gap:8px}
.wl-hidden-item{display:flex;align-items:center;gap:8px;padding:9px 10px;border:1px solid var(--border);border-radius:10px;background:var(--card2)}
.wl-hidden-item .wh-day{width:42px;flex:none;color:var(--accent2);font-weight:600}
.wl-hidden-item .wh-period{width:52px;flex:none;color:var(--ink3);font-size:12px}
 .wl-hidden-item .wh-course{flex:1;min-width:0;color:var(--ink);font-size:13px}
.wl-hidden-item .wh-course small{display:block;margin-top:2px;color:var(--ink3);font-size:12px;line-height:1.6;white-space:normal}
.wl-hidden-item .wh-class,.wl-class{flex:none;color:var(--accent2);font-size:12px;background:var(--accent-soft);border-radius:999px;padding:2px 8px;white-space:nowrap}
.wl-hidden-actions{display:flex;align-items:center;justify-content:flex-end;gap:6px;flex:none;flex-wrap:wrap}
.wl-controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.wl-class-select{width:auto;min-width:112px;padding:5px 9px;font-size:12px}
.wl-row{align-items:flex-start}
.wl-day,.wl-period{flex:none;padding-top:3px}
.wl-day{width:48px}
.wl-period{width:54px;color:var(--ink3)}
.wl-course{flex:1;min-width:150px;white-space:normal}
.wl-course b{display:block;font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wl-course small{display:block;margin-top:2px;color:var(--ink3);font-size:12px;line-height:1.6;white-space:normal}
.wl-course-kind.kind-listening{background:var(--data5-bg);color:var(--data5)}
.wl-course-kind.kind-temporary{background:var(--warn-bg);color:var(--accent2)}
.wl-listening-status{flex:none;padding:3px 8px;border-radius:999px;background:#e7f3ff;color:#1565c0;font-size:12px}
.wl-temporary-status{flex:none;padding:3px 8px;border-radius:999px;background:var(--warn-bg);color:var(--accent2);font-size:12px}
.wl-temporary-note{margin-top:10px;font-size:12px;color:var(--ink3)}
.wl-edit-btn{color:var(--accent2)}
.weekly-history-toolbar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.weekly-history-toolbar .input{flex:1 1 210px;min-width:180px}
.weekly-history-summary{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:10px 12px;border-radius:10px;background:var(--card2);color:var(--ink2);font-size:12px}
.weekly-history-summary b{color:var(--accent2);font-size:13px}
.weekly-history-types{display:inline-flex;gap:6px;flex-wrap:wrap;color:var(--accent2)}
.weekly-history-types span{padding:2px 7px;border:1px solid var(--border);border-radius:999px;background:var(--card)}
.weekly-history-group{margin-top:14px}
.weekly-history-group h4{display:flex;align-items:center;gap:8px;margin-bottom:6px;font-size:14px;color:var(--ink)}
.weekly-history-group h4 small{font-size:12px;color:var(--ink3);font-weight:400}
.weekly-history-row{display:grid;grid-template-columns:130px minmax(120px,.8fr) auto;gap:6px 10px;padding:9px 4px;border-bottom:1px dashed var(--line);font-size:13px;align-items:baseline}
.weekly-history-row b{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.weekly-history-row em{font-style:normal;color:var(--accent2);font-size:12px;white-space:nowrap}
.weekly-history-row p{grid-column:2 / -1;color:var(--ink2);line-height:1.7;margin:0;white-space:pre-wrap}
@media (max-width:700px){.wl-controls{width:100%;justify-content:space-between}.wl-row{gap:6px}.wl-row .wl-course{flex-basis:calc(100% - 116px);order:3}.wl-row .wl-sel,.wl-row .wl-edit-btn,.wl-row .wl-class{order:4}.wl-row > .pill:last-child{order:5}.weekly-history-row,.weekly-history-row.with-action{grid-template-columns:1fr auto}.weekly-history-row b{grid-column:1}.weekly-history-row p{grid-column:1 / -1}.weekly-history-row em{grid-column:2;grid-row:1}.weekly-history-actions{grid-column:1 / -1}.wl-complete-actions{grid-template-columns:1fr}.wl-completed-row{grid-template-columns:1fr auto;align-items:start}.wl-completed-time{grid-column:1 / -1}.wl-completed-row .wl-class{grid-column:2;grid-row:2}.wl-completed-main{grid-column:1;grid-row:2}.wl-completed-row-actions{grid-column:1 / -1;justify-content:flex-start}}
@media (max-width:560px){.wl-hidden-item{align-items:flex-start;flex-wrap:wrap}.wl-hidden-item .wh-course{flex-basis:calc(100% - 110px)}.wl-hidden-actions{width:100%;justify-content:flex-end}}
.class-color-list{display:grid;gap:8px;margin-top:7px}
.class-color-row{display:flex;align-items:center;gap:8px;padding:7px 9px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}
.class-color-preview{width:13px;height:13px;border-radius:50%;flex:none;box-shadow:0 0 0 3px color-mix(in srgb,var(--class-color) 17%,transparent)}
.class-color-name{flex:1;min-width:0;font-size:13px;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.class-color-row input[type="color"]{width:34px;height:28px;padding:2px;border:1px solid var(--border);border-radius:8px;background:var(--card);cursor:pointer}

/* ---------- 828 方案：班级管理（座位表 + 成长记录） ---------- */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.seat-stage{display:block;max-width:100%;overflow-x:auto;padding-bottom:2px}
.seat-grid{display:grid;grid-template-columns:repeat(var(--seat-cols, 8), minmax(56px, 1fr));gap:8px;width:max-content;min-width:100%;box-sizing:border-box;background:var(--card2);border:1px dashed var(--border);border-radius:10px;padding:12px;margin-top:8px}
.seat-cell{min-width:56px;padding:8px 6px;border:1px solid var(--border);border-radius:8px;background:var(--card);font:inherit;text-align:center;font-size:13px;color:var(--ink);cursor:pointer;transition:all .15s;appearance:none}
.seat-cell:hover{border-color:var(--accent);background:var(--accent-soft)}
.seat-cell:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.seat-cell.selected{border-color:var(--accent);background:var(--accent);color:#fff}
.seat-cell.fixed{border-style:dashed;border-color:var(--accent2);background:var(--accent-soft)}
.seat-cell.empty{border-style:dashed;background:transparent;color:var(--ink3);cursor:default}
.seat-legend{font-size:12px;color:var(--ink3);margin-top:8px;line-height:1.7}
.seat-history-main{min-width:0;overflow-wrap:anywhere}
.growth-dashboard{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin-top:8px}
.growth-metric{display:flex;flex-direction:column;align-items:flex-start;gap:4px;min-height:78px;padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--card2);color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.growth-metric:hover,.growth-metric:focus-visible{border-color:var(--accent);background:var(--accent-soft);outline:none}
.growth-metric b{font-size:20px;line-height:1;color:var(--accent2)}
.growth-metric span{font-size:12px;line-height:1.55;color:var(--ink2)}
.growth-followups{margin-top:10px}
.growth-followup{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:38px;padding:7px 0;border:0;border-bottom:1px dashed var(--line);background:transparent;color:var(--ink2);font:inherit;text-align:left;cursor:pointer}
.growth-followup b{color:var(--ink);font-size:13px}
.growth-followup span{min-width:0;color:var(--ink3);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.growth-followup:hover b,.growth-followup:focus-visible b{color:var(--accent2)}
.reward-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin-top:8px}
.reward-card{border:1px solid var(--border);border-radius:10px;padding:12px;background:var(--card);display:flex;flex-direction:column;gap:6px}
.reward-card b{font-size:14px}
.reward-card .rc-cost{font-size:12px;color:var(--accent2)}
.reward-card .rc-stock{font-size:12px;color:var(--ink3)}
.reward-card button{margin-top:auto}
.rank-row.muted{opacity:.55}
.point-amounts{display:block;margin-top:10px;padding-top:10px;border-top:1px dashed var(--line)}
.point-action-panel{display:grid;gap:8px;padding:10px;border:1px solid var(--line);border-radius:10px;background:color-mix(in srgb,var(--card2) 82%,var(--card))}
.point-action-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}
.point-amounts-label{font-size:12px;color:var(--ink3);margin-right:2px;white-space:nowrap}
.point-amount{min-width:48px;justify-content:center;padding:6px 9px}
.point-amount.minus{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 38%,var(--border))}
.point-amount.minus:hover{background:color-mix(in srgb,var(--danger) 8%,var(--card));border-color:var(--danger)}
.point-amount.active{border-color:var(--accent);background:var(--accent-soft);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 54%,transparent)}
.point-amount.minus.active{border-color:var(--danger);background:color-mix(in srgb,var(--danger) 10%,var(--card));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--danger) 45%,transparent)}
.point-outcome{display:flex;align-items:center;justify-content:center;gap:6px;min-height:38px;padding:7px 11px;border:1px solid var(--border);border-radius:10px;background:var(--card);color:var(--ink2);font:inherit;font-size:13px;cursor:pointer;transition:background-color .15s,border-color .15s,box-shadow .15s,transform .15s}.point-outcome b{color:var(--ink);font-size:13px}.point-outcome small{color:var(--ink3);font-size:12px}.point-outcome:hover,.point-outcome:focus-visible{border-color:var(--accent);background:var(--accent-soft);transform:translateY(-1px);outline:none}.point-outcome.active{border-color:var(--accent);background:var(--accent-soft);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--accent) 54%,transparent)}.point-outcome.minus.active{border-color:var(--danger);background:color-mix(in srgb,var(--danger) 9%,var(--card))}.point-outcome.neutral.active{border-color:color-mix(in srgb,var(--accent2) 42%,var(--border));background:color-mix(in srgb,var(--accent-soft) 70%,var(--card))}
.point-action-hint{font-size:12px;color:var(--ink3);line-height:1.6}.point-action-hint b{color:var(--ink)}
.point-edit-state{display:inline-flex;align-items:center;min-height:28px;padding:4px 9px;border:1px dashed var(--border);border-radius:999px;background:var(--card2);color:var(--ink3);font-size:12px;line-height:1.4}.point-edit-state.active{border-color:color-mix(in srgb,var(--accent) 58%,var(--border));background:var(--accent-soft);color:var(--accent2);font-weight:700}.point-edit-state.warn{border-color:color-mix(in srgb,var(--danger) 44%,var(--border));background:color-mix(in srgb,var(--danger) 8%,var(--card));color:var(--danger)}
.point-stat-entry{display:inline-flex;align-items:center;gap:6px;min-height:30px;padding:5px 9px;border:1px solid var(--border);border-radius:999px;background:var(--card);color:var(--ink2);font-size:12px}.point-stat-entry b{color:var(--ink);font-weight:700}.point-stat-entry.minus{border-color:color-mix(in srgb,var(--danger) 36%,var(--border));color:var(--danger)}.point-stat-entry.plus{border-color:color-mix(in srgb,var(--accent2) 48%,var(--border));color:var(--accent2)}.point-stat-entry.neutral{border-color:color-mix(in srgb,var(--accent2) 28%,var(--border));color:var(--ink2)}
.point-student-group{margin-top:14px;padding-top:12px;border-top:1px dashed var(--line)}
.point-student-group:first-child{margin-top:10px;padding-top:0;border-top:0}
.point-student-group-head{display:flex;align-items:center;gap:8px;margin-bottom:8px;color:var(--ink)}
.point-student-group-head b{font-size:13px}
.point-student-group-head span{color:var(--ink3);font-size:12px}
.point-student-group-head .spacer{flex:1}
.point-person-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:8px;margin-top:10px}
.point-person{display:flex;align-items:flex-start;gap:8px;min-width:0;padding:10px 11px;border:1px solid var(--border);border-radius:10px;background:var(--card2);text-align:left;transition:background-color .15s,border-color .15s,transform .15s,box-shadow .15s}
.point-person:hover,.point-person:focus-within{border-color:var(--accent);background:var(--accent-soft);transform:translateY(-1px);outline:none}
.point-person.is-disabled{opacity:.58}.point-person.is-disabled:hover,.point-person.is-disabled:focus-within{border-color:var(--border);background:var(--card2);transform:none}
.point-person.is-handled{border-color:color-mix(in srgb,var(--accent) 42%,var(--border));background:color-mix(in srgb,var(--accent-soft) 60%,var(--card2));box-shadow:inset 3px 0 0 var(--accent)}
.point-person .pp-avatar{width:28px;height:28px;display:grid;place-items:center;border-radius:50%;background:var(--accent-soft);color:var(--accent2);font-size:13px;font-weight:700;flex:none}
.point-person .pp-main{min-width:0;flex:1}
.point-person .pp-name{display:block;font-size:13px;line-height:1.45;overflow-wrap:anywhere;white-space:normal}
.point-person .pp-detail{display:block;margin-top:2px;font-size:12px;color:var(--ink3);line-height:1.45;overflow-wrap:anywhere}.point-person.is-handled .pp-detail{color:var(--accent2);font-weight:600}
.point-person .pp-actions{display:grid;grid-template-columns:auto auto;align-items:center;gap:4px;flex:none;max-width:100%}
.point-person .pp-score{grid-column:1/-1;justify-self:end;font-size:16px;font-weight:700;color:var(--accent2);flex:none}.point-person .pp-metrics{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px;color:var(--ink3);font-size:12px}.point-person .pp-metrics b{color:var(--ink2);font-weight:600}.point-undo-notice{margin:8px 0;padding:8px 10px;border:1px solid color-mix(in srgb,var(--accent2) 45%,var(--border));border-radius:10px;background:var(--accent-soft);color:var(--accent2);font-size:12px}
.point-person-apply{display:flex;align-items:flex-start;gap:8px;min-width:0;flex:1;padding:0;border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}
.point-person-apply:focus-visible{outline:3px solid var(--ink);outline-offset:3px;border-radius:8px}
.point-person-detail,.point-person-summary{font-size:12px;padding:3px 7px;white-space:nowrap}
.point-step-nav{display:flex;gap:8px;margin:10px 0}.point-reminder{margin-top:10px;padding:10px;border:1px solid color-mix(in srgb,var(--danger) 35%,var(--border));border-radius:10px;background:color-mix(in srgb,var(--danger) 6%,var(--card2));color:var(--ink2);font-size:12px}.point-sort-control{display:inline-flex;align-items:center;gap:6px;color:var(--ink3);font-size:12px;white-space:nowrap}.point-sort-control .input{width:auto;min-width:116px;padding:5px 8px;font-size:12px}
.point-log-item{display:flex;align-items:center;gap:8px;padding:7px 2px;border-bottom:1px dashed var(--line);font-size:13px}
.point-log-item:last-child{border-bottom:none}
.point-log-item .pli-main{flex:1;min-width:0}
.point-log-item .pli-meta{display:block;margin-top:2px;color:var(--ink3);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.point-log-item .pli-value{font-weight:700;min-width:44px;text-align:right}
.point-log-item.voided{opacity:.5}
.point-log-item.voided .pli-main{text-decoration:line-through}
.point-undo{flex:none;padding:3px 8px;font-size:12px}
.point-summary-conclusion{display:grid;gap:8px;margin-top:10px}
.point-summary-callout{padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card2);color:var(--ink2);font-size:13px;line-height:1.65}
.point-summary-callout strong{color:var(--ink)}
.point-summary-callout.warn{border-color:color-mix(in srgb,var(--danger) 42%,var(--border));background:color-mix(in srgb,var(--danger) 6%,var(--card2))}
.point-summary-callout.good{border-color:color-mix(in srgb,var(--accent2) 45%,var(--border));background:color-mix(in srgb,var(--accent-soft) 65%,var(--card2))}
.point-summary-list{display:grid;gap:8px;margin-top:12px}
.point-summary-row{display:grid;grid-template-columns:88px minmax(0,1fr) auto;align-items:center;gap:8px;padding:9px 10px;border-bottom:1px dashed var(--line);font-size:12px}
.point-summary-row:last-child{border-bottom:0}
.point-summary-date{color:var(--ink3);font-variant-numeric:tabular-nums}
.point-summary-main{min-width:0}
.point-summary-main b{display:block;color:var(--ink);font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.point-summary-main small{display:block;margin-top:2px;color:var(--ink3);line-height:1.45}
.point-summary-score{white-space:nowrap;color:var(--danger);font-weight:700}
.point-summary-score.normal{color:var(--accent2)}
.point-round-aggregate{display:grid;gap:8px;margin:12px 0 4px;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}
.point-round-aggregate-head{display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--ink2);font-size:12px}
.point-round-aggregate-head b{color:var(--ink)}
.point-round-aggregate-list{display:grid;gap:4px}
.point-round-aggregate-row{display:flex;align-items:center;gap:8px;min-width:0;padding:6px 0;border-bottom:1px dashed var(--line);font-size:12px}
.point-round-aggregate-row:last-child{border-bottom:0}
.point-round-aggregate-row strong{flex:none;color:var(--ink)}
.point-round-aggregate-row span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink2)}
.point-round-aggregate-row em{margin-left:auto;flex:none;color:var(--danger);font-style:normal;font-weight:700}
.point-summary-trend{display:flex;align-items:flex-end;gap:8px;min-height:96px;margin-top:10px;padding:10px 8px 4px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}
.point-summary-bar{display:flex;flex:1;min-width:18px;height:78px;flex-direction:column;align-items:center;justify-content:flex-end;gap:4px}
.point-summary-bar i{display:block;width:min(24px,72%);min-height:4px;border-radius:8px 5px 2px 2px;background:var(--accent);opacity:.82}
.point-summary-bar span{max-width:60px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink3);font-size:12px}
.point-summary-bar b{color:var(--ink2);font-size:12px;font-weight:600}
@media(max-width:560px){.point-summary-row{grid-template-columns:1fr auto;gap:4px}.point-summary-date{grid-column:1/-1}.point-summary-main{min-width:0}.point-summary-trend{gap:4px}}
.point-stat-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px}
.point-stat-toolbar .input{min-width:260px;max-width:100%;flex:1}
.point-stat-summary{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:12px;color:var(--ink2);font-size:13px}
.point-stat-summary b{color:var(--ink)}
.point-stat-columns{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px;margin-top:12px}
.point-stat-column{min-width:0;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}
.point-stat-column h4{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 0 7px;font-size:13px}
.point-stat-column h4 span{font-size:12px;color:var(--ink3);font-weight:400}
.point-stat-list{display:flex;flex-wrap:wrap;gap:6px}
.point-stat-student{display:inline-flex;align-items:center;min-height:30px;padding:5px 9px;border:1px solid var(--border);border-radius:999px;background:var(--card);color:var(--ink2);font:inherit;font-size:12px;cursor:pointer}
.point-stat-student:hover,.point-stat-student:focus-visible{border-color:var(--accent);background:var(--accent-soft);outline:none}
.point-stat-student.corrected{border-color:color-mix(in srgb,var(--accent2) 48%,var(--border));color:var(--accent2)}
.point-stat-empty{padding:8px 2px;color:var(--ink3);font-size:12px}
@media (max-width:760px){.point-action-row{align-items:stretch}.point-outcome{flex:1 1 148px}.point-stat-toolbar .input{flex-basis:100%;min-width:0}}
@media (max-width:560px){.point-person-grid{grid-template-columns:1fr}.point-action-panel{padding:9px}.point-amount{flex:1;min-height:36px}.point-outcome{flex:1 1 100%;justify-content:space-between}.point-log-item{align-items:flex-start}.point-undo{margin-top:1px}}

/* ---------- 可访问性与轻量视觉增强 ---------- */
:focus-visible{outline:3px solid var(--ink);outline-offset:2px}
.skip-link{position:fixed;left:14px;top:10px;z-index:var(--z-sync);padding:8px 12px;border-radius:10px;background:var(--ink);color:#fff;transform:translateY(-160%);transition:transform .18s}
.skip-link:focus{transform:translateY(0)}
.sidebar{background:color-mix(in srgb,var(--card) 92%,transparent);backdrop-filter:blur(14px)}
.side-logo{position:sticky;top:0;background:inherit;z-index:1}
.page-head{position:relative;padding-left:14px}
.page-head::before{display:none}
.card,.zw-card{transition:box-shadow .18s ease,border-color .18s ease,transform .18s ease}
.card:hover,.zw-card:hover{border-color:color-mix(in srgb,var(--accent) 48%,var(--border));box-shadow:0 14px 30px -18px color-mix(in srgb,var(--accent2) 55%,transparent)}
.btn,.pill,.site-card{min-height:34px}
.btn:focus-visible,.pill:focus-visible{outline-offset:3px}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}

/* ---------- 宽屏桌面布局：放大有效内容区，减少两侧空白 ---------- */
@media (min-width:1200px){
  .main-in{max-width:1280px;padding:30px 34px 88px}
  .page-head{margin-bottom:24px}
  .card{padding:20px 22px;margin-bottom:20px}
  .grid{gap:16px}
  .dash-row{gap:20px}
  .prep-grid{grid-template-columns:minmax(360px,.88fr) minmax(0,1.12fr);gap:24px}
  .jy-layout{grid-template-columns:minmax(360px,.9fr) minmax(0,1.1fr);gap:24px}
  .website-grid{grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}
  .wx-grid{grid-template-columns:repeat(auto-fill,minmax(235px,1fr));gap:16px}
}
@media (min-width:1560px){
  .main-in{max-width:1440px;padding-left:42px;padding-right:42px}
  .card{padding-left:24px;padding-right:24px}
}


/* ---------- 全站视觉与性能优化：教师工作台 ---------- */
html { text-rendering: optimizeLegibility; }
.main-in { width: min(100%, 1440px); }
.card, .zw-card { box-shadow: 0 10px 24px -18px rgba(84,78,66,.42); }
.card:hover, .zw-card:hover { transform: translateY(-1px); }
.page-head h1 { text-wrap: balance; }
.page-head p, .hint, .empty { text-wrap: pretty; }
.todo-item .td-date, .home-clock, table.sched { font-variant-numeric: tabular-nums; }
@media (min-width: 1200px) {
  .sidebar { width: 240px; }
  .side-nav { padding-inline: 12px; }
  .main-in { width: min(100%, 1440px); }
  .card { border-radius: 16px; }
  .page-head h1 { font-size: 28px; }
}
@media (max-width: 900px) {
  body::before { opacity: .18; background-size: 44px 44px; }
}
@media (prefers-reduced-transparency: reduce) {
  .sidebar { backdrop-filter: none; }
}

/* 班级切换器：明确当前上下文，避免把全局筛选误认为课表内容 */
.class-switcher{padding:2px 14px 8px}
.class-switcher .input{font-size:13px;padding:7px 10px;min-height:36px}
.today-sched-item.class-colored{box-shadow:inset 2px 0 0 var(--class-color)}
.today-sched-item.class-colored .ts-label{color:var(--class-color)}

/* ---------- 2026 UI polish：更清晰的工作台层级与更稳定的响应式 ---------- */
body{background-image:none}
.app{background:var(--bg)}
.sidebar{width:252px;background:var(--card);backdrop-filter:none;box-shadow:8px 0 24px -24px rgba(72,68,59,.55)}
.side-logo{padding:22px 20px 16px}
.side-nav{padding:16px 12px}
.side-item.active{background:var(--accent-soft);border-color:color-mix(in srgb,var(--accent) 36%,var(--border));color:var(--accent2);box-shadow:inset 3px 0 0 var(--accent);font-weight:700}
.side-item.active .ic{filter:saturate(.8)}
.side-foot{padding:14px 18px}
.main{background:transparent}
.main-in{width:100%;max-width:1600px;padding:clamp(20px,3vw,34px) clamp(16px,3vw,44px) 96px}
.page-head{padding:8px 0 8px 16px;margin-bottom:22px}
.page-head::before{top:7px;height:52px;width:4px}
.page-head .kicker{font-size:12px;letter-spacing:.22em;font-weight:700}
.page-head h1{font-size:clamp(24px,2.2vw,31px);line-height:1.25;letter-spacing:.04em}
.page-head p{max-width:760px;font-size:13px;line-height:1.7}
.card,.zw-card{border-radius:16px;box-shadow:0 8px 24px -20px rgba(84,78,66,.55)}
.card:hover,.zw-card:hover{transform:none;box-shadow:0 10px 28px -20px rgba(84,78,66,.64)}
.card-head{gap:8px;margin-bottom:14px}
.card-head h3{font-size:16px;letter-spacing:.04em}
.card-head .hint{line-height:1.5}
.btn,.pill{transition:background-color .16s,border-color .16s,color .16s,transform .16s,box-shadow .16s}
.btn:hover,.pill:hover{transform:translateY(-1px)}
.btn:active,.pill:active{transform:translateY(0)}
.input,textarea.input,select.input{min-height:38px;border-radius:10px;background:color-mix(in srgb,var(--card2) 88%,var(--card));}
textarea.input{min-height:86px}
.home-clock{margin-top:10px;padding:10px 0 2px}
.today-sched-head{font-weight:700;margin-top:14px}
.home-sched{border-color:var(--border);box-shadow:0 4px 12px -12px rgba(84,78,66,.5)}
.sched-toolbar{gap:8px;margin-bottom:10px}
.sched-wrap{border:1px solid var(--border);border-radius:10px;background:var(--card2);box-shadow:0 5px 16px -16px rgba(84,78,66,.55)}
table.sched{border-collapse:separate;border-spacing:0;overflow:hidden}
table.sched th,table.sched td{padding:10px 8px}
table.sched thead th{position:sticky;top:0;z-index:2;background:var(--card2);box-shadow:0 1px 0 var(--line)}
table.sched td.ptime{position:sticky;left:0;z-index:1;background:var(--card2);box-shadow:1px 0 0 var(--line)}
table.sched thead th:first-child{position:sticky;left:0;z-index:3}
table.sched td.cell{min-height:54px;vertical-align:middle}
.sched-cell-class{font-size:12px;letter-spacing:.01em}
.sched-class-legend{margin:10px 0 8px;padding:9px 11px}
.wl-head{padding-bottom:8px;border-bottom:1px solid var(--line)}
.wl-table{border-radius:10px;background:var(--card2)}
.wl-row{padding:10px 12px;background:var(--card)}
.wl-row:hover{background:var(--accent-soft)}
.wl-row.done{background:color-mix(in srgb,var(--card2) 68%,var(--card));}
.wl-course b{font-size:13px}
.wl-course small{line-height:1.55}
.weekly-history-toolbar{padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}
.weekly-history-summary{border:1px solid var(--line)}
.modal{border-radius:var(--radius-lg);padding:var(--space-6);box-shadow:var(--shadow-pop)}
.m-topbar{box-shadow:0 4px 16px -14px rgba(84,78,66,.65)}
.m-bottom{box-shadow:0 -4px 16px -14px rgba(84,78,66,.65)}
@media (max-width:768px){
  .sidebar{width:auto}
  .main-in{padding:16px 12px 88px}
  .page-head{padding:6px 0 4px 12px;margin-bottom:16px}
  .page-head::before{top:5px;height:48px;width:3px}
  .page-head h1{font-size:28px}
  .page-head p{font-size:13px}
  .card{padding:16px;margin-bottom:14px;border-radius:16px}
  .card-head{align-items:flex-start;margin-bottom:12px}
  .card-head h3{font-size:14px}
  .card-head .hint{flex-basis:100%;margin-left:0;order:9}
  .card-head>.btn,.card-head>.pill,.card-head>.card-actions{align-self:center}
  .card-head>.card-actions{flex-basis:100%;display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  .card-head>.card-actions>.btn{width:100%;justify-content:center}
  .dash-card{padding:16px;margin-bottom:14px;border-radius:16px}
  .dash-row{gap:14px;margin-bottom:14px}
  .sched-wrap{margin-inline:-2px}
  table.sched{min-width:700px}
  table.sched th,table.sched td{padding:9px 7px}
  .sched-class-legend{line-height:1.7}
  .wl-head{align-items:flex-start}
  .weekly-history-toolbar{padding:8px}
  .weekly-history-toolbar .input{min-width:100%;}
  .m-topbar{padding:8px 12px}
  .m-topbar b{max-width:150px;overflow:hidden;text-overflow:ellipsis}
  .m-bottom-in{gap:4px;padding-inline:6px}
}
@media (max-width:420px){
  .m-topbar b{font-size:13px;max-width:118px}
  .m-topbar select{max-width:106px!important}
  .btn{padding-inline:12px}
  .btn.sm,.pill.sm{padding-inline:9px}
}.wl-course-kind,.sched-cell-kind{display:inline-flex;align-items:center;flex:none;border-radius:8px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1.35;letter-spacing:.02em}.wl-course-kind::before,.sched-cell-kind::before{content:"";display:inline-block;width:5px;height:5px;margin-right:5px;border-radius:50%;background:currentColor}
.kind-assignment{color:var(--data3);background:var(--data3-bg);border:1px solid color-mix(in srgb,var(--data3) 30%,transparent)}
.kind-workbook{color:var(--data6);background:var(--data6-bg);border:1px solid color-mix(in srgb,var(--data6) 30%,transparent)}
.kind-practice{color:var(--data4);background:var(--data4-bg);border:1px solid color-mix(in srgb,var(--data4) 30%,transparent)}
.wl-course b{font-size:14px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.wl-course small{font-size:14px;line-height:1.75}
.wl-class.class-colored{color:var(--class-color);background:var(--class-color-bg);border:1px solid var(--class-color-border);font-weight:700}
.wl-all-class-note{color:var(--accent2);font-size:12px}
@media (max-width:560px){
  .wl-course b{font-size:14px}
  .wl-course small{font-size:13px}
}

/* ---------- 旧站存档：从主功能中降级为轻量入口 ---------- */

/* 课程表导入预览：状态不只依赖颜色，移动端改用逐项卡片 */
.sched-import-summary{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 12px;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--card2);font-size:12px;color:var(--ink2)}
.sched-import-summary b{color:var(--ink)}
.sched-import-warning{margin:8px 0;padding:9px 11px;border-left:3px solid var(--danger);border-radius:8px;background:color-mix(in srgb,var(--danger) 8%,var(--card));color:var(--ink2);font-size:12px;line-height:1.6}
.sched-import-list{display:grid;gap:8px;max-height:48vh;overflow:auto;padding:2px}
.sched-import-row{display:grid;grid-template-columns:24px 76px minmax(0,1fr) auto;gap:8px;align-items:start;padding:10px;border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:10px;background:var(--card2)}
.sched-import-row.is-replace{border-left-color:#c9822b}.sched-import-row.is-conflict,.sched-import-row.is-invalid{border-left-color:var(--danger)}.sched-import-row.is-same{border-left-color:#7a9a82;opacity:.75}
.sched-import-check{width:18px;height:18px;margin:3px 0 0;accent-color:var(--accent)}
.sched-import-main{min-width:0;display:grid;gap:6px}.sched-import-fields{display:grid;grid-template-columns:86px 104px minmax(120px,1fr) minmax(100px,.8fr);gap:6px}.sched-import-fields .input{min-height:34px;padding:6px 8px;font-size:12px}.sched-import-meta{font-size:12px;color:var(--ink3);line-height:1.5;overflow-wrap:anywhere}.sched-import-status{font-size:12px;padding:3px 7px;border-radius:999px;background:var(--accent-soft);color:var(--accent2);white-space:nowrap}.sched-import-status.replace{background:var(--warn-bg);color:var(--accent2)}.sched-import-status.conflict,.sched-import-status.invalid{background:var(--bad-bg);color:var(--danger)}.sched-import-status.same{background:#e7f3e9;color:#477453}
.sched-import-row.is-clickable{cursor:pointer;transition:border-color .15s,background .15s,box-shadow .15s}
.sched-import-row.is-clickable:hover{border-color:color-mix(in srgb,var(--accent) 45%,var(--line));background:color-mix(in srgb,var(--accent) 5%,var(--card2))}
.sched-import-row.is-clickable.is-selected{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent);background:color-mix(in srgb,var(--accent) 9%,var(--card2))}
.sched-import-row.is-clickable:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.sched-import-alts{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:2px}
.sched-import-alts-label{font-size:12px;color:var(--ink3)}
.sched-import-candidate{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border:1px solid var(--line);border-radius:999px;background:var(--card);color:var(--ink2);font-size:12px;cursor:pointer;transition:border-color .15s,background .15s,color .15s}
.sched-import-candidate:hover{border-color:var(--accent);color:var(--ink);background:color-mix(in srgb,var(--accent) 8%,var(--card))}
.sched-import-candidate.is-picked{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--card));color:var(--ink)}
.sched-import-candidate img{width:26px;height:18px;object-fit:cover;border-radius:8px;border:1px solid var(--line)}
.sched-import-alt-none{border:none;background:none;color:var(--ink3);font-size:12px;cursor:pointer;text-decoration:underline;padding:5px 4px}
.sched-import-suspect{margin:0 0 10px;padding:9px 11px;border:1px dashed var(--accent);border-radius:10px;background:color-mix(in srgb,var(--accent) 6%,var(--card2));font-size:12px;color:var(--ink2)}
.sched-import-suspect-title{font-size:12px;color:var(--ink);margin-bottom:7px}
.sched-import-suspect-row{display:flex;align-items:center;gap:8px;padding:5px 0;border-top:1px solid color-mix(in srgb,var(--line) 70%,transparent)}
.sched-import-suspect-row:first-of-type{border-top:none}
.sched-import-suspect-thumb{width:88px;height:30px;object-fit:contain;border:1px solid var(--line);border-radius:8px;background:#fff;flex:none}
.sched-import-suspect-slot{font-size:12px;color:var(--ink);white-space:nowrap;min-width:66px}
.sched-import-suspect-row .input{min-height:30px;padding:4px 8px;font-size:12px;flex:1}
.sched-import-suspect-row button.pill{padding:4px 10px;font-size:12px}
@media(max-width:768px){.sched-import-row{grid-template-columns:24px minmax(0,1fr) auto}.sched-import-main{grid-column:2/-1}.sched-import-fields{grid-template-columns:1fr 1fr}.sched-import-fields .course-field,.sched-import-fields .class-field{grid-column:1/-1}.sched-import-list{max-height:54vh}}


/* ---------- 课表与界面优化方案 ---------- */
:root{
  --class-a-bg:#eaf2ff;--class-a-ink:#2457a6;--class-a-line:#8fb3ed;
  --class-b-bg:#edf8ef;--class-b-ink:#2c7a45;--class-b-line:#9bcfa8;
  --class-c-bg:var(--warn-bg);--class-c-ink:var(--warn-strong);--class-c-line:#edc27d;
  --lesson-bg:var(--card2);--lesson-line:#e5e7eb;--lesson-ink:#20242a;--muted-ink:var(--muted); /* 20260912c：#78808b 冷灰 3.71:1 不达标，改 --muted 5.29:1 */
  /* 20260912d：控件表面 / 徽标表面 / 课程内容文字抽为令牌，暗色只在 dark 层改令牌值 */
  --control-bg:#fff;--chip-bg:rgba(255,255,255,.7);--content-ink:#505863;
}
/* 弹窗统一自然居中；内容较长时仍在弹窗内部滚动 */
.modal-mask{align-items:center;padding:24px 18px;overflow:auto;background:rgba(40,35,30,.42)}
.modal{width:min(680px,100%);max-height:min(82vh,760px);margin:0 auto;border-radius:16px;overflow-y:auto;overscroll-behavior:contain}
.modal.modal-compact{max-width:460px;max-height:62vh}
.modal.modal-medium{max-width:600px;max-height:78vh}
.modal.modal-large{max-width:900px;max-height:88vh}
@media (max-width:768px){
  .modal-mask{align-items:center;padding:12px}
  .modal{width:100%;max-height:88vh;border-radius:16px;padding:16px}
  .modal-foot .btn{min-height:40px;flex:1}
}
/* 单元格删除按钮仅在编辑态可见，浏览态不会留下误操作入口 */
.sched-editor.is-editing .cell-delete,.sched-editor.is-editing .remove-cell,.sched-editor.is-editing .cell-clear{display:flex}
.sched-editor:not(.is-editing) .cell-delete,.sched-editor:not(.is-editing) .remove-cell,.sched-editor:not(.is-editing) .cell-clear{display:none}
/* 首页今日课程：班级、课程、内容、课型分层 */
.course-group + .course-group{margin-top:18px}
.course-group-head{display:flex;align-items:baseline;gap:8px;margin-bottom:9px}
.morning-reading-line{padding:10px 2px;font-size:14px;color:var(--ink2);border-bottom:1px dashed var(--line)}
.course-group-head h3{margin:0;font-size:14px;color:var(--lesson-ink)}
.course-group-head span{font-size:12px;color:var(--muted-ink)}
.my-course-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.my-course-card{position:relative;min-width:0;padding:13px 14px 12px;border:1px solid var(--lesson-line);border-radius:10px;background:var(--course-bg);color:var(--lesson-ink);box-shadow:inset 3px 0 0 var(--course-line)}
.mc-topline,.mc-bottomline{display:flex;align-items:center;justify-content:space-between;gap:8px}
.mc-period{font-size:12px;color:var(--muted-ink)}
.mc-class{max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:700;color:var(--course-line)}
.mc-subject{margin-top:8px;font-size:20px;font-weight:750;line-height:1.3;color:var(--lesson-ink)}
.mc-content{min-height:22px;margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;color:var(--content-ink)}
.mc-bottomline{margin-top:10px}
.mc-type{display:inline-flex;align-items:center;min-height:22px;padding:2px 8px;border-radius:999px;background:var(--chip-bg);color:var(--course-line);font-size:12px;font-weight:650}
.mc-type::before{content:"";width:5px;height:5px;margin-right:5px;border-radius:50%;background:currentColor}
.mc-type.muted{color:var(--muted-ink)}
.mc-time{font-size:12px;color:var(--muted-ink)}
/* 可听课程与“我的课程”共用同一张卡片尺寸；“记录”保留在与标注按钮相同的位置。 */
.my-course-card.audit-course .mc-type{flex:none;white-space:nowrap}
.my-course-card.audit-course .mc-time{margin-left:auto;white-space:nowrap}
.my-course-card.audit-course .audit-today-actions{display:flex;flex:none;gap:4px}
.my-course-card.audit-course .audit-today-actions .pill{padding:2px 8px;font-size:12px}
.audit-hidden-line{margin-top:8px;font-size:12px;color:var(--ink3)}
.audit-hidden-line a{color:var(--ink2);cursor:pointer;text-decoration:underline}
.other-class-block + .other-class-block{margin-top:12px}
.other-class-title{display:flex;align-items:center;gap:8px;margin-bottom:7px;padding:7px 10px;border-radius:8px;background:var(--class-bg);color:var(--class-line);font-size:13px;font-weight:700}
.other-class-title i{width:7px;height:7px;border-radius:50%;background:var(--class-line)}
.audit-week-stats{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px;padding-top:8px;border-top:1px dashed var(--line);font-size:12px;color:var(--muted-ink)}
.audit-week-stats b{color:var(--ink2);font-weight:600}
.audit-week-stat{padding:3px 8px;border-radius:999px;background:var(--accent-soft);color:var(--accent2)}
@media(max-width:768px){.my-course-list{grid-template-columns:1fr;gap:8px}.my-course-card{padding:12px 13px}.mc-subject{font-size:16px}}


.sync-key-row .input{flex:1;min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.04em}
.sync-status{min-height:22px;margin-top:9px;font-size:12px;color:var(--ink3);line-height:1.6}
.sync-status.success{color:var(--accent2)}
.sync-status.error{color:var(--danger)}
.sync-status.pending{color:var(--warn-strong)}
.sync-conflict-list{display:grid;gap:8px;margin-top:14px;max-height:min(46vh,360px);overflow:auto;padding-right:2px}.sync-conflict-row{padding:13px 14px;border:1px solid var(--line);border-radius:10px;background:var(--card2);text-align:left}.sync-conflict-intro{min-width:0}.sync-conflict-intro b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink);font-size:13px}.sync-conflict-intro span{display:block;margin-top:4px;color:var(--ink3);font-size:12px;line-height:1.55}.sync-conflict-actions{display:grid;gap:8px;margin-top:14px}.sync-conflict-action{display:flex;align-items:center;justify-content:space-between;gap:12px}.sync-conflict-action small{color:var(--ink3);font-size:12px;line-height:1.45;text-align:right}.sync-conflict-action .btn{flex:0 0 auto}
@media(max-width:560px){.sync-key-row .input{flex-basis:100%}.sync-key-row .btn{flex:1}}

/* ---------- 账号化与跨设备自动同步 ---------- */
.modal-mask{z-index:calc(var(--z-sync) + 10)}
body.auth-pending .app{visibility:hidden}
body.account-ownership-pending .app{visibility:hidden}
html.files-returning .auth-screen{display:none!important}
.auth-ownership-warning{padding:13px 14px;border:1px solid color-mix(in srgb,var(--danger) 28%,var(--border));border-radius:10px;background:color-mix(in srgb,var(--card2) 88%,#fff 12%);color:var(--ink2);font-size:13px;line-height:1.8}
.auth-ownership-warning strong{display:block;margin-bottom:5px;color:var(--ink);font-size:14px;line-height:1.45}
.auth-ownership-stats{margin-top:7px;color:var(--ink3);font-size:12px;line-height:1.65}
.auth-ownership-actions{display:grid;gap:8px;margin-top:14px}
.auth-ownership-actions .btn{width:100%;justify-content:center;text-align:center}
.auth-ownership-safe-note{margin-top:11px;color:var(--ink3);font-size:12px;line-height:1.7}
/* 登录层视觉改造 v2（20260909·浅色毛玻璃）：应用户反馈由深色改浅色。
   暖米底 var(--bg) + 陶土/金/鼠尾草浅光斑 + 白色半透明玻璃卡；文字控件回归品牌墨色系（--ink/--ink2/--muted/--danger）。
   玻璃材质仍为 blur(22px) saturate(125%)，@supports 降级实色 --card；结构规格（440/圆角24/控件≥48px）不变。
   光斑层 aria-hidden + pointer-events:none，不进焦点序；玻璃感只挂卡片 backdrop-filter，表单内容不参与模糊。
   容器 flex + overflow:auto、卡片 margin:auto：居中且内容超高时可滚动，不裁切表单。
   输入框/次按钮边框用 #9c7f63：对玻璃面板与输入底两侧实测 ≥3:1（--line-strong 约 1.5:1 不足）。
   玻璃面板合成亮度低于纯白卡，12px 说明文字统一用 --ink2 而非 --ink3（--ink3 对玻璃底约 4.1:1 不足 4.5）。 */
.auth-screen{position:fixed;inset:0;z-index:var(--z-sync);display:flex;overflow:auto;padding:32px 20px;background:var(--bg);color:var(--ink);color-scheme:light}
.auth-screen[hidden]{display:none}
.auth-bg{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none;background:radial-gradient(ellipse at 18% 14%, rgba(164,91,62,.22), transparent 48%),radial-gradient(ellipse at 86% 86%, rgba(201,154,78,.20), transparent 46%),radial-gradient(ellipse at 60% 42%, rgba(125,148,113,.15), transparent 42%)}
.auth-shell{position:relative;z-index:1;box-sizing:border-box;width:100%;max-width:440px;margin:auto;padding:36px;border:1px solid rgba(255,255,255,.78);border-radius:24px;background:var(--card);box-shadow:0 24px 64px rgba(93,62,44,.18), inset 0 1px 0 rgba(255,255,255,.85)}
@supports ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .auth-shell{background:rgba(255,255,255,.55);-webkit-backdrop-filter:blur(22px) saturate(125%);backdrop-filter:blur(22px) saturate(125%)}
}
.auth-brand{display:flex;align-items:center;gap:12px;margin-bottom:20px}.auth-brand .flower-logo{width:42px;height:42px}.auth-brand b{font-family:'Noto Serif SC','Songti SC',serif;font-size:20px;color:var(--ink)}.auth-brand span{display:block;margin-top:3px;font-size:12px;color:var(--ink2)}
.auth-tabs{display:flex;gap:6px;margin:0 0 16px;padding:4px;border-radius:12px;background:rgba(164,91,62,.08)}.auth-tabs button{flex:1;min-height:36px;border:0;border-radius:8px;background:transparent;color:var(--ink2);cursor:pointer}.auth-tabs button:focus-visible{outline:2px solid var(--accent2);outline-offset:2px}.auth-tabs button.active{background:rgba(255,255,255,.92);color:var(--ink);box-shadow:var(--shadow-1);font-weight:600}
.auth-title{margin:0 0 5px;font-size:var(--fs-h1);font-weight:600;color:var(--ink)}.auth-subtitle{margin:0 0 17px;color:var(--ink2);font-size:14px;line-height:1.7}.auth-screen .field{margin-bottom:var(--space-5)}.auth-screen .field label{font-size:14px;color:var(--ink2);margin-bottom:8px}.auth-screen .input{min-height:48px;padding:12px 14px;border:1px solid #9c7f63;border-radius:12px;background:rgba(255,255,255,.72);color:var(--ink);font-size:16px;letter-spacing:.02em;transition:border-color 160ms ease}.auth-screen .input::placeholder{color:var(--muted);opacity:1}.auth-screen .input:hover{border-color:#7c6250}.auth-screen .input:focus{border-color:var(--accent2);box-shadow:0 0 0 3px rgba(164,91,62,.22)}.auth-screen .input:focus-visible{outline:2px solid var(--accent2);outline-offset:3px}.auth-screen .input:-webkit-autofill{-webkit-text-fill-color:#524a42;-webkit-box-shadow:0 0 0 1000px #fdfaf4 inset;caret-color:#524a42;transition:background-color 9999s ease-out}.auth-screen .btn{width:100%;min-height:48px;border-radius:12px;font-size:16px;font-weight:600}.auth-screen .btn.accent{color:#fff}.auth-screen .btn.accent:focus-visible{outline:2px solid var(--accent2);outline-offset:4px}.auth-screen .btn.ghost{background:rgba(255,255,255,.65);border:1px solid #9c7f63;color:var(--accent2)}.auth-screen .btn.ghost:hover{border-color:var(--accent2);color:var(--accent2)}.auth-error{min-height:22px;margin:5px 0 10px;color:var(--danger);font-size:13px;line-height:1.6}.auth-remember{display:flex;align-items:center;gap:8px;margin:0 0 var(--space-5);padding:5px 0;min-height:38px;font-size:13px;color:var(--ink2);cursor:pointer}.auth-remember input{width:20px;height:20px;flex:none;accent-color:var(--accent)}.auth-remember input:focus-visible{outline:2px solid var(--accent2);outline-offset:2px}.auth-note{margin-top:13px;text-align:center;color:var(--ink2);font-size:13px;line-height:1.7}.auth-note button{min-height:40px;padding:8px 12px;border:0;background:none;color:var(--accent2);cursor:pointer;vertical-align:middle}.auth-note button:focus-visible{outline:2px solid var(--accent2);outline-offset:2px;border-radius:8px}.auth-offline{margin-top:10px!important;background:transparent!important;color:var(--ink2)!important;border:1px dashed var(--line-strong)!important}.auth-restore-status{display:flex;align-items:center;justify-content:center;gap:8px;min-height:42px;color:var(--ink2);font-size:13px}.auth-restore-status i{width:16px;height:16px;border:2px solid var(--accent-soft);border-top-color:var(--accent2);border-radius:50%;animation:workbench-spin .8s linear infinite}.auth-retry-actions{display:grid;gap:8px}
.sync-overlay{position:fixed;inset:0;z-index:var(--z-sync);display:flex;align-items:center;justify-content:center;padding:22px;background:rgba(40,35,30,.42);backdrop-filter:blur(4px)}.sync-overlay[hidden]{display:none}.sync-panel{width:min(420px,100%);padding:25px 24px 22px;border:1px solid var(--border);border-radius:16px;background:var(--card);box-shadow:0 26px 64px -28px rgba(32,47,37,.52);text-align:center}.sync-spinner{width:42px;height:42px;margin:0 auto 14px;border:3px solid var(--accent-soft);border-top-color:var(--accent2);border-radius:50%;animation:workbench-spin 1s linear infinite}@keyframes workbench-spin{to{transform:rotate(360deg)}}.sync-panel h3{margin:0;color:var(--ink);font-size:20px}.sync-stage{margin-top:7px;color:var(--ink2);font-size:13px}.sync-detail{min-height:21px;margin-top:5px;color:var(--ink3);font-size:12px;line-height:1.6}.sync-progress{height:6px;margin:16px 0 0;overflow:hidden;border-radius:999px;background:var(--card2)}.sync-progress i{display:block;width:0;height:100%;border-radius:inherit;background:var(--accent);transition:width .25s ease}.sync-panel .btn-row{justify-content:center}.sync-account-card{grid-column:1/-1}.sync-account-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.sync-account-head .account-avatar{display:grid;place-items:center;width:38px;height:38px;border-radius:10px;background:var(--accent-soft);color:var(--accent2);font-size:20px}.sync-account-head .account-main{flex:1;min-width:0}.sync-account-head .account-main b{display:block;font-size:14px;color:var(--ink)}.sync-account-head .account-main span{display:block;margin-top:2px;color:var(--ink3);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sync-summary-bar{display:flex;gap:8px;flex-wrap:wrap;margin-top:13px}.sync-summary-chip{padding:7px 10px;border:1px solid var(--border);border-radius:10px;background:var(--card2);font-size:12px;color:var(--ink2)}.sync-summary-chip b{color:var(--accent2)}.sync-history{display:grid;gap:8px;margin-top:12px}.sync-history-row{display:flex;align-items:center;gap:8px;padding:9px 10px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}.sync-history-row .shr-main{flex:1;min-width:0}.sync-history-row .shr-main b{display:block;font-size:13px;color:var(--ink)}.sync-history-row .shr-main span{display:block;margin-top:2px;font-size:12px;color:var(--ink3)}.sync-history-row .shr-action{flex:none}.sync-history-empty{padding:8px 0;color:var(--ink3);font-size:12px}.account-device-list{display:grid;gap:6px;margin-top:10px}.account-device{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--card2);font-size:12px}.account-device b{flex:1}.account-device small{color:var(--ink3)}
@media(prefers-reduced-motion:reduce){.auth-restore-status i{animation:none}.auth-screen .input,.auth-screen .btn,.auth-note button,.auth-tabs button{transition:none}}
@media(max-width:560px){.auth-screen{padding:24px 16px}.auth-shell{padding:24px}.sync-panel{padding:22px 18px}.sync-history-row{align-items:flex-start;flex-wrap:wrap}.sync-history-row .shr-action{margin-left:auto}}
/* 账号同步轻状态与品牌页眉 */
.brand-header{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:4px;width:100%;line-height:1.35}
.brand-header .brand-school{font-size:12px;color:var(--ink3);letter-spacing:.12em}
.brand-header .brand-group{font-size:12px;color:var(--ink2);letter-spacing:.14em}
.brand-header .brand-title{font-size:16px;color:var(--ink);font-weight:700;letter-spacing:.08em;margin-top:3px}
.sync-status-badge{position:fixed;left:16px;bottom:16px;z-index:var(--z-sticky);max-width:220px;border:1px solid var(--border);border-radius:999px;background:color-mix(in srgb,var(--card) 94%,transparent);box-shadow:0 8px 22px -15px rgba(45,55,46,.5);backdrop-filter:blur(10px)}
.sync-status-badge[hidden]{display:none}.sync-status-badge button{display:flex;align-items:center;gap:8px;min-height:44px;padding:7px 13px;color:var(--ink2);font-size:12px;white-space:nowrap}.sync-status-dot{width:8px;height:8px;border-radius:50%;background:var(--ink3);flex:none}.sync-status-badge[data-state="synced"] .sync-status-dot{background:var(--ok)}.sync-status-badge[data-state="syncing"] .sync-status-dot,.sync-status-badge[data-state="pending"] .sync-status-dot{background:var(--warn)}.sync-status-badge[data-state="failed"] .sync-status-dot,.sync-status-badge[data-state="conflict"] .sync-status-dot{background:var(--danger)}.sync-status-badge[data-state="synced"] button{color:#4f815f}.sync-status-badge[data-state="failed"] button,.sync-status-badge[data-state="conflict"] button{color:var(--danger)}
.todo-view-tabs{margin:2px 0 10px}.todo-view-tabs .pill{min-height:36px}.todo-history-group{padding:9px 0;border-top:1px dashed var(--line)}.todo-history-group:first-child{border-top:0}.todo-history-title{font-size:12px;color:var(--ink3);margin-bottom:5px}
@media(max-width:768px){.sync-status-badge{left:12px;bottom:calc(64px + env(safe-area-inset-bottom));max-width:calc(100vw - 24px)}.sync-status-badge button{max-width:100%;overflow:hidden;text-overflow:ellipsis}.brand-header .brand-title{font-size:14px}}

/* 品牌区美化：克制的校刊式信息层级 */
.side-logo{padding:24px 18px 21px;display:block;text-align:center;background:var(--card);border-bottom:1px solid var(--line)}
.brand-header{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;text-align:center;line-height:1.35}
.brand-mark{width:54px;height:54px;margin:0 auto 14px;padding:3px;border-radius:16px;background:var(--accent-soft);border:1px solid color-mix(in srgb,var(--accent) 34%,var(--border));box-shadow:0 6px 12px -10px var(--accent2);}
.brand-mark img{width:100%;height:100%;display:block;object-fit:cover;border-radius:16px;transform:rotate(3deg)}
.brand-school{font-family:'Noto Serif SC','Songti SC',serif;font-size:12px;color:var(--ink2);letter-spacing:.16em;white-space:nowrap}
.brand-group{margin-top:4px;font-family:'Noto Serif SC','Songti SC',serif;font-size:13px;color:var(--ink);font-weight:600;letter-spacing:.18em;white-space:nowrap}
.brand-divider{width:28px;height:1px;margin:13px auto 11px;background:var(--line-strong)}
.brand-title{font-family:'Noto Serif SC','Songti SC',serif;font-size:20px;color:var(--accent2);font-weight:700;letter-spacing:.11em;white-space:nowrap;text-shadow:0 1px 0 rgba(255,255,255,.7)}
.brand-caption{margin-top:6px;font-size:12px;color:var(--ink3);letter-spacing:.18em;line-height:1.2;text-indent:.18em}
@media(max-width:768px){.side-logo{padding:16px 14px}.brand-mark{width:44px;height:44px;margin-bottom:8px;border-radius:16px}.brand-mark img{border-radius:10px}.brand-school{font-size:12px}.brand-group{font-size:12px}.brand-divider{margin:8px auto}.brand-title{font-size:14px}.brand-caption{display:none}}

/* 侧边栏稳定布局：品牌区、导航区、底部用户区各自不互相挤压 */
.sidebar{overflow:hidden}
.side-logo{flex:none}
.side-nav{min-height:0;overflow-y:auto;overflow-x:hidden}
 .side-foot{flex:none}

/* ---------- UI 重构第一期：设计令牌与应用壳层 ---------- */
/* UI 重构第一期的冷蓝灰令牌已退役：全部改指 tokens.css 暖色令牌（下方 var(--ui-*) 已批量改名）。 */
.app{background:var(--bg)}
.shell-content{display:flex;flex:1;min-width:0;height:100vh;flex-direction:column;overflow:hidden}
.app-topbar{height:60px;flex:none;display:flex;align-items:center;gap:var(--space-3);padding:0 var(--space-6);background:var(--glass-bg);border-bottom:1px solid var(--glass-border);backdrop-filter:blur(var(--glass-blur)) saturate(1.3);-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(1.3);box-shadow:var(--shadow-1);z-index:var(--z-sticky);transition:margin-top .22s ease}
/* 水平内边距与 .main-in（--space-6）一致，顶栏「我的班级」与下方快捷入口/页面内容左缘对齐 */
/* 下滑隐藏：在流内用负 margin 收起自身 60px 高度，主区同步加高，不出现空洞；上滑或回到顶部即恢复 */
.app-topbar.is-scroll-hidden{margin-top:-60px;pointer-events:none}
.app-topbar-context{display:flex;align-items:center;gap:var(--space-2);min-width:0}.app-topbar-label{font-size:12px;color:var(--muted);white-space:nowrap}.app-topbar .input{width:132px;min-height:36px;padding:6px 9px;border-radius:var(--control-radius);background:var(--control-bg);border-color:var(--line);font-size:13px}
.app-topbar-date{font-size:12px;color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums}
.app-topbar-date-main+.app-topbar-date-sub::before{content:" · "}.app-topbar-search{display:flex;align-items:center;gap:0;flex:1;min-width:0;max-width:400px;margin-left:auto}.app-topbar-search .input{width:100%;min-width:0;border-radius:var(--control-radius) 0 0 var(--control-radius)}.app-topbar-search button{min-width:36px;height:36px;padding:0 10px;border:1px solid var(--line);border-left:0;border-radius:0 var(--control-radius) var(--control-radius) 0;background:var(--control-bg);color:var(--accent2);font-size:13px;white-space:nowrap;flex-shrink:0}
.app-topbar-action{min-height:36px;padding:0 10px;white-space:nowrap} /* C1：盒/hover 由 btn ghost sm 承担；data-state 语义色保留 */.app-topbar-action:hover,.app-topbar-search button:hover{border-color:var(--accent2);color:var(--accent2);background:var(--card2)}.app-topbar-sync[data-state="synced"]{color:var(--ok-strong)}.app-topbar-sync[data-state="pending"],.app-topbar-sync[data-state="syncing"]{color:var(--warn-strong)}.app-topbar-sync[data-state="failed"],.app-topbar-sync[data-state="conflict"]{color:var(--bad-strong)}.app-topbar-user{display:grid;place-items:center;width:36px;height:36px;padding:0;border:1px solid var(--line);border-radius:50%;background:var(--control-bg);color:var(--accent2);font-weight:700;font-size:13px}
.shell-content>.main{flex:1;min-height:0;background:var(--bg)}.main-in{max-width:1600px;padding:var(--space-5) var(--space-6) 96px}.page-head{padding-left:0}.page-head::before{display:none}.page-head h1{font-family:var(--font-sans);font-size:var(--fs-h2);letter-spacing:.02em;color:var(--ink)}.page-head p{font-size:14px;line-height:1.6;color:var(--muted)}.page-head .kicker{font-size:var(--fs-xs);letter-spacing:.14em;color:var(--accent2)}
.card,.zw-card{border-color:var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-1)}.card-head h3{font-size:16px;color:var(--ink)}.card-head .hint,.settings-card-intro{font-size:12px;color:var(--muted)}.btn{min-height:var(--control-h);border-radius:var(--control-radius);font-size:var(--fs-base)}.btn.accent{background:var(--accent)}.btn.accent:hover{background:var(--accent2)}.btn.ghost{background:#fff;border-color:var(--line);color:var(--ink)}.btn.danger{background:var(--bad-bg);border:1px solid #ecd2cd;color:var(--bad-strong)}.input,textarea.input,select.input{border-color:var(--line);border-radius:var(--control-radius);background:var(--control-bg);font-size:14px}.input:focus,textarea.input:focus,select.input:focus{border-color:var(--accent2);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 22%, transparent)}
.side-nav{padding:var(--space-3)}.nav-group{margin:0 0 var(--space-3)}.nav-group-title{display:block;padding:7px 10px 4px;color:var(--muted);font-size:12px;letter-spacing:.08em;font-weight:700}.nav-group:first-child .nav-group-title{display:none}.side-item .ic{display:none}.side-item.active{background:var(--accent-soft);border-color:transparent;box-shadow:inset 3px 0 0 var(--accent);color:var(--accent2);font-weight:600}.side-item .nav-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sidebar{width:232px;background:var(--card);border-right-color:var(--line);box-shadow:6px 0 16px -12px rgba(93,62,44,.18)}.side-logo{background:var(--card);border-bottom-color:var(--line)}.side-foot{color:var(--muted);border-top-color:var(--line)}.class-switcher{padding:var(--space-3);border-top:1px solid var(--line)}.class-switcher .input{border-radius:var(--control-radius)}
.mobile-nav-drawer{display:none}.m-bottom{display:none!important}
@media (max-width:768px){.app{display:block;height:auto;overflow:visible}.sidebar,.app-topbar{display:none}.shell-content{height:auto;display:block;overflow:visible}.shell-content>.main{overflow:visible;padding-bottom:72px}.main-in{padding:16px 12px 88px}.m-topbar{display:flex;position:sticky;top:0;height:56px;padding:8px 12px;background:var(--glass-bg);border-bottom:1px solid var(--glass-border);backdrop-filter:blur(var(--glass-blur)) saturate(1.3);-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(1.3);box-shadow:var(--shadow-1);z-index:var(--z-sticky)}.m-topbar .flower-logo{display:none}.m-topbar b{font-size:14px;color:var(--ink)}.mobile-nav-toggle{display:grid;place-items:center;width:44px;height:44px;flex:none;border:1px solid var(--line);border-radius:var(--control-radius);background:var(--control-bg);color:var(--accent2);font-size:16px}.m-topbar .input{min-height:36px;border-radius:var(--control-radius);background:var(--control-bg);border-color:var(--line)}.mobile-nav-drawer{position:fixed;inset:0;z-index:var(--z-drawer);display:block;visibility:hidden;pointer-events:none}.mobile-nav-drawer.is-open{visibility:visible;pointer-events:auto}.mobile-nav-drawer-backdrop{position:absolute;inset:0;background:rgba(40,35,30,.42);opacity:0;transition:opacity .18s}.mobile-nav-drawer-panel{position:absolute;top:0;bottom:0;left:0;width:min(320px,86vw);height:auto;max-height:none;padding:10px 8px max(12px,env(safe-area-inset-bottom));overflow-y:auto;background:var(--card);border:1px solid var(--line);border-left:0;border-radius:0 16px 16px 0;box-shadow:var(--shadow-pop);transform:translateX(-105%);transition:transform .18s}.mobile-nav-drawer.is-open .mobile-nav-drawer-backdrop{opacity:1}.mobile-nav-drawer.is-open .mobile-nav-drawer-panel{transform:none}.mobile-nav-drawer-head{display:flex;align-items:center;justify-content:space-between;min-height:44px;padding:0 2px 8px;border-bottom:1px solid var(--line);color:var(--ink);font-size:12px;font-weight:700;white-space:nowrap}.mobile-nav-drawer-close{width:44px;height:44px;flex:none;border:1px solid var(--line);border-radius:var(--control-radius);background:var(--control-bg);color:var(--accent2);font-size:20px}.mobile-nav-drawer .side-nav{padding:6px 0}.mobile-nav-drawer .nav-group{margin-bottom:6px}.mobile-nav-drawer .nav-group-title{padding:6px 2px 3px;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-nav-drawer .side-item{min-height:40px;height:40px;padding:7px 4px;margin:1px 0;justify-content:center;border-radius:8px;font-size:12px;text-align:center}.mobile-nav-drawer .side-item::before{display:none}.mobile-nav-drawer .nav-short{display:block;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:1.25}.mobile-nav-drawer .nav-label{display:none!important}.m-topbar select{margin-left:auto}.page-head h1{font-size:20px}.card{border-radius:var(--radius-lg)}}
/* 周课表/听课课程表卡片阅读视图（移动端默认；桌面经视图切换按钮启用，不锁媒体查询） */
.sched-reading .sched-wrap{display:none}
#schedViewToggle[hidden],#auditViewToggle[hidden]{display:none}
#schedMobileView:not([hidden]),#auditMobileView:not([hidden]){display:block;margin-top:8px}
/* 星期导航按当前配置的日期数组等分可用宽度：5 天填满，6/7 天按实际数量均分；
   未配置的周末不补空槽（天数由数据决定，不用 nth-child 造占位）。 */
.smw-days{display:flex;gap:6px;overflow-x:auto;padding:2px 0 8px}
.smw-day{flex:1 1 0;min-width:0;min-height:44px;padding:7px 4px;border:1px solid var(--border);border-radius:10px;background:var(--card);color:var(--ink2);font-size:12.5px;font-weight:600;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
.smw-day.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent2)}
.smw-day small{display:block;font-weight:400;font-size:10px;opacity:.85;overflow:hidden;text-overflow:ellipsis}
.smw-list{display:grid;gap:8px}
.smw-item{display:grid;grid-template-columns:78px minmax(0,1fr);gap:10px;align-items:start;width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:12px;background:var(--card2);color:var(--ink);text-align:left;cursor:pointer}
.smw-item--static{cursor:default}
.smw-time{font-size:11.5px;color:var(--ink2);line-height:1.5;word-break:break-all}
.smw-time b{display:block;font-size:13px;color:var(--ink)}
.smw-course{font-size:14px;font-weight:700;line-height:1.55;word-break:break-word}
.smw-course .sched-cell-kind{margin-right:6px}
.smw-course .audit-entry-list{justify-content:flex-start}
.smw-course .audit-entry-list.is-single{width:100%;margin-inline:0}
.smw-class{display:block;margin-top:2px;font-size:11.5px;font-weight:700;color:var(--class-color,var(--ink2))}
.smw-empty{padding:16px;border:1px dashed var(--border);border-radius:12px;color:var(--ink3);font-size:12.5px;text-align:center}
.smw-note{margin-top:8px;color:var(--ink3);font-size:11.5px;line-height:1.6}
/* 课程表阅读层级：保留全站暖色令牌，班级色只用于课程卡片。 */
.view[data-view="schedule"] .page-head{margin-bottom:18px}
.view[data-view="schedule"] .page-head p{margin-top:8px}
.view[data-view="schedule"] #schedModePills{margin-bottom:16px}
/* 日期范围与统计：位于课程内容与操作区之后的底部辅助条（20260916 下移），视觉降权 */
.sched-week-overview{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin:14px 0 0;padding:9px 14px;border:1px dashed var(--border);border-radius:10px;background:var(--card2)}
.sched-week-copy{display:grid;gap:3px}
.sched-week-copy strong{font-size:14px;font-weight:650;color:var(--ink);font-variant-numeric:tabular-nums}
.sched-week-copy>span{font-size:12px;color:var(--ink3)}
.sched-week-stats{display:flex;align-items:center;gap:18px;color:var(--ink2);font-size:12px}
.sched-week-stats b{font-size:16px;font-weight:650;color:var(--ink);font-variant-numeric:tabular-nums}
.view[data-view="schedule"] .sched-wrap{background:var(--card);border-color:var(--line);box-shadow:none;border-radius:12px}
.view[data-view="schedule"] table.sched{background:var(--card)}
.view[data-view="schedule"] table.sched th,.view[data-view="schedule"] table.sched td{border:0;border-right:1px solid color-mix(in srgb,var(--line) 55%,transparent);border-bottom:1px solid color-mix(in srgb,var(--line) 65%,transparent)}
.view[data-view="schedule"] table.sched tr>:last-child{border-right:0}
.view[data-view="schedule"] table.sched tbody tr:last-child>td{border-bottom:0}
.view[data-view="schedule"] table.sched thead th{padding:12px 8px;background:var(--card);box-shadow:none;letter-spacing:0}
.sched-day-name{display:block;color:var(--ink2);font-size:13px;font-weight:600}
.sched-day-date{display:flex;justify-content:center;align-items:center;gap:5px;min-height:22px;margin-top:3px;color:var(--ink3);font-size:12px;font-weight:400;font-variant-numeric:tabular-nums}
.sched-day-date em{padding:1px 5px;border-radius:5px;background:var(--accent);color:var(--on-accent,#fff);font-size:12px;font-style:normal}
.sched-period-heading{color:var(--ink3);font-size:12px;font-weight:500}
.view[data-view="schedule"] table.sched td.ptime{padding:12px 8px;background:var(--card);box-shadow:none;color:var(--ink2);font-size:12px;font-variant-numeric:tabular-nums}
.view[data-view="schedule"] table.sched td.ptime small{display:block;margin-top:3px;color:var(--ink3);font-size:12px;opacity:1}
.view[data-view="schedule"] table.sched td.ptime br{display:none}
#schedTable{table-layout:fixed;min-width:720px}
#schedTable th:first-child{width:100px}
#schedTable td.cell{border-color:color-mix(in srgb,var(--line) 65%,transparent);padding:5px;min-width:0;height:70px;vertical-align:top;background:var(--card);color:var(--ink);font-weight:400}
#schedTable td.cell.today-col{background:color-mix(in srgb,var(--accent) 3%,var(--card))}
#schedTable td.cell:hover{background:var(--accent-soft)}
#schedTable .sched-lesson{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:3px;min-height:58px;padding:8px 10px;border-left:3px solid var(--class-color,var(--accent));border-radius:4px 8px 8px 4px;background:color-mix(in srgb,var(--class-color,var(--accent)) 9%,var(--card));text-align:left;overflow-wrap:anywhere}
.sched-lesson-title{display:block;font-size:13px;font-weight:650;line-height:1.45;color:var(--ink)}
#schedTable .font-a .sched-lesson-title{font-size:12px}
#schedTable .font-c .sched-lesson-title{font-size:16px}
#schedTable .sched-cell-class{color:var(--ink2);font-size:12px;font-weight:400;white-space:normal;overflow-wrap:anywhere}
#schedTable .sched-open-slot{display:block;padding-top:17px;color:var(--ink3);opacity:0}
.is-editing #schedTable td.cell:hover .sched-open-slot,.is-editing #schedTable td.cell:focus-visible .sched-open-slot{opacity:1}
.view[data-view="schedule"] .sched-actionbar{margin-top:16px;padding-top:12px;border-top:1px solid var(--line)}
.smw-days{gap:4px;padding:0 0 12px;overflow:visible;border-bottom:1px solid var(--line)}
.smw-day{position:relative;min-height:60px;padding:8px 3px;border-color:transparent;border-radius:10px;background:transparent;color:var(--ink2);font-variant-numeric:tabular-nums}
.smw-day small{margin-top:5px;font-size:12px;opacity:1;font-weight:400}
.smw-day.active{background:var(--accent);border-color:var(--accent);color:var(--on-accent,#fff)}
.smw-day.is-today::after{content:"";position:absolute;top:5px;right:5px;width:4px;height:4px;border-radius:50%;background:currentColor}
.smw-day-summary{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:48px;color:var(--ink);font-size:13px;font-weight:600}
.smw-day-summary b{margin-left:10px;font-size:12px;font-weight:400;color:var(--ink3)}
.smw-today{min-height:44px;padding:4px 8px;color:var(--accent2);background:transparent;border:0;border-radius:8px;font-size:12px;cursor:pointer}
.smw-item{grid-template-columns:76px minmax(0,1fr);gap:10px;padding:14px 12px;background:color-mix(in srgb,var(--class-color,var(--accent)) 7%,var(--card));border:1px solid color-mix(in srgb,var(--class-color,var(--accent)) 12%,var(--line));border-left:3px solid var(--class-color,var(--accent));border-radius:5px 12px 12px 5px}
.smw-time{padding-top:1px;font-size:12px;color:var(--ink2);font-variant-numeric:tabular-nums;word-break:normal;overflow-wrap:anywhere}
.smw-time b{margin-bottom:5px;font-size:12px;font-weight:500}
.smw-course{min-width:0;font-size:15px;line-height:1.5;color:var(--ink)}
.smw-title{display:block}
.smw-class{margin-top:5px;color:var(--ink2);font-size:12px;font-weight:400}
.smw-item--static{background:var(--card2);border-left-color:var(--line)}
.smw-note{margin-top:12px;font-size:12px}
.smw-empty{grid-column:1/-1;padding:26px 12px;background:var(--card2);border-style:solid;color:var(--ink2)}
.smw-day:focus-visible,.smw-today:focus-visible,.smw-item:focus-visible,#schedTable td:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset,2px)}
@media screen and (max-width:768px){
  .sched-week-overview{padding:8px 12px;gap:8px;margin:12px 0 0}
  .sched-week-copy strong{font-size:14px}
  .sched-week-stats{gap:12px;font-size:12px}
  .sched-week-stats b{font-size:16px}
  .view[data-view="schedule"] .page-head p{font-size:13px}
}
/* ---------- 移动端我的课表表格密度（20260915） ---------- */
/* 收紧单元格内边距/行高/表头/节次列/课程文字与标签，不做整体缩放；信息完整、触控目标不小于操作需要。 */
@media screen and (max-width:768px){
  .view[data-view="schedule"] table.sched thead th{padding:6px 4px}
  .sched-day-name{font-size:12px}
  .sched-day-date{min-height:16px;margin-top:1px;font-size:11px}
  .sched-period-heading{font-size:11px}
  .view[data-view="schedule"] table.sched td.ptime{padding:5px 4px;font-size:11px}
  .view[data-view="schedule"] table.sched td.ptime small{margin-top:1px;font-size:10.5px}
  #schedTable{min-width:600px}
  #schedTable th:first-child{width:64px}
  #schedTable td.cell{height:52px;padding:3px}
  #schedTable .sched-lesson{min-height:42px;padding:4px 6px;gap:2px;border-left-width:2px;border-radius:4px 6px 6px 4px}
  #schedTable .sched-lesson-title{font-size:12px}
  #schedTable .font-a .sched-lesson-title{font-size:11px}
  #schedTable .font-c .sched-lesson-title{font-size:14px}
  #schedTable .sched-cell-class{font-size:11px}
  #schedTable .sched-open-slot{padding-top:11px}
  .sched-cell-kind{padding:1px 5px;font-size:10.5px}
  .sched-cell-kind::before{margin-right:3px}
}
html[data-dark="1"] .smw-day.active,html[data-dark="1"] .sched-day-date em{color:var(--bg)}
@media screen and (min-width:769px){
  .smw-list{grid-template-columns:repeat(2,minmax(0,1fr))}
  #schedMobileView:not([hidden]),#auditMobileView:not([hidden]){max-width:860px}
}
/* ---------- 听课卡片视图：桌面左卡片右迷你课表（20260915） ---------- */
/* 迷你课表是完整表格的紧凑只读镜像：同数据同渲染、无独立交互与状态；移动端不显示。 */
.audit-duo{min-width:0}
.audit-mini-title{margin:0 0 8px;font-size:12px;font-weight:600;color:var(--ink2)}
.audit-mini-scroll{overflow-x:auto}
table.audit-mini-table{width:100%;min-width:520px;border-collapse:collapse;table-layout:fixed}
table.audit-mini-table th,table.audit-mini-table td{border:1px solid color-mix(in srgb,var(--line) 62%,transparent);padding:4px 3px;text-align:center;vertical-align:middle}
table.audit-mini-table thead th{background:var(--card);color:var(--ink2);font-weight:600;font-size:11.5px;padding:5px 3px;letter-spacing:.02em}
table.audit-mini-table th.today-col{background:var(--accent-soft);color:var(--accent2)}
table.audit-mini-table td.today-col{background:color-mix(in srgb,var(--accent) 4%,var(--card))}
table.audit-mini-table td.has{background:color-mix(in srgb,var(--accent-soft) 36%,var(--card))}
table.audit-mini-table .audit-mini-time{background:var(--card2);color:var(--ink3);font-size:11px;white-space:nowrap}
table.audit-mini-table th:first-child,table.audit-mini-table td.audit-mini-time{width:44px}
.audit-mini-empty{color:var(--ink3);opacity:.55;font-size:11px}
table.audit-mini-table .audit-entry-list{gap:3px}
table.audit-mini-table .audit-entry-list.is-single{width:100%;margin-inline:0}
table.audit-mini-table .audit-entry{min-height:22px;padding:2px 4px;border-radius:6px;font-size:11px}
table.audit-mini-table .audit-entry-list.is-multi .audit-entry{padding:2px 4px;font-size:10.5px}
@media screen and (min-width:769px){
  .sched-reading .audit-duo{display:grid;grid-template-columns:minmax(15rem,27%) minmax(0,1fr);gap:14px;align-items:start}
  #auditMiniView:not([hidden]){display:block;min-width:0;padding:10px 10px 8px;border:1px solid var(--line);border-radius:12px;background:var(--card)}
  /* 左栏收窄后卡片列表恢复单列：保证课程条目横排可读，不被双列网格压成竖排 */
  .sched-reading #auditMobileView .smw-list{grid-template-columns:1fr}
}
@media screen and (max-width:768px){
  #auditMiniView:not([hidden]){display:none}
}
/* ---------- 我的课表卡片视图：桌面左卡片右迷你整周表（20260916） ---------- */
/* 迷你表格为同一份课表数据的紧凑只读预览，仅桌面卡片阅读态显示；
   完整表格视图保持独立，切换逻辑不变。 */
.sched-duo{min-width:0}
.sched-mini-title{margin:0 0 8px;font-size:12px;font-weight:600;color:var(--ink2)}
.sched-mini-scroll{max-height:264px;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable}
table.sched-mini-table{width:100%;min-width:460px;border-collapse:collapse;table-layout:fixed}
table.sched-mini-table th,table.sched-mini-table td{border:1px solid color-mix(in srgb,var(--line) 62%,transparent);padding:4px 3px;text-align:center;vertical-align:middle}
table.sched-mini-table thead th{background:var(--card);color:var(--ink2);font-weight:600;font-size:11.5px;padding:5px 3px;letter-spacing:.02em;position:sticky;top:0;z-index:1}
table.sched-mini-table th.today-col{background:var(--accent-soft);color:var(--accent2)}
table.sched-mini-table td.today-col{background:color-mix(in srgb,var(--accent) 4%,var(--card))}
table.sched-mini-table td.has{background:color-mix(in srgb,var(--accent-soft) 30%,var(--card))}
table.sched-mini-table td.class-colored.has{background:var(--class-color-bg)}
table.sched-mini-table .sched-mini-time{background:var(--card2);color:var(--ink3);font-size:11px;white-space:nowrap}
table.sched-mini-table th:first-child,table.sched-mini-table td.sched-mini-time{width:42px}
.sched-mini-empty{color:var(--ink3);opacity:.55;font-size:11px}
.sched-mini-cell{display:flex;flex-direction:column;align-items:flex-start;gap:1px;min-width:0;padding:2px 3px;border-left:2px solid var(--class-color,var(--accent));border-radius:3px 5px 5px 3px;background:color-mix(in srgb,var(--class-color,var(--accent)) 8%,var(--card));text-align:left}
.sched-mini-course{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;color:var(--ink)}
.sched-mini-class{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;color:var(--ink3)}
.sched-mini-cell .sched-cell-kind{padding:0 4px;font-size:9.5px}
.sched-mini-cell .sched-cell-kind::before{width:3px;height:3px;margin-right:2px}
@media screen and (min-width:769px){
  /* 主卡片左（1fr 优先），迷你表右（辅助，不反超） */
  .sched-reading .sched-duo{display:grid;grid-template-columns:minmax(0,1fr) minmax(240px,31%);gap:16px;align-items:start}
  #schedMiniView:not([hidden]){display:block;min-width:0;padding:10px;border:1px solid var(--line);border-radius:12px;background:var(--card)}
  /* 桌面卡片态星期导航压缩：44px 级高度，保留星期/日期/今天标识与选中态 */
  .sched-reading #schedMobileView .smw-days{padding:0 0 8px}
  .sched-reading #schedMobileView .smw-day{min-height:44px;padding:4px 3px}
  .sched-reading #schedMobileView .smw-day small{margin-top:1px;font-size:10.5px}
  .sched-reading #schedMobileView .smw-day-summary{min-height:38px}
}
@media screen and (max-width:768px){
  #schedMiniView:not([hidden]){display:none}
}
@media screen and (max-width:768px){
  .modal-foot{position:sticky;bottom:0;z-index:5;margin:16px -24px -22px;padding:10px 16px calc(10px + env(safe-area-inset-bottom));background:var(--card);border-top:1px solid var(--line)}
  .modal-foot .btn{flex:1 1 auto;min-height:44px}
}
.comp-privacy-note{margin:-6px 0 12px;padding:8px 10px;border:1px solid var(--border);border-radius:10px;background:var(--card2);color:var(--ink2);font-size:12px;line-height:1.6;word-break:break-word}
.comp-privacy-note b{color:var(--ink)}
@media (prefers-reduced-motion:reduce){.sidebar,.mobile-nav-drawer-backdrop,.mobile-nav-drawer-panel,.app-topbar{transition:none}}
@media (prefers-reduced-transparency:reduce){.app-topbar,.m-topbar{background:var(--card);backdrop-filter:none;-webkit-backdrop-filter:none}}

/* ---------- 平板侧边栏：点击折叠并记住偏好 ---------- */
.sidebar-collapse-btn{position:absolute;top:10px;right:12px;z-index:2;display:grid;place-items:center;box-sizing:border-box;width:44px;height:44px;padding:0;border:1px solid var(--border);border-radius:10px;background:var(--card2);color:var(--ink2);line-height:1;cursor:pointer;transition:background-color .16s,border-color .16s,color .16s}
.sidebar-collapse-btn .ui-icon{display:block;flex:none;pointer-events:none}
.sidebar-collapse-btn:hover{background:var(--accent-soft);border-color:var(--accent);color:var(--ink)}
.sidebar-collapse-btn:focus-visible{outline:3px solid var(--ink);outline-offset:2px}
.nav-short{display:none}
@media (min-width:769px) and (max-width:1199px){
  .sidebar{width:208px;flex:none;overflow:hidden;transition:width .18s ease}
  .side-logo{position:relative;display:block;flex:none;min-height:126px;padding:22px 56px 16px 16px;overflow:hidden}
  .sidebar .brand-header{transform:none;min-width:0;width:100%;overflow:hidden}
  .sidebar .brand-school,.sidebar .brand-group,.sidebar .brand-title,.sidebar .brand-caption{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .sidebar .side-nav{min-height:0;flex:1;overflow-y:auto;overflow-x:hidden;padding:10px 8px}
  .sidebar .nav-group{position:relative}
  .sidebar .nav-group-title{display:block;opacity:1;pointer-events:auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .sidebar .side-item{justify-content:flex-start;min-height:40px;padding:9px 10px;gap:8px}
  .sidebar .side-item .ic{display:none}
  .sidebar .side-item .nav-short{display:none}
  .sidebar .side-item .nav-label{display:block;opacity:1;pointer-events:auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .sidebar .class-switcher,.sidebar .side-foot{opacity:1;pointer-events:auto;width:auto;overflow:visible}
  .main-in{padding-left:18px;padding-right:18px}
  .app-topbar{gap:8px;padding-left:18px;padding-right:18px}
  /* 平板档侧栏占 208px，日期单行放全文会挤压搜索框：改两行（日期·星期 / 周次），不再省略号截断 */
  .app-topbar-date{max-width:190px}
  .app-topbar-date-main{display:block}
  .app-topbar-date-sub{display:block}
  .app-topbar-date-main+.app-topbar-date-sub::before{content:none}
  .app-topbar-search{max-width:280px}
}
/* 平板窄档（769–920）：顶栏容不下完整搜索框（输入框会被压到 44px），日期与首页信息重复，让位给搜索 */
@media (min-width:769px) and (max-width:920px){
  .app-topbar-date{display:none}
}
/* ---------- 侧边栏收起态：≥769px 全部桌面档可用（≤768px 侧栏隐藏、走移动抽屉） ---------- */
@media (min-width:769px){
  .sidebar{transition:width .18s ease}
  .sidebar .side-logo{position:relative;transition:none}
  .sidebar.is-collapsed{width:68px}
  .sidebar.is-collapsed .side-logo{min-height:0;height:auto;padding:64px 8px 12px}
  /* 控制按钮保持顶部锚点；品牌区预留热区高度，不随图标切换跳位。 */
  .sidebar.is-collapsed .brand-header{display:flex;flex-direction:column;align-items:center;gap:6px}
  .sidebar.is-collapsed .brand-school,.sidebar.is-collapsed .brand-group,.sidebar.is-collapsed .brand-divider,.sidebar.is-collapsed .brand-title,.sidebar.is-collapsed .brand-caption{display:none}
  .sidebar.is-collapsed .brand-mark{width:40px;height:40px;margin:0;padding:3px}
  .sidebar.is-collapsed #sideNav{padding:8px}
  .sidebar.is-collapsed .side-foot{display:none}
  .sidebar.is-collapsed .nav-hub-card{display:flex;align-items:center;justify-content:center;width:100%;min-height:44px;padding:6px;text-align:center;border-radius:10px}
  .sidebar.is-collapsed #sideNav .nav-hub-card + .nav-hub-card{margin-top:8px}
  .sidebar.is-collapsed .nav-hub-card .nav-hub-name{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
  .sidebar.is-collapsed .nav-hub-card .nav-hub-desc,.sidebar.is-collapsed .nav-hub-card .nav-hub-arrow{display:none}
  .sidebar.is-collapsed .nav-hub-card.active{background:var(--accent-soft);border-radius:10px}
  .sidebar.is-collapsed .nav-hub-card.active .nav-hub-name{box-shadow:none;padding:0}
}
@media (prefers-reduced-motion:reduce){.sidebar{transition:none}}
@media (min-width:1200px){
  .sidebar{width:252px;flex:none}
}
@media (max-width:768px){
  .sidebar{display:none!important}
  .sidebar-collapse-btn{display:none!important}
  .mobile-nav-drawer .side-item .ic{display:none}
  .mobile-nav-drawer .side-item .nav-short{display:block;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center;font-size:12px;line-height:1.25}
  .mobile-nav-drawer .side-item .nav-label{display:none!important}
}

/* ---------- 两级工作导航：先选工作板块，再进入快捷入口 ---------- */
.nav-hub-list,.nav-context-list{display:grid;gap:4px}
/* 字体角色由基座显式声明：表单控件的 UA 默认字距是 normal，非按钮容器（抽屉里的班级行）
   则会继承正文的 0.02em。只靠元素默认值，两条路径的字距会不一致。 */
.nav-hub-card{position:relative;display:block;width:100%;min-height:48px;padding:10px 22px 9px 12px;border:0;border-radius:0;background:transparent;color:var(--ink);text-align:left;letter-spacing:normal;cursor:pointer;transition:color .16s,background-color .16s}
.nav-hub-card:hover{background:transparent;color:var(--accent2)}
.nav-hub-card .nav-hub-name{position:relative;display:inline-block;padding-bottom:1px;box-shadow:inset 0 -1px 0 transparent;transition:box-shadow .16s,color .16s,font-weight .16s}
.nav-hub-card:hover .nav-hub-name{box-shadow:inset 0 -1px 0 currentColor}
.nav-hub-card.active{background:transparent;border:0;box-shadow:none;transform:none;color:var(--accent2)}
.nav-hub-card.active .nav-hub-name{font-weight:700;box-shadow:inset 0 -2px 0 currentColor;padding-bottom:2px}
.nav-hub-card.active .nav-hub-desc{color:var(--muted)}
.nav-hub-name{display:block;font-size:14px;font-weight:700;line-height:1.4}
.nav-hub-desc{display:block;margin-top:3px;color:var(--ink3);font-size:12px;line-height:1.45;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nav-hub-arrow,.nav-shortcut-arrow{position:absolute;right:10px;top:50%;transform:translateY(-50%);color:var(--accent2);font-size:20px;line-height:1}
.nav-context-head{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:4px 8px;margin:0 2px 10px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.nav-context-head b{font-size:14px;color:var(--ink);line-height:1.35}.nav-context-head small{grid-column:2;color:var(--ink3);font-size:12px;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nav-context-back{grid-row:1 / span 2;min-height:36px;padding:6px 7px;border:1px solid var(--border);border-radius:8px;background:var(--card2);color:var(--accent2);font-size:12px;white-space:nowrap;cursor:pointer}.nav-context-back:hover{border-color:var(--accent);background:var(--accent-soft)}
.nav-shortcut{position:relative;display:block;width:100%;min-height:52px;padding:9px 28px 9px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card);color:var(--ink);text-align:left;cursor:pointer;transition:background-color .15s,border-color .15s}
.nav-shortcut:hover,.nav-shortcut.active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent2)}
.nav-shortcut-main{display:block;font-size:13px;font-weight:650;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nav-shortcut-desc{display:block;margin-top:2px;color:var(--ink3);font-size:12px;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media (min-width:769px){
  #sideNav{padding:12px 10px}.sidebar.is-collapsed #sideNav{padding:8px}
  .nav-hub-card{min-height:72px}.nav-shortcut{min-height:52px}
}
@media (max-width:768px){
  /* 移动端抽屉：增加板块之间的呼吸感，避免卡片挤在一起 */
  .mobile-nav-drawer-panel{width:min(310px,78vw);padding:12px 12px max(16px,env(safe-area-inset-bottom));border-radius:0 18px 18px 0}
  .mobile-nav-drawer .side-nav{padding:10px 0}
  .mobile-nav-drawer .nav-group{margin-bottom:12px}
  .mobile-nav-drawer .nav-hub-list,.mobile-nav-drawer .nav-context-list{gap:4px}
  .mobile-nav-drawer .nav-hub-card{min-height:48px;padding:9px 18px 8px 10px;border-radius:0}
  .mobile-nav-drawer .nav-hub-name{font-size:13px;line-height:1.4}.mobile-nav-drawer .nav-hub-desc{margin-top:3px;font-size:12px;line-height:1.4;white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
  .mobile-nav-drawer .nav-context-head{margin:0 2px 10px;padding-bottom:10px;gap:4px 8px}.mobile-nav-drawer .nav-context-head b{font-size:14px}.mobile-nav-drawer .nav-context-head small{font-size:12px}.mobile-nav-drawer .nav-context-back{min-height:36px;padding:6px 7px;font-size:12px}
  .mobile-nav-drawer .nav-shortcut{min-height:50px;padding:10px 28px 10px 11px;border-radius:10px}.mobile-nav-drawer .nav-shortcut-main{font-size:13px;white-space:normal;line-height:1.35}.mobile-nav-drawer .nav-shortcut-desc{display:block;margin-top:2px;font-size:12px;line-height:1.35}.mobile-nav-drawer .nav-shortcut-arrow{right:10px;font-size:20px}
}

/* ---------- 页面内独立快捷入口：二级菜单不再藏在导航抽屉里 ---------- */
.page-shortcuts{display:flex;align-items:center;gap:16px;min-width:0;margin:0 0 22px;padding:0 0 14px;border-bottom:1px solid color-mix(in srgb,var(--line) 72%,transparent);background:transparent}
.page-shortcuts-head{display:flex;align-items:baseline;gap:8px;flex:0 0 auto;max-width:260px;min-width:0;color:var(--ink)}
.page-shortcuts-kicker{font-size:12px;font-weight:600;letter-spacing:.14em;color:var(--accent2);text-transform:uppercase;white-space:nowrap}
.page-shortcuts-head strong{font-size:13px;font-weight:600;white-space:nowrap}
.page-shortcuts-head small{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:12px}
.page-shortcuts-bar{display:flex;align-items:center;gap:8px;flex:1 1 auto;min-width:0}
.page-shortcuts-list{display:flex;align-items:center;gap:8px;flex:1 1 auto;min-width:0;overflow:hidden}
.page-shortcut{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:4px;flex:0 0 auto;height:36px;padding:0 12px;border:1px solid transparent;border-radius:var(--radius-lg);background:transparent;color:var(--muted);font-size:13px;line-height:1;white-space:nowrap;overflow:hidden;cursor:pointer;transition:background-color .16s,border-color .16s,color .16s,transform .16s}
.page-shortcut-ic{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;flex:0 0 auto;color:currentColor;opacity:.8}
.page-shortcut-ic svg{display:block;width:18px;height:18px}
.page-shortcut-main{min-width:0;font-size:13px;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.page-shortcut:hover,.page-shortcut:focus-visible{border-color:var(--line);background:var(--card);color:var(--ink);transform:translateY(-1px)}
.page-shortcut.active{border-color:color-mix(in srgb,var(--accent2) 30%,var(--line));background:color-mix(in srgb,var(--accent2) 9%,var(--card));color:var(--accent2);font-weight:600}
/* 当前入口保留底部指示线，悬停时不整体上移，避免指示线被视觉上截断。 */
.page-shortcut.active:hover,.page-shortcut.active:focus-visible{transform:none}
.page-shortcut.active .page-shortcut-ic{opacity:1}
.page-shortcut.active::after{content:"";position:absolute;left:12px;right:12px;bottom:5px;height:2px;border-radius:8px;background:color-mix(in srgb,var(--accent2) 65%,transparent)}
.page-shortcut.is-disabled{opacity:.42;cursor:not-allowed;pointer-events:none}
.page-shortcuts-more{position:relative;flex:0 0 auto}
.page-shortcut-more{gap:6px;padding:0 10px}
.page-shortcut-more .page-shortcut-ic{width:14px;height:14px}
.page-shortcut-more .page-shortcut-ic svg{width:14px;height:14px}
.page-shortcut-count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:10px;background:color-mix(in srgb,var(--muted) 16%,transparent);color:var(--muted);font-size:12px;font-weight:600;line-height:1}
.page-shortcut-more.is-open{border-color:var(--line);background:var(--card);color:var(--ink)}
.page-shortcut-more.has-active .page-shortcut-count{background:var(--accent2);color:var(--card)}
.page-shortcuts-menu{position:absolute;top:calc(100% + 6px);right:0;z-index:var(--z-sticky);display:none;min-width:212px;max-width:min(288px,78vw);max-height:min(60vh,420px);overflow:auto;padding:6px;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--card);box-shadow:0 12px 26px -18px rgba(61,63,67,.55),0 2px 6px -3px rgba(61,63,67,.28)}
.page-shortcuts-more.is-open .page-shortcuts-menu{display:block}
.page-shortcuts-menu-item{display:flex;align-items:center;gap:8px;width:100%;min-height:44px;padding:8px 10px;border:0;border-radius:var(--control-radius);background:transparent;color:var(--ink);text-align:left;cursor:pointer;transition:background-color .14s,color .14s}
.page-shortcuts-menu-item:hover,.page-shortcuts-menu-item:focus-visible{background:color-mix(in srgb,var(--accent2) 8%,transparent)}
.page-shortcuts-menu-item.active{background:color-mix(in srgb,var(--accent2) 12%,transparent);color:var(--accent2)}
.page-shortcuts-menu-item.is-disabled{opacity:.42;cursor:not-allowed;pointer-events:none}
.page-shortcuts-menu-item .mi-ic{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;flex:0 0 auto;color:currentColor;opacity:.8}
.page-shortcuts-menu-item .mi-ic svg{display:block;width:16px;height:16px}
.page-shortcuts-menu-item .mi-body{display:flex;flex-direction:column;gap:4px;min-width:0}
.page-shortcuts-menu-item .mi-main{font-size:13px;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.page-shortcuts-menu-item .mi-desc{font-size:12px;line-height:1.4;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media (max-width:768px){
  /* 保持移动导航只承担一级板块选择，宽度约为页面三分之一 */
  .mobile-nav-drawer-panel{width:min(320px,86vw);padding:10px 8px max(12px,env(safe-area-inset-bottom));border-radius:0 16px 16px 0}
  .page-shortcuts{display:block;margin:0 -1px 17px;padding:0 0 12px;border-bottom-color:color-mix(in srgb,var(--line) 58%,transparent)}
  .page-shortcuts-head{gap:6px;max-width:none;margin-bottom:9px}.page-shortcuts-kicker{font-size:12px}.page-shortcuts-head strong{font-size:13px}.page-shortcuts-head small{font-size:12px;max-width:52vw}
  .page-shortcuts-bar{gap:6px}
  .page-shortcuts-list{gap:6px}
  .page-shortcut{height:44px;padding:0 13px}
  .page-shortcuts-menu{max-width:min(288px,86vw)}
}
@media (prefers-reduced-motion:reduce){.page-shortcut,.page-shortcuts-menu-item{transition:none}}

/* 教师日常首页：沿用工作台卡片，不引入装饰性看板。 */
.teacher-onboarding{display:flex;flex-wrap:wrap;gap:8px}.teacher-onboarding{list-style:none;padding:0;margin:12px 0 0}
.teacher-onboarding li{flex:1 1 180px}
.teacher-onboarding .btn{width:100%}
.home-secondary{margin-top:16px}
.home-secondary summary{cursor:pointer;padding:12px 0;color:var(--ink2);font-weight:600}
.home-secondary summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
#homeDailyBrief .card-head{flex-wrap:wrap}
#homeDailyBrief .hint{display:block;margin-top:12px;line-height:1.7}

/* ---- 导航间距与设置页当前班级优化（0830，二次修正：卡片为相邻堆叠，无 list 容器） ---- */
.nav-hub-list{gap:12px}
#sideNav .nav-hub-card + .nav-hub-card,
#mobileNav .nav-hub-card + .nav-hub-card{margin-top:12px}
.nav-hub-card{min-height:48px;padding:10px 22px 9px 12px;border-radius:0}
.nav-hub-name{font-size:14px}
.nav-hub-desc{margin-top:4px;font-size:12px;line-height:1.5;white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.mobile-nav-drawer .nav-hub-card{min-height:46px;padding:8px 16px 7px 10px;border-radius:0}
#mobileNav .nav-hub-card + .nav-hub-card{margin-top:2px}
@media(max-width:380px){.mobile-nav-drawer .nav-hub-card{min-height:42px;padding:7px 14px 6px 8px}}
#mobileNav .nav-hub-card + .nav-hub-card{margin-top:9px}
.class-manage-link{color:var(--accent2);cursor:pointer;font-size:12px}

/* ---------- 窄屏触控区：低于 44px 的控件统一抬高，输入框字号提到 16px 防 iOS 缩放 ---------- */
@media (max-width:768px){
  .btn,.pill,.site-card{min-height:44px}
  .pill{padding-inline:15px}
  .seat-cell{min-height:44px}
  .input,select.input,input.input,textarea.input{min-height:44px;font-size:16px}
  select{min-height:44px;font-size:16px}
  .score-exam-actions{gap:8px}
  .score-exam-actions .pill{min-width:56px;justify-content:center;display:inline-flex;align-items:center}
  #undoBarButton,.undo-bar button{min-height:44px}
  .map-dynamic-head .pill,.map-weak-actions .pill{min-height:44px}
  /* 下面几条被双类选择器或内联样式锁住，需要同等特异性且位置靠后才能覆盖 */
  .score-list-filter .input,.score-exam-actions .input{min-height:44px;font-size:16px}
  .m-topbar .input{min-height:44px}
  .mobile-nav-toggle{width:44px;height:44px}
  #mClassSwitcher,#topClassSwitcher{min-height:44px;font-size:16px!important;padding-block:8px!important}
  /* 首页顶栏优先完整呈现当前班级，页面标题按剩余空间省略。 */
  .m-topbar{height:auto;min-height:60px;gap:8px}
  .m-topbar b{flex:1 1 auto;min-width:0;max-width:none}
  .skip-link{min-height:44px}
}

/* ---------- 语文课表准备与复盘工作台 ---------- */
.today-sched-head-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:14px;border-top:1px dashed var(--line);padding-top:11px}
.home-sched-card .today-sched-head-row{margin-top:0;border-top:0;padding-top:0}
.home-sched-card .today-sched-head-row .today-sched-head{font-size:16px;letter-spacing:.06em;font-weight:600;color:var(--ink)}
.home-sched-card .today-sched-head-row .today-sched-head:hover{color:var(--accent)}
.home-sched-card .today-sched-head-row .today-sched-head::after{color:var(--ink3)}
.today-sched-head-row .today-sched-head{min-height:24px;margin:0;border:0;padding:0;flex:1;min-width:0;background:none;font-family:inherit;text-align:left;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:color .14s}
.today-sched-head-row .today-sched-head::after{content:"⇄";font-size:12px;font-weight:400;letter-spacing:0;color:var(--ink3);transition:color .14s,transform .18s}
.today-sched-head-row .today-sched-head:hover{color:var(--accent)}
.today-sched-head-row .today-sched-head:hover::after{color:var(--accent);transform:translateX(2px)}
.today-sched-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex:none;flex-wrap:wrap}
.today-sched-actions > .pill{min-height:29px}
.weekly-log-switch{margin:2px 0 10px}
.weekly-log-switch .pill{min-height:30px;padding:4px 12px;border:1px solid var(--border);background:transparent;color:var(--ink3);font-size:12px}
.weekly-log-switch .pill.active{background:transparent;border-color:var(--accent);color:var(--accent2);font-weight:600;box-shadow:none}
.schedule-day-date{margin:5px 0 8px;color:var(--ink3);font-size:12px;line-height:1.5}
.my-course-card .mc-bottomline{flex-wrap:wrap;align-items:center}
.my-course-card .mc-type{max-width:46%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.my-course-card .mc-time{margin-left:auto}
.mc-actions{display:flex;align-items:center;justify-content:flex-end;gap:4px;flex-wrap:wrap;min-width:0;flex-basis:100%}
.mc-actions .pill{padding:2px 8px;font-size:12px}
.learning-pool{margin-top:18px;padding-top:15px;border-top:1px solid var(--line)}
.learning-pool:first-of-type{margin-top:14px}
#lessonReviewPool .learning-pool{margin-top:0;padding-top:0;border-top:0}
.learning-pool-head{display:flex;align-items:baseline;gap:8px;margin-bottom:9px}
.learning-pool-head h3{margin:0;font-size:14px;color:var(--lesson-ink)}
.learning-pool-head span{font-size:12px;color:var(--muted-ink)}
.learning-pool-list{display:grid;gap:8px}
.learning-pool-item{display:flex;align-items:flex-start;gap:8px;padding:10px 11px;border:1px solid var(--lesson-line);border-radius:10px;background:var(--card2)}
.learning-pool-item .lpi-main{flex:1;min-width:0}
.learning-pool-item .lpi-title{display:flex;align-items:center;gap:6px;min-width:0;font-size:13px;font-weight:700;color:var(--ink);line-height:1.45}
.learning-pool-item .lpi-title b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.learning-pool-item .lpi-meta{display:block;margin-top:3px;color:var(--ink3);font-size:12px;line-height:1.55;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.learning-pool-item .lpi-summary{display:block;margin-top:5px;color:var(--ink2);font-size:12px;line-height:1.65;white-space:pre-wrap;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.learning-pool-item .lpi-actions{display:flex;align-items:center;gap:4px;flex:none;flex-wrap:wrap;justify-content:flex-end}
.learning-pool-item .lpi-actions .pill{padding:3px 8px;font-size:12px}
.learning-pool-item.is-analyzing{border-style:dashed}
.learning-pool-item.is-error{border-color:color-mix(in srgb,var(--danger) 36%,var(--border))}
.review-status{display:inline-flex;align-items:center;flex:none;padding:2px 7px;border-radius:999px;background:var(--accent-soft);color:var(--accent2);font-size:12px;font-weight:600;white-space:nowrap}
.review-status.pending{background:var(--warn-bg);color:var(--warn-strong)}.review-status.error{background:var(--bad-bg);color:var(--danger)}
.review-modal-intro{margin:-4px 0 13px;color:var(--ink2);font-size:13px;line-height:1.75}
.review-modal-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:13px;padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card2);color:var(--ink2);font-size:12px}
.review-modal-meta b{color:var(--ink)}
.review-photo-list{display:flex;gap:8px;flex-wrap:wrap;margin-top:9px}
.review-photo-item{position:relative;width:74px;height:74px}
.review-photo-item button.review-photo-thumb{position:static;display:block;width:100%;height:100%;padding:0;border:0;background:none;cursor:zoom-in;border-radius:10px}
.review-photo-item img{width:100%;height:100%;object-fit:cover;border-radius:10px;border:1px solid var(--line)}
.review-photo-item button{position:absolute;top:-6px;right:-6px;width:22px;height:22px;padding:0;border:1px solid var(--border);border-radius:50%;background:var(--card);color:var(--ink2);font-size:12px;line-height:1}
.review-photo-empty{color:var(--ink3);font-size:12px;line-height:1.6}
.review-ai-note{margin-top:7px;color:var(--ink3);font-size:12px;line-height:1.6}
.review-suggestion-body{max-height:58vh;overflow:auto;padding:13px 14px;border:1px solid var(--border);border-radius:10px;background:var(--card2);color:var(--ink);font-size:13px;line-height:1.85;white-space:pre-wrap}
.review-progress{margin:10px 0;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}
.review-progress-head{display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--ink2);font-size:12px}
.review-progress-head b{color:var(--accent2);font-size:12px}
.review-progress-track{height:6px;margin-top:8px;overflow:hidden;border-radius:999px;background:var(--line)}
.review-progress-track i{display:block;height:100%;border-radius:inherit;background:var(--accent);transition:width .25s ease}
.review-progress-note{display:block;margin-top:6px;color:var(--ink3);font-size:12px;line-height:1.5}
.review-vision-candidates{margin:10px 0;padding:10px 11px;border:1px dashed var(--accent);border-radius:10px;background:color-mix(in srgb,var(--accent) 6%,var(--card2))}
.review-audit-note{margin:10px 0;padding:10px 11px;border-radius:10px;border:1px solid var(--line);background:var(--card2)}
.review-audit-note.is-pass{border-color:var(--accent);color:var(--ink2);font-size:13px}
.review-audit-note.is-flagged{border-color:var(--warn,var(--warn-strong));background:color-mix(in srgb,var(--warn,var(--warn-strong)) 6%,var(--card2))}
.review-audit-head{color:var(--ink);font-size:13px;font-weight:600;margin-bottom:6px}
.review-audit-row{margin-top:6px;padding-top:6px;border-top:1px dashed var(--line);color:var(--ink2);font-size:12px;line-height:1.6}
.review-audit-row b{display:block;color:var(--ink3);font-weight:500;font-size:12px}
.review-audit-row small{display:block;color:var(--ink3);font-size:12px}
.review-vision-candidates-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:8px;color:var(--ink);font-size:12px;font-weight:600}
.review-vision-candidates-head small{color:var(--ink3);font-size:12px;font-weight:400}
.review-vision-candidate-list{display:grid;gap:8px}
.review-vision-candidate{display:block;width:100%;padding:8px 9px;border:1px solid var(--line);border-radius:10px;background:var(--card);color:var(--ink2);text-align:left;cursor:pointer;transition:border-color .15s,background .15s,box-shadow .15s}
.review-vision-candidate:hover{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 5%,var(--card))}
.review-vision-candidate.is-selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--card));box-shadow:inset 0 0 0 1px var(--accent)}
.review-vision-candidate-head{display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--ink3);font-size:12px}
.review-vision-candidate.is-selected .review-vision-candidate-head{color:var(--accent2)}
.review-vision-candidate-text{display:block;margin-top:4px;color:var(--ink);font-size:12px;line-height:1.6;white-space:pre-wrap;overflow-wrap:anywhere}
.review-selection-note{margin:7px 0;color:var(--accent2);font-size:12px;line-height:1.55}


/* ---------- 后台管理中心（827 方案 2.0：审计追踪与安全恢复） ---------- */
.admin-tabs{margin:0 0 16px}
.admin-tabs .pill{min-height:36px;background:var(--card);border:1px solid var(--border)}
.admin-tabs .pill.active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent2);font-weight:700}
.admin-hero-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-bottom:16px}
.admin-kpi{padding:13px 14px;border:1px solid var(--border);border-radius:10px;background:var(--card);box-shadow:var(--shadow);min-width:0}
.admin-kpi span{display:block;color:var(--ink3);font-size:12px;letter-spacing:.06em}
.admin-kpi b{display:block;margin-top:4px;color:var(--ink);font-size:20px;line-height:1.25;font-variant-numeric:tabular-nums}
.admin-kpi small{display:block;margin-top:3px;color:var(--ink2);font-size:12px;line-height:1.45;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.admin-grid{display:grid;grid-template-columns:minmax(0,1.12fr) minmax(320px,.88fr);gap:16px;align-items:start}
.admin-card-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.admin-status-card,.admin-action-card,.admin-review-row,.admin-risk-row,.admin-route-card,.admin-resource-row{padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card2);min-width:0}
.admin-status-card{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 9px;align-items:start}
.admin-status-dot{width:9px;height:9px;border-radius:50%;margin-top:7px;background:var(--ink3);box-shadow:0 0 0 3px color-mix(in srgb,var(--ink3) 14%,transparent)}
.admin-status-dot.ok{background:var(--ok);box-shadow:0 0 0 3px rgba(91,154,112,.14)}
.admin-status-dot.warn{background:var(--warn);box-shadow:0 0 0 3px rgba(192,138,53,.15)}
.admin-status-dot.error{background:var(--danger);box-shadow:0 0 0 3px color-mix(in srgb,var(--danger) 15%,transparent)}
.admin-status-main b,.admin-risk-row b,.admin-review-row b,.admin-route-card b,.admin-resource-row b{display:block;color:var(--ink);font-size:13px;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.admin-status-main span,.admin-risk-row span,.admin-review-row span,.admin-route-card span,.admin-resource-row span{display:block;margin-top:2px;color:var(--ink3);font-size:12px;line-height:1.55}
.admin-status-main small{display:block;margin-top:2px;color:var(--ink2);font-size:12px;line-height:1.5}
.admin-action-list,.admin-risk-list,.admin-review-list,.admin-route-list,.admin-resource-list{display:grid;gap:8px}
.admin-action-card{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;color:var(--ink2);text-align:left}
.admin-action-card strong{display:block;color:var(--ink);font-size:13px}.admin-action-card span{display:block;margin-top:2px;color:var(--ink3);font-size:12px;line-height:1.45}
.admin-action-card em{flex:none;min-width:30px;height:24px;padding:2px 8px;border-radius:999px;background:var(--accent-soft);color:var(--accent2);font-style:normal;text-align:center;font-weight:700;font-size:12px;font-variant-numeric:tabular-nums}
.admin-action-card.warn em{background:var(--warn-bg);color:var(--warn-strong)}.admin-action-card.error em{background:var(--bad-bg);color:var(--danger)}
.admin-review-row{display:flex;align-items:center;gap:8px}.admin-review-row .review-status{margin-left:auto}
.admin-risk-row{border-left:3px solid var(--accent)}.admin-risk-row.warn{border-left-color:var(--warn)}.admin-risk-row.error{border-left-color:var(--danger)}
.admin-safe-note{margin:0 0 12px;padding:10px 12px;border:1px dashed var(--accent);border-radius:10px;background:color-mix(in srgb,var(--accent-soft) 52%,var(--card));color:var(--ink2);font-size:12px;line-height:1.7}
.admin-route-card{display:grid;gap:6px}.admin-route-card code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color:var(--accent2);font-size:12px;background:color-mix(in srgb,var(--accent-soft) 46%,var(--card));border-radius:8px;padding:1px 5px}
.admin-resource-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.admin-resource-row .pill{flex:none}
.admin-empty{padding:11px 0;color:var(--ink3);font-size:12px;line-height:1.7}
.admin-governance-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:11px}.admin-governance-toolbar .input{min-height:34px;font-size:12px}.admin-governance-toolbar .input[type="search"]{flex:1 1 180px;min-width:150px}.admin-audit-list{display:grid;gap:8px}.admin-audit-row{display:grid;grid-template-columns:minmax(130px,.26fr) minmax(0,1fr) auto;gap:8px;align-items:start;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}.admin-audit-row b{display:block;color:var(--ink);font-size:13px;line-height:1.45}.admin-audit-row span,.admin-audit-row small{display:block;color:var(--ink3);font-size:12px;line-height:1.55}.admin-audit-row small{margin-top:3px;color:var(--ink2)}.admin-audit-action{color:var(--accent2)!important;font-weight:700}.admin-audit-meta{grid-column:2 / -1;margin:0;padding:8px 9px;border:1px dashed var(--border);border-radius:8px;background:var(--card);color:var(--ink3);font:11px/1.55 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.admin-recovery-row{display:flex;align-items:center;gap:8px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card2)}.admin-recovery-main{flex:1;min-width:0}.admin-recovery-main b{display:block;color:var(--ink);font-size:13px}.admin-recovery-main span{display:block;margin-top:3px;color:var(--ink3);font-size:12px;line-height:1.55}.admin-recovery-row .pill{flex:none}.admin-policy-note{margin-top:10px;color:var(--ink3);font-size:12px;line-height:1.65}.admin-permission-table-wrap{overflow:auto}.admin-permission-table{width:100%;min-width:760px;border-collapse:collapse;color:var(--ink2);font-size:12px}.admin-permission-table th,.admin-permission-table td{padding:9px 8px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}.admin-permission-table th{color:var(--ink3);font-weight:600;white-space:nowrap}.admin-permission-table td:not(:first-child){text-align:center}.admin-permission-yes{color:var(--accent2);font-weight:700}.admin-permission-no{color:var(--ink3)}.admin-permission-planned{color:var(--warn-strong)}.admin-quality-provider{display:grid;grid-template-columns:minmax(100px,.7fr) repeat(3,minmax(70px,1fr));gap:8px;align-items:center;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:var(--card2);font-size:12px}.admin-quality-provider b{color:var(--ink);font-size:13px}.admin-quality-provider span{color:var(--ink3)}.admin-quality-provider strong{color:var(--ink);font-variant-numeric:tabular-nums}.admin-quality-history{display:grid;gap:8px}.admin-quality-day{display:grid;grid-template-columns:88px minmax(0,1fr) 48px;gap:8px;align-items:center;color:var(--ink3);font-size:12px}.admin-quality-track{height:7px;overflow:hidden;border-radius:999px;background:var(--line)}.admin-quality-track i{display:block;height:100%;background:var(--accent)}.admin-quality-empty{padding:10px 0;color:var(--ink3);font-size:12px}@media(max-width:600px){.admin-audit-row{grid-template-columns:1fr}.admin-audit-meta{grid-column:auto}.admin-recovery-row{align-items:flex-start;flex-wrap:wrap}.admin-recovery-row .pill{margin-left:auto}.admin-quality-provider{grid-template-columns:1fr 1fr}.admin-quality-provider b{grid-column:1 / -1}.admin-quality-day{grid-template-columns:72px minmax(0,1fr) 42px}}
@media(max-width:900px){.admin-hero-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.admin-grid{grid-template-columns:1fr}.admin-card-grid{grid-template-columns:1fr}}
@media(max-width:560px){.admin-hero-grid{grid-template-columns:1fr}.admin-tabs .pill{flex:1 1 calc(50% - 8px)}.admin-review-row,.admin-resource-row{align-items:flex-start;flex-wrap:wrap}.admin-review-row .review-status{margin-left:0}.admin-action-card{align-items:flex-start}}

@media(max-width:560px){
  .today-sched-head-row{align-items:flex-start;flex-wrap:wrap}.today-sched-actions{width:100%;justify-content:stretch}.today-sched-actions > .pill{flex:1}.weekly-log-switch{width:100%}.weekly-log-switch>button{flex:1}
  .learning-pool-item{flex-wrap:wrap}.learning-pool-item .lpi-main{flex-basis:calc(100% - 34px)}.learning-pool-item .lpi-actions{width:100%;justify-content:flex-start;margin-left:34px}
  .review-modal-meta{align-items:flex-start;flex-direction:column;gap:4px}
}

/* ---------- 首页精修：保留工作台结构，提升首屏节奏与交互反馈 ---------- */
.view[data-view="home"] .page-head{margin-bottom:18px}
.view[data-view="home"] .page-head h1{font-size:clamp(24px,2.35vw,32px);font-weight:760;letter-spacing:-.01em}
.view[data-view="home"] .page-head p{max-width:700px;color:color-mix(in srgb,var(--muted) 88%,var(--ink));line-height:1.7}
.home-sched-card,.home-todo-card{margin-bottom:16px}
.home-task-grid{margin-bottom:18px;align-items:stretch}
.home-task-grid>.card{transition:border-color .16s ease,box-shadow .16s ease,transform .16s ease}
.quick-action,.home-list-item,.workplan-item,.learning-pool-item{transition:background-color .16s ease,border-color .16s ease,box-shadow .16s ease,transform .16s ease}
.quick-action:hover,.quick-action:focus-visible,.home-list-item:hover,.home-list-item:focus-visible,.workplan-item:hover,.workplan-item:focus-visible{border-color:color-mix(in srgb,var(--accent2) 38%,var(--line));background:color-mix(in srgb,var(--accent2) 7%,#fff);box-shadow:0 10px 22px -20px rgba(61,63,67,.52);transform:translateY(-1px);outline:none}
.quick-action:active,.home-list-item:active,.workplan-item:active{transform:translateY(0)}
.quick-action .qa-ic{border-radius:8px;background:color-mix(in srgb,var(--accent2) 9%,transparent)}
.quick-action b,.home-list-item .hli-title,.workplan-main b{letter-spacing:0}
.workspace-content-tabs{margin-top:14px;margin-bottom:-1px;position:relative;z-index:2}
.workspace-content-panels{position:relative;z-index:1;display:flex;flex-direction:column;gap:12px;padding:var(--space-4);background:var(--card);border:1px solid var(--line);border-radius:0 0 var(--radius-lg) var(--radius-lg)}
.workspace-section-panel{display:flex;flex-direction:column;gap:12px}
#weeklyLog{overflow:hidden}
#weeklyLog .wl-head{gap:8px}
#weeklyLog .wl-summary{margin-top:10px}
.wl-table.is-collapsed{position:relative}
.wl-compact-list{display:grid;gap:8px;margin-top:8px}
.wl-compact-row{display:grid;grid-template-columns:92px minmax(0,1fr) auto;align-items:center;gap:8px;width:100%;min-height:58px;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:var(--control-bg);color:var(--ink);text-align:left;cursor:pointer;transition:background-color .16s ease,border-color .16s ease,box-shadow .16s ease,transform .16s ease}
.wl-compact-row:hover,.wl-compact-row:focus-visible{border-color:color-mix(in srgb,var(--accent2) 35%,var(--line));background:color-mix(in srgb,var(--accent2) 6%,var(--control-bg));box-shadow:0 10px 22px -20px rgba(61,63,67,.5);transform:translateY(-1px);outline:none}
.wl-compact-meta{color:var(--muted);font-size:12px;line-height:1.35}
.wl-compact-main{min-width:0}
.wl-compact-main b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;line-height:1.45}
.wl-compact-main small{display:block;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);font-size:12px;line-height:1.45}
.wl-compact-state{display:inline-flex;align-items:center;justify-content:center;min-height:24px;padding:3px 8px;border-radius:999px;background:color-mix(in srgb,var(--accent2) 9%,var(--control-bg));color:var(--accent2);font-size:12px;font-weight:650;white-space:nowrap}
.wl-more-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px;padding:10px 12px;border:1px dashed var(--line);border-radius:10px;background:color-mix(in srgb,var(--accent2) 5%,var(--control-bg));color:var(--muted);font-size:12px;line-height:1.55}
.wl-more-row .pill{background:var(--control-bg);min-height:34px}
/* 合成层提升：sticky+backdrop-filter 的磨砂层在非整数 DPR/缩放（Windows 125%/150%、字号缩放）下，
   滚动重绘会反复丢弃重建导致快捷条闪烁跳动（20260914 用户报告）。提升为独立合成层后由合成器续帧。 */
.page-shortcuts{position:sticky;top:0;z-index:var(--z-sticky);transform:translateZ(0);padding-top:6px;background:linear-gradient(180deg,var(--bg) 0%,color-mix(in srgb,var(--bg) 92%,transparent) 78%,transparent 100%);backdrop-filter:blur(10px)}
.page-shortcuts-menu{display:block;visibility:hidden;opacity:0;pointer-events:none;transform:translateY(-4px);transition:opacity .14s ease,transform .14s ease,visibility .14s ease}
.page-shortcuts-more.is-open .page-shortcuts-menu{visibility:visible;opacity:1;pointer-events:auto;transform:translateY(0)}
.page-shortcut-more .page-shortcut-ic{transition:transform .14s ease}
.page-shortcuts-more.is-open .page-shortcut-more .page-shortcut-ic{transform:rotate(180deg)}
@media(max-width:1040px){.home-task-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}
@media(max-width:768px){.page-shortcuts{top:60px;margin-top:-1px;padding-top:8px}.view[data-view="home"] .page-head{margin-bottom:14px}.home-sched-card,.dash-row,.home-todo-card,.home-task-grid{margin-bottom:14px}.quick-actions{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.quick-action{min-height:66px;padding:10px}.quick-action .qa-ic{width:26px;height:26px}.wl-more-row{align-items:flex-start;flex-direction:column}.wl-more-row .pill{width:100%;justify-content:center}.wl-compact-row{grid-template-columns:minmax(0,1fr) auto;align-items:start}.wl-compact-meta{grid-column:1/-1}.wl-compact-state{margin-top:2px}}
@media(max-width:420px){.quick-action{align-items:flex-start}.quick-action .qa-ic{margin-top:1px}.quick-action span span{font-size:12px}.home-task-grid{gap:12px}}@media(prefers-reduced-motion:reduce){.quick-action,.home-list-item,.workplan-item,.learning-pool-item,.wl-compact-row,.page-shortcuts-menu,.page-shortcut-more .page-shortcut-ic{transition:none!important}}
/* ---------- 首页首屏：今日概览 + 下一节课（20260909） ---------- */
.home-brief{display:grid;grid-template-columns:minmax(0,1fr) minmax(264px,320px);gap:16px;align-items:stretch}
.home-brief-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.home-stat{display:flex;flex-direction:column;gap:4px;padding:12px 14px;text-align:left}
.home-stat b{font-family:'Noto Serif SC','Songti SC',serif;font-size:28px;line-height:1.15;color:var(--ink);font-variant-numeric:tabular-nums}
.home-stat span{font-size:12px;color:var(--ink3);line-height:1.55}
.home-brief-main>.hint{margin-top:10px}
.home-next{display:flex;flex-direction:column;gap:4px;padding:14px 16px;border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:10px;background:var(--card2)}
.home-next-idle{border-left-color:var(--line)}
.home-next-status{font-size:12px;font-weight:700;letter-spacing:.1em;color:var(--accent2)}
.home-next-idle .home-next-status{color:var(--ink3)}
.home-next-time{font-size:13px;color:var(--ink2);font-variant-numeric:tabular-nums}
.home-next-main{font-size:14px;font-weight:700;color:var(--ink)}
.home-next-course{font-size:13px;color:var(--ink2);line-height:1.6}
.home-next-course small{display:block;margin-top:2px;font-size:12px;color:var(--ink3)}
.home-next .btn,.home-next .pill{margin-top:8px;align-self:flex-start}
.home-next .hint{margin:2px 0 0}
/* 今日优先阅读，本周为摘要与七日日历留足宽度；卡片按内容自然定高。 */
/* 今日运势：正式紧凑 SupportCard（dash-card 壳），紧邻问候、位于本周课务上方；隐藏后不留空位。 */
.home-hero.has-fortune{display:grid;grid-template-columns:minmax(0,1fr) 300px;align-items:start;column-gap:28px}
.home-welcome{min-width:0}
.home-fortune{min-width:0}
.home-fortune[hidden]{display:none}
.home-fortune-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.home-fortune-link{font-size:15px;font-weight:700;color:var(--ink);text-decoration:none;line-height:1.5;min-height:36px;display:flex;align-items:center}
.home-fortune-link:hover{color:var(--accent2);text-decoration:underline;text-underline-offset:4px}
.home-hero .home-fortune-summary{margin:3px 0 6px;font-size:13px;line-height:1.65;color:var(--ink2);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:43px}
.home-fortune-note{font-size:11px;color:var(--ink3)}
@media(max-width:1100px){
  .home-hero.has-fortune{grid-template-columns:minmax(0,1fr)}
  /* 单列时运势保持紧凑卡形态，不随通栏拉伸。 */
  .home-fortune{max-width:420px}
  .home-fortune-top{justify-content:flex-start}
  .home-fortune .fortune-settings-body{right:auto;left:0}
}
@media(max-width:560px){
  .home-fortune-top{justify-content:space-between}
  .home-fortune .fortune-settings-body{left:auto;right:0}
}

/* 星座偏好：原生 details 与表单，键盘可操作，不收集生日。 */
.fortune-settings{position:relative;flex:none;font-size:12px;color:var(--ink2)}
.fortune-settings>summary{cursor:pointer;list-style:none;min-height:36px;display:flex;align-items:center;padding:0 8px;border-radius:8px}
.fortune-settings>summary::-webkit-details-marker{display:none}
.fortune-settings>summary:hover{background:var(--accent-soft)}
.fortune-settings-body{position:absolute;right:0;top:100%;z-index:30;width:280px;max-width:calc(100vw - 40px);padding:16px;border:1px solid var(--line);border-radius:12px;background:var(--card);box-shadow:var(--shadow-pop);color:var(--ink);box-sizing:border-box}
.fortune-settings-body>label{display:block;font-size:13px;margin-bottom:8px}
.fortune-settings-body select{width:100%;min-height:40px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--ink);font:inherit;margin-bottom:12px}
.fortune-settings-body .fortune-check{display:flex;align-items:center;gap:8px;min-height:36px}
.fortune-check input{accent-color:var(--accent)}
.fortune-settings-body p{font-size:12px;line-height:1.6;margin:8px 0;color:var(--ink2)}
.fortune-settings-body button{min-height:40px;border:1px solid var(--line);border-radius:8px;padding:6px 14px;background:var(--accent);color:var(--on-accent,#fff);font:inherit;cursor:pointer}
.fortune-settings :focus-visible,.home-fortune-link:focus-visible,.hz-personal>a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.home-brief-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;margin-bottom:16px;align-items:stretch}
.home-brief-row>.dash-card{min-width:0;margin-bottom:0;display:flex;flex-direction:column}
.home-brief-row>.dash-card>.card-head{flex:none}
.home-calendar-card{display:flex;flex-direction:column;min-width:0}
.home-calendar-card .home-week-head{margin-top:0;border-top:0;padding-top:0;flex-wrap:wrap;align-items:center}
.home-calendar-card .home-week-head .hint{flex-basis:auto;margin:0;order:0}
#homeWeekOverviewBody{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
#homeWeekOverviewBody>div{min-width:0;overflow-wrap:anywhere}
.home-week-calendar{margin-top:16px;padding-top:16px;border-top:1px solid var(--line)}
.home-week-calendar-head{display:flex;align-items:baseline;flex-wrap:wrap;gap:8px;margin-bottom:10px}
.home-week-calendar-head h4{margin:0;font-size:13px;font-weight:600;color:var(--ink)}
.home-week-calendar-head .hint{font-size:12px;color:var(--ink2);line-height:1.5}
.home-calendar-card #weekTips{margin-top:10px;padding:8px 12px;background:var(--card2);border:1px dashed var(--border);border-radius:10px;font-size:12px;color:var(--ink2);line-height:1.8;overflow-wrap:anywhere}
.home-brief-row #homeDailyBrief .home-brief-main>.hint{font-size:12px;line-height:1.7;opacity:1;color:var(--ink2)}
.home-calendar-card #weekCalendar .week-chips{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:3px}
/* 侧栏占用后的平板内容区不足以容纳两张卡片，提前按阅读顺序堆叠。 */
@media(max-width:1100px){.home-brief-row{grid-template-columns:minmax(0,1fr);gap:18px}}
@media(max-width:560px){
  #homeWeekOverviewBody{grid-template-columns:repeat(2,minmax(0,1fr))}
  .home-calendar-card #weekCalendar>div{gap:4px}
  /* 渲染器内联了单元格 padding；窄屏只收紧左右留白，保持七天标签完整。 */
  .home-calendar-card #weekCalendar>div>div{padding-inline:2px!important}
  .home-calendar-card #weekCalendar .meta{font-size:12px;white-space:nowrap}
}
#homeDateLine{display:flex;align-items:baseline;flex-wrap:wrap;gap:2px 0}
#homeDateLine #homeTime{font-size:20px;font-weight:700;letter-spacing:.02em;color:var(--ink);font-variant-numeric:tabular-nums}
#homeDateLine #semesterText{font-size:13px;color:var(--ink2)}
#homeDateLine .home-clock::before,#homeDateLine #semesterText::before{content:"·";margin:0 10px;color:var(--ink3)}
.hint-faint{opacity:.28}
.home-brief-row #homeDailyBrief .home-brief{grid-template-columns:minmax(0,1fr)}
.home-week-head{margin-top:16px;border-top:1px dashed var(--line);padding-top:12px}
.view[data-view="home"] .home-workboard-section,.view[data-view="home"] .quick-action,.view[data-view="home"] .home-list-item,.view[data-view="home"] .workplan-item,.view[data-view="home"] .home-stat,.view[data-view="home"] .home-next{border-radius:10px}
.view[data-view="home"] .home-workboard-item{border-radius:8px}
@media(max-width:900px){.home-brief{grid-template-columns:1fr}}
@media(max-width:680px){
  /* 手机端重排（≤680 手机专用；768 平板保持桌面层级）：概览 → 课表 → 代课 → 可听 → 待办 → 本周课务 → 运势 → 引导 → 工作台 → 快捷操作 → 工作安排 → 低频折叠。
     hero/brief-row/support-grid 以 contents 拆散，问候/概览/本周/运势成为首页 flex 的直接 item 按 order 排序。 */
  .view.active[data-view="home"]{display:flex;flex-direction:column}
  .view[data-view="home"]>.page-head,
  .view[data-view="home"]>.home-brief-row,
  .view[data-view="home"]>.home-support-grid{display:contents}
  /* display:contents 只提升布局不改 DOM，故 order 不用 > 直接子选择器。 */
  .view[data-view="home"] .home-welcome{order:1;padding:6px 4px 4px 14px;margin-bottom:14px}
  .view[data-view="home"] #homeDailyBrief{order:2}
  .view[data-view="home"] .home-sched-card{order:3}
  .view[data-view="home"] #homeSubstitutionCard{order:4}
  .view[data-view="home"] #homeAuditCard{order:5}
  .view[data-view="home"] .home-todo-card{order:6}
  .view[data-view="home"] .home-calendar-card{order:7}
  .view[data-view="home"] #homeHoroscope{order:8}
  /* contents 拆行后行容器 gap 失效，由各卡 margin 承接分隔。 */
  .view[data-view="home"] .home-brief-row>.dash-card,
  .view[data-view="home"] .home-support-grid>.dash-card{margin-bottom:16px}
  .view[data-view="home"] #homeOnboarding{order:9}
  .view[data-view="home"] .home-task-grid{order:10;grid-template-columns:1fr}
  .view[data-view="home"] #homeWorkboard{order:11}
  .view[data-view="home"] .workplan-home-card{order:12}
  .view[data-view="home"] .home-secondary{order:13}
}
@media(max-width:768px){.workplan-home-card .workplan-list{grid-template-columns:1fr}}
/* 本周摘要在各尺寸常驻，既有周回顾弹窗行为保持不变。 */


/* ---------- 0905 UI polish: segmented tabs + points workflow ---------- */
.weekly-log-switch .pill{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:32px;
  padding:5px 14px;
  border:1px solid var(--border);
  border-radius:999px;
  background:transparent;
  color:var(--ink3);
  letter-spacing:.02em;
  line-height:1.35;
  box-shadow:none;
}
.weekly-log-switch .pill:hover{
  border-color:var(--accent);
  background:transparent;
  color:var(--accent2);
}
.weekly-log-switch .pill.active{
  border-color:var(--accent);
  background:transparent;
  color:var(--accent2);
  box-shadow:none;
  font-weight:600;
}

.point-toolbar{
  align-items:center;
  gap:8px;
  margin-top:0!important;
  padding:10px;
  border:1px solid var(--line);
  border-radius:16px;
  background:var(--card2);
}
.point-toolbar #pointEditToggle{
  min-height:36px;
  padding:7px 14px;
  border-radius:999px;
  box-shadow:none;
}
.point-toolbar #pointEditToggle[aria-pressed="true"]{
  border-color:color-mix(in srgb,var(--accent) 34%,var(--border));
  background:var(--card);
  color:var(--accent2);
}
.point-toolbar .point-edit-state{
  min-height:36px;
  padding:7px 12px;
  border-style:solid;
  background:var(--card);
}
.point-toolbar .pt-student-wrap{
  flex:1 1 210px;
  min-width:180px;
  max-width:300px;
}
.point-toolbar .map-picker{
  width:100%;
  max-width:none;
}
.point-toolbar .point-reason-select{
  flex:1 1 190px;
  min-width:160px;
  max-width:260px;
  min-height:36px;
  padding-top:7px;
  padding-bottom:7px;
  background-color:var(--card);
}
.point-toolbar .btn.ghost.sm{
  min-height:34px;
  padding:6px 11px;
  border-radius:999px;
  background:var(--card);
}
.point-amounts{
  margin-top:12px;
  padding-top:0;
  border-top:0;
}
.point-action-panel{
  gap:8px;
  padding:12px;
  border-color:color-mix(in srgb,var(--accent) 18%,var(--line));
  border-radius:16px;
  background:var(--card);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.6);
}
.point-action-row{
  gap:8px;
}
.point-amounts-label{
  display:inline-flex;
  align-items:center;
  min-height:31px;
  padding:0 10px;
  border-radius:999px;
  background:color-mix(in srgb,var(--accent-soft) 62%,var(--card));
  color:var(--accent2);
  font-weight:750;
  margin-right:1px;
}
.point-action-panel .point-amount{
  min-width:56px;
  min-height:34px;
  padding:6px 12px;
  border-radius:999px;
  border:1px solid color-mix(in srgb,var(--accent) 22%,var(--border));
  background:var(--card)!important;
  color:var(--accent2);
  box-shadow:none;
}
.point-action-panel .point-amount.minus{
  border-color:color-mix(in srgb,var(--danger) 28%,var(--border));
  color:var(--danger);
}
.point-action-panel .point-amount:hover,
.point-action-panel .point-amount:focus-visible{
  transform:translateY(-1px);
  box-shadow:0 8px 18px -16px rgba(54,61,55,.55);
}
.point-action-panel .point-amount.active{
  border-color:transparent;
  background:var(--accent)!important;
  color:#fff;
  box-shadow:0 7px 16px -12px var(--accent2);
}
.point-action-panel .point-amount.minus.active{
  background:var(--danger)!important;
  color:#fff;
  box-shadow:0 7px 16px -12px var(--danger);
}
.point-action-hint{
  display:flex;
  align-items:center;
  flex-wrap:wrap;
  gap:4px;
  width:100%;
  padding:8px 10px;
  border-radius:10px;
  background:color-mix(in srgb,var(--card2) 58%,var(--card));
  color:var(--ink3);
}
.point-action-hint b{
  color:var(--ink);
}
.point-outcome{
  border-radius:999px;
  background:var(--card);
}
.point-outcome.active{
  border-color:transparent;
  background:var(--accent)!important;
  color:#fff;
  box-shadow:0 7px 16px -13px var(--accent2);
}
.point-outcome.active b,
.point-outcome.active small{
  color:#fff;
}
.point-outcome.minus.active{
  background:var(--danger)!important;
}
.point-outcome.neutral.active{
  background:var(--accent2)!important;
}
.point-value-row{
  align-items:center;
}
.point-value-control{
  display:flex;
  align-items:center;
  gap:8px;
  flex:1 1 280px;
  min-width:0;
  flex-wrap:wrap;
}
.point-value-select{
  width:auto;
  min-width:134px;
  max-width:176px;
  min-height:36px;
  padding-top:7px;
  padding-bottom:7px;
  border-radius:999px;
  background-color:var(--card);
  color:var(--ink);
  font-weight:700;
}
.point-sign-toggle{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-width:44px;
  min-height:36px;
  padding:7px 13px;
  border:1px solid var(--accent2);
  border-radius:999px;
  background:var(--accent2);
  color:#fff;
  font:inherit;
  font-size:13px;
  font-weight:850;
  line-height:1.2;
  cursor:pointer;
  box-shadow:0 8px 16px -13px var(--accent2);
  transition:background-color .15s,border-color .15s,box-shadow .15s,transform .15s;
}
.point-sign-toggle.plus{
  border-color:var(--accent2);
  background:var(--accent2);
  color:#fff;
}
.point-sign-toggle.minus{
  border-color:var(--danger);
  background:var(--danger);
  color:#fff;
  box-shadow:0 8px 16px -13px var(--danger);
}
.point-sign-toggle:hover,
.point-sign-toggle:focus-visible{
  transform:translateY(-1px);
  box-shadow:0 10px 20px -14px rgba(54,61,55,.64);
}
.point-sign-toggle:focus-visible{
  outline:3px solid var(--ink);
  outline-offset:2px;
}
.point-value-control.plus .point-value-select{
  border-color:color-mix(in srgb,var(--accent2) 58%,var(--border));
  box-shadow:inset 3px 0 0 var(--accent2);
}
.point-value-control.minus .point-value-select{
  border-color:color-mix(in srgb,var(--danger) 58%,var(--border));
  box-shadow:inset 3px 0 0 var(--danger);
}
.point-value-control.neutral .point-value-select{
  border-color:color-mix(in srgb,var(--accent2) 28%,var(--border));
}
.point-current-value{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:34px;
  padding:6px 12px;
  border:1px solid var(--border);
  border-radius:999px;
  background:var(--card2);
  color:var(--ink2);
  font-size:12px;
  font-weight:750;
  line-height:1.35;
  white-space:nowrap;
}
.point-current-value.plus{
  border-color:var(--accent2);
  background:var(--accent2);
  color:#fff;
  box-shadow:0 7px 15px -13px var(--accent2);
}
.point-current-value.minus{
  border-color:var(--danger);
  background:var(--danger);
  color:#fff;
  box-shadow:0 7px 15px -13px var(--danger);
}
.point-current-value.neutral{
  border-color:color-mix(in srgb,var(--accent2) 24%,var(--border));
  background:var(--card);
  color:var(--ink2);
}
@media(max-width:700px){
  .weekly-log-switch .pill{min-width:0;padding-left:10px;padding-right:10px}
  .point-toolbar{align-items:stretch}
  .point-toolbar #pointEditToggle,.point-toolbar .point-edit-state{flex:1 1 calc(50% - 8px);justify-content:center;text-align:center}
  .point-toolbar .pt-student-wrap,.point-toolbar .point-reason-select{flex-basis:100%;max-width:none}
}
@media(max-width:560px){
  .weekly-log-switch .pill{min-height:34px;padding:6px 10px}
  .point-action-panel{padding:11px}
  .point-amounts-label{width:100%;justify-content:center}
  .point-value-control{width:100%;flex-basis:100%;align-items:stretch}
  .point-sign-toggle{flex:0 0 52px;min-height:38px}
  .point-value-select{flex:1 1 132px;max-width:none;width:100%}
  .point-current-value{flex:1 1 150px;white-space:normal;text-align:center}
  .point-action-panel .point-amount{flex:1 1 calc(50% - 8px);min-height:38px}
}

/* ---------- 移动端触控区第二轮补齐（0906 审计）：覆盖触控补丁之后新增的小尺寸控件 ----------
   前两轮补丁位于本样式块前部，其后新增的课表/周记录、积分工作流、后台管理等模块样式
   以更高特异性或更晚源码位置把部分移动端控件压回 29-40px。本块放在样式块末尾统一收口。 */
@media (max-width:768px){
  /* 侧边抽屉与顶栏 */
  .mobile-nav-drawer .side-item{min-height:44px;height:44px}
  .mobile-nav-drawer-close{width:44px;height:44px}
  .mobile-nav-drawer .nav-context-back{min-height:44px;padding-block:8px}
  .mobile-nav-drawer .nav-hub-card{min-height:44px}
  /* 课表 / 周记录 */
  .weekly-log-switch .pill{min-height:44px}
  .today-sched-actions > .pill{min-height:44px}
  .wl-more-row .pill{min-height:44px}
  .rec-article-row,.prep-linked-reading-option{min-height:44px}
  .sched-import-fields .input,.sched-import-suspect-row .input{min-height:44px;font-size:16px}
  /* 课表列头删除圆钮与照片删除钮：视觉不变，用伪元素把命中区扩到约 44px */
  .th-del{position:relative}
  .th-del::after,.review-photo-item button::after{content:"";position:absolute;inset:-13px;border-radius:50%}
  /* 成长记录 */
  .point-toolbar #pointEditToggle,.point-toolbar .point-edit-state{min-height:44px}
  .point-toolbar .point-reason-select,.point-value-select{min-height:44px}
  .point-toolbar .btn.ghost.sm{min-height:44px}
  .point-action-panel .point-amount{min-height:44px}
  .point-sign-toggle{min-height:44px}
  /* 学情分析 / 成绩导入 */
  .map-dynamic-filter .input{min-height:44px;font-size:16px}
  .score-import-review-row .input{min-height:44px;font-size:16px}
  /* 通用小组件 */
  .todo-view-tabs .pill{min-height:44px}
  .modal-foot .btn{min-height:44px}
  .admin-tabs .pill{min-height:44px}
  .admin-governance-toolbar .input{min-height:44px;font-size:16px}
  .qa-chip{min-height:44px}
  .audit-teacher-choice{min-height:44px}
  .auth-tabs button{min-height:44px}
  .auth-screen .btn{min-height:48px}
  .sched-import-check{width:22px;height:22px}
}

/* 0909 统一资源中心 */
.rc-row{display:flex;gap:8px;align-items:flex-start;padding:10px 2px;border-bottom:1px solid var(--line)}
.rc-row:last-child{border-bottom:0}
.rc-main{flex:1;min-width:0;cursor:pointer}
.rc-main:hover .rc-title{color:var(--accent2)}
.rc-title{font-size:13px;font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.5}
.rc-badge{display:inline-block;font-size:12px;font-weight:400;color:var(--ink3);border:1px solid var(--line);border-radius:999px;padding:0 8px;margin-right:6px;vertical-align:1px;white-space:nowrap}
.rc-meta{margin-top:3px;font-size:12px;color:var(--ink3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.5}
.rc-star{flex:0 0 auto;min-width:30px;text-align:center}
.rc-note{font-size:12px;color:var(--ink3);margin:6px 0}

/* 移动端键盘适配：聊天区高度跟随 visualViewport（--yuyou-viewport-height），
   输入框始终在键盘上方；输入字号 ≥16px 防 iOS 聚焦缩放。 */
@media (max-width:768px){
  .yc-box textarea{font-size:16px}
}
/* ---------- 移动端顶部：抽屉入口并入快捷入口条，顶栏整条下线（20260911） ---------- */
@media (max-width:768px){
  /* 快捷入口条成为唯一吸顶条：去掉板块标题行，抽屉入口并到最左 */
  .page-shortcuts{top:0;display:block;margin:-16px -12px 0;padding:4px 12px 6px;border-bottom:1px solid color-mix(in srgb,var(--line) 58%,transparent);background:linear-gradient(180deg,var(--bg) 0%,color-mix(in srgb,var(--bg) 92%,transparent) 78%,transparent 100%);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
  .page-shortcuts-head{display:none}
  .page-shortcuts-bar{display:flex;align-items:center;gap:6px}
  .page-shortcuts-nav{flex:0 0 auto}
  .page-shortcuts-list{display:flex;align-items:center;gap:6px;flex:1 1 auto;min-width:0;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none;padding:2px 0}
  .page-shortcuts-list::-webkit-scrollbar{display:none}
  .page-shortcut{scroll-snap-align:start}
  .page-shortcuts-more{display:none!important}
  /* 抽屉内的班级行（20260915）：不再做「左侧小标签 + 右侧输入框」的表单横排，改为复用
     一级导航行的 .nav-hub-card 基座——同一套图标槽、标题槽、内容起始线、行表面、行高与
     字体角色。差异只留在语义上：它是数据上下文选择，不参与路由判定，因此不整行取强调色、
     标题不带 hover/active 下划线。下边框保留，作为「上下文选择区」与页面导航区的分界。
     .nav-hub-card--context 是这条基座的类型修饰；.m-drawer-class 作为既有语义标识一并保留，
     不再承载布局（移动端验收按它定位抽屉里的班级行）。 */
  .nav-hub-card--context{cursor:default;border-bottom:1px solid var(--line)}
  .nav-hub-card--context:hover,.nav-hub-card--context:focus-within{color:var(--ink)}
  .nav-hub-card--context:hover .nav-hub-name{box-shadow:none}
  .nav-hub-card--context .nav-hub-name{display:block}
  .nav-hub-slot{display:block;margin-top:2px;min-width:0}
  /* 值槽里的原生选择器：保留防聚焦缩放与触控规范（16px 字号 / 44px 高度，见上方
     #mClassSwitcher,#topClassSwitcher 那条），只解除旧顶栏遗留的固定宽度，去掉与导航行
     表面冲突的卡片装饰，让班级名与标题落在同一条内容起始线上。 */
  /* 选择器带类型修饰类，避免被更后面的暗色适配补丁（html[data-dark="1"] .input 的浅色底）
     改回输入框表面；深色下值槽保持与浅色一致的透明表面。 */
  .nav-hub-card--context .nav-hub-slot .input{width:100%;min-width:0;padding-inline:0 18px;border-color:transparent;background:transparent;color:var(--ink2);text-align:left;text-align-last:left}
  .nav-hub-card--context .nav-hub-slot .input:focus,.nav-hub-card--context .nav-hub-slot .input:focus-visible{outline:3px solid var(--ink);outline-offset:-3px;box-shadow:none;border-color:transparent}
  /* 移动端导航抽屉品牌块（20260911）：复用桌面 .brand-header 结构，
     容器只负责间距；不加下边框，避免与头部/班级行形成三条紧邻分隔线 */
  .m-drawer-brand{padding:14px 4px 10px}
  .m-drawer-brand .brand-header .brand-title{font-size:15px}
}
/* 抽屉入口按钮只在移动端出现在快捷入口条内；桌面端隐藏（避免被 .mobile-nav-toggle 基础样式带出来） */
@media (min-width:769px){
  .page-shortcuts .mobile-nav-toggle{display:none}
}
/* ---------- 首页 Bento 层级 v1（仅桌面，移动端不受影响） ---------- */
@media(min-width:821px){
  #homeDailyBrief{box-shadow:var(--shadow-hero);border-color:color-mix(in srgb,var(--accent) 16%,var(--line));background:linear-gradient(180deg,color-mix(in srgb,var(--accent-soft) 30%,var(--card)),var(--card) 58%)}
}
@media(min-width:1051px){
  .home-task-grid{grid-template-columns:minmax(0,.78fr) minmax(0,1.22fr)}
}

/* ---------- 暗色组件适配补丁（20260912 · W1）---------- */
html[data-dark="1"] .btn.accent{color:#1a1714}
html[data-dark="1"] .btn.ghost{background:rgba(255,255,255,.05);color:var(--ink2)}
html[data-dark="1"] .btn.danger{border-color:rgba(201,110,96,.35)}
html[data-dark="1"] .input,html[data-dark="1"] textarea.input,html[data-dark="1"] select.input{background:rgba(255,255,255,.05);color:var(--ink)}
html[data-dark="1"] .sidebar{box-shadow:6px 0 16px -12px rgba(0,0,0,.5)}
html[data-dark="1"] .auth-bg{background:radial-gradient(ellipse at 18% 14%, rgba(192,122,85,.13), transparent 48%),radial-gradient(ellipse at 86% 86%, rgba(212,169,99,.10), transparent 46%),radial-gradient(ellipse at 60% 42%, rgba(143,166,126,.09), transparent 42%)}
html[data-dark="1"] .auth-shell{border-color:rgba(216,207,196,.14);box-shadow:0 24px 64px rgba(0,0,0,.5),inset 0 1px 0 rgba(216,207,196,.06)}
html[data-dark="1"] .auth-screen .input{border-color:#4a4237;background:rgba(255,255,255,.05)}
html[data-dark="1"] .auth-screen .input:hover{border-color:#5c5244}
html[data-dark="1"] .auth-screen .input:-webkit-autofill{-webkit-text-fill-color:#d8cfc4;-webkit-box-shadow:0 0 0 1000px #26221d inset;caret-color:#d8cfc4}
html[data-dark="1"] .auth-screen .btn.accent{color:#1a1714}
html[data-dark="1"] .auth-screen .btn.ghost{background:rgba(255,255,255,.04);border-color:#4a4237}
html[data-dark="1"] .auth-tabs{background:rgba(192,122,85,.10)}
html[data-dark="1"] .auth-tabs button.active{background:rgba(216,207,196,.10);box-shadow:none}

/* ---------- 暗色适配第二轮（20260912d）：W1 未覆盖的硬编码浅色与课程色 ----------
   · 控件/徽标表面抽为 --control-bg / --chip-bg / --content-ink，暗色只改令牌值，不再逐条覆盖
   · 课程卡班级名/课型沿用班级色，但在暗色下与白混合提亮，保留色相同时满足 4.5:1
   · --muted/--ink3 在暗色下提到 #a89c8a（原 #9c917f 在深卡面上仅 4.28~4.80:1） */
html[data-dark="1"]{--control-bg:rgba(255,255,255,.05);--chip-bg:rgba(255,255,255,.08);--content-ink:var(--ink2);--muted:#a89c8a;--ink3:#a89c8a;--muted-ink:var(--muted)}
html[data-dark="1"] .mc-content{color:var(--content-ink)}
html[data-dark="1"] .mc-class{color:color-mix(in srgb,var(--course-line,#c08a61) 55%,#fff)}
html[data-dark="1"] .mc-type{color:color-mix(in srgb,var(--course-line,#c08a61) 55%,#fff)}
html[data-dark="1"] .mc-type.muted{color:var(--ink2)}
                                                                                                                                                                                                                                                                                                                                                                
html[data-dark="1"] .my-course-card.audit-course{--lesson-ink:#20242a;--muted-ink:#5b5347;--content-ink:#4a5159;--lesson-line:rgba(32,36,42,.16);--chip-bg:rgba(255,255,255,.6)}
html[data-dark="1"] .my-course-card.audit-course .mc-class,
html[data-dark="1"] .my-course-card.audit-course .mc-type{color:var(--course-line,#3f5144)}
html[data-dark="1"] .skip-link{color:#1a1714}
html[data-dark="1"] .ui-stepper__item.is-current,html[data-dark="1"] .ui-card-tab.is-active{background:rgba(192,122,85,.16)}
html[data-dark="1"] .ui-stepper__item.is-complete{border-color:rgba(143,166,126,.35)}

/* ---------- 登录页文房小景（20260912c · 方向C二期：笔山线描，卷首印位） ---------- */
.auth-emblem{display:block;margin:0 auto 12px;color:var(--accent);opacity:.72}


/* ===== 20260911 桌面端快捷入口：顶栏对齐 + 吸顶条铺满与磨砂 ===== */
/* 宽屏（视口 >1852px）时 .main-in 受 1600px 上限约束而居中，顶栏内边距需补上该居中偏移，
   否则「我的班级」与下方快捷入口左缘错位（1440 档以内两者本已一致，不得重复叠加） */
@media (min-width:1853px){
  .app-topbar{padding-left:calc((100% - 1600px)/2 + var(--space-6));padding-right:calc((100% - 1600px)/2 + var(--space-6))}
}
/* 吸顶条维持「吸顶 + 虚化」口径（契约：tests/topbar_tablet_nav_e2e_check.py「下滑后：快捷入口保持吸顶+虚化」），
   只修两处观感问题：
   ① 横向铺满滚动容器——原本只覆盖 .main-in 的内容盒，左右各留一截，滚动时像一块浮在半空的色块；
   ② 底色改均匀磨砂玻璃（--glass-bg，与顶栏同料）——既不用“尾部透明的渐变”（正文会透出字影），
      也不用“纯不透明底色”（会把下方卡片顶部一刀切断）；末尾再补一段软纱过渡，让进出的正文渐隐而非硬切。 */
@media (min-width:769px){
  .page-shortcuts{
    margin-left:-18px;margin-right:-18px;padding-left:18px;padding-right:18px;
    background:var(--glass-bg);
    -webkit-backdrop-filter:blur(var(--glass-blur)) saturate(1.3);
    backdrop-filter:blur(var(--glass-blur)) saturate(1.3);
    box-shadow:0 14px 22px -22px rgba(61,63,67,.55);
  }
  .page-shortcuts::after{
    content:"";position:absolute;left:0;right:0;top:100%;height:18px;pointer-events:none;
    background:linear-gradient(180deg,var(--glass-bg) 0%,transparent 100%);
  }
}

/* 桌面端把吸顶条上提 .main-in 的顶部内边距（与移动端 `margin:-16px -12px 0` 是同一手法），
   让它与顶栏贴齐：原来两者之间还夹着 20px 页面底色，一条 chrome 被切成两条不相干的横条。 */
@media (min-width:769px){
  .page-shortcuts{margin-top:calc(-1 * var(--space-5))}
}
@media (min-width:1200px){
  .page-shortcuts{margin-left:-24px;margin-right:-24px;padding-left:24px;padding-right:24px}
}
/* 视口 >1852px 时主内容被 1600px 上限居中：吸顶条要同步补上这 34px 偏移并内缩同样的距离，
   才既能铺满滚动容器、又让「快捷入口」与顶栏「我的班级」左缘对齐 */
@media (min-width:1853px){
  .page-shortcuts{
    margin-left:calc(-1 * (24px + (100vw - 252px - 1600px)/2));
    margin-right:calc(-1 * (24px + (100vw - 252px - 1600px)/2));
    padding-left:calc(24px + (100vw - 252px - 1600px)/2);
    padding-right:calc(24px + (100vw - 252px - 1600px)/2);
  }
}

/* 柚柚到此一游 · 关于工作台卡首小景（品牌肖像，彩色矢量 yuyou-avatar.svg）
   端口在 setv2-about；竖排居中，楷体题款与品牌签名呼应 */
.about-yuyou{display:flex;flex-direction:column;align-items:center;gap:6px;padding:2px 0 14px}
.about-yuyou img{width:96px;height:96px;display:block}
.about-yuyou-cap{font-family:var(--font-kai);font-size:15px;letter-spacing:.08em;color:var(--ink-soft)}

/* ---------- 教研协作（teamboard）：看板 / 成员 / 动态。全部使用现有令牌，深色模式自动跟随 ---------- */
.team-toolbar{display:flex;justify-content:flex-end;margin-bottom:12px}
.team-progress{height:6px;border-radius:999px;background:var(--card2);border:1px solid var(--border);overflow:hidden;margin:-6px 0 14px}
.team-progress i{display:block;height:100%;background:var(--accent);border-radius:999px;width:0;transition:width .6s cubic-bezier(.22,1,.36,1)}
.team-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:16px;align-items:start}
.team-board{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;align-items:start}
.team-col{background:var(--card2);border:1px solid var(--border);border-radius:12px;padding:10px;min-height:180px;transition:border-color .15s,background .15s}
.team-col.drag-over{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,var(--card2))}
.team-col-head{display:flex;align-items:center;justify-content:space-between;padding:2px 4px 10px}
.team-col-title{font-size:13px;font-weight:600;color:var(--ink);letter-spacing:.04em}
.team-col-count{font-size:12px;color:var(--ink3);font-variant-numeric:tabular-nums;min-width:22px;height:20px;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;background:var(--card);border:1px solid var(--border)}
.team-col-body{display:flex;flex-direction:column;gap:8px;min-height:96px}
.team-col-empty{border:1px dashed var(--line);border-radius:10px;padding:14px 10px;text-align:center;font-size:12px;color:var(--ink3)}
.team-card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:10px 11px;cursor:grab;transition:transform .18s cubic-bezier(.22,1,.36,1),box-shadow .18s,border-color .15s}
.team-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-1);border-color:color-mix(in srgb,var(--accent) 38%,var(--border))}
.team-card.dragging{opacity:.45;cursor:grabbing}
.team-card-top{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-bottom:6px}
.team-pri{font-size:11px;line-height:1;padding:4px 8px;border-radius:999px;letter-spacing:.06em;flex:none}
.team-card-del{border:0;background:transparent;color:var(--ink3);cursor:pointer;padding:3px;border-radius:6px;line-height:0;flex:none}
.team-card-del:hover{color:var(--danger);background:color-mix(in srgb,var(--danger) 10%,transparent)}
.team-card-del .ic{width:13px;height:13px}
.team-card-title{font-size:13px;font-weight:600;color:var(--ink);line-height:1.5;word-break:break-word;cursor:pointer;border-radius:4px}
.team-card-title:hover{text-decoration:underline;text-underline-offset:3px;color:var(--accent2)}
.team-card-title:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.team-card-note{font-size:12px;color:var(--ink2);line-height:1.6;margin-top:4px;word-break:break-word;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.team-card-meta{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-top:8px;font-size:12px;color:var(--ink3)}
.team-card-assignee{display:inline-flex;align-items:center;gap:5px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.team-card-due{display:inline-flex;align-items:center;gap:4px;flex:none;font-variant-numeric:tabular-nums}
.team-card-due .ic{width:12px;height:12px}
.team-members{display:flex;flex-wrap:wrap;gap:8px}
.team-member{display:inline-flex;align-items:center;gap:7px;padding:5px 9px 5px 5px;border:1px solid var(--border);border-radius:999px;background:var(--card2)}
.team-member-avatar{width:24px;height:24px;border-radius:50%;flex:none;background:var(--accent-soft);color:var(--accent2);display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:600}
.team-member-name{font-size:12px;color:var(--ink);max-width:96px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.team-member-del{border:0;background:transparent;color:var(--ink3);cursor:pointer;padding:1px;border-radius:50%;line-height:0}
.team-member-del:hover{color:var(--danger)}
.team-member-del .ic{width:12px;height:12px}
.team-member-add{display:flex;gap:8px;margin-top:10px}
.team-member-add .input{flex:1;min-width:0}
.team-log{display:flex;flex-direction:column;gap:0;max-height:320px;overflow:auto}
.team-log-item{display:flex;gap:9px;padding:9px 2px;border-bottom:1px dashed var(--line);font-size:12px;color:var(--ink2);line-height:1.6}
.team-log-item:last-child{border-bottom:0}
.team-log-dot{width:7px;height:7px;border-radius:50%;flex:none;margin-top:7px;background:var(--accent2)}
.team-log-item[data-kind="update"] .team-log-dot{background:var(--warn)}
.team-log-item[data-kind="member"] .team-log-dot{background:var(--ok)}
.team-log-time{color:var(--ink3);font-variant-numeric:tabular-nums;flex:none}
.team-empty{padding:26px 12px;text-align:center;color:var(--ink3);font-size:13px}
@media (max-width:1200px){
  .team-layout{grid-template-columns:minmax(0,1fr)}
  .team-side{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px;align-items:start}
}
@media (max-width:900px){
  .team-board{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:560px){
  .team-board{grid-template-columns:minmax(0,1fr)}
}
html[data-dark="1"] .team-card{box-shadow:none}
html[data-dark="1"] .team-card:hover{box-shadow:0 10px 22px -14px rgba(0,0,0,.7)}
html[data-dark="1"] .team-col{background:color-mix(in srgb,var(--card) 55%,transparent)}

/* 教师代课：预览和日期记录保持单列阅读，不压缩为移动端表格。 */
.substitution-choices{min-width:0;margin:12px 0;padding:0;border:0}
.substitution-choices legend{font-weight:600;margin-bottom:8px}
.modal .substitution-choice{display:flex;align-items:flex-start;gap:10px;padding:12px 0;border-bottom:1px solid var(--line);cursor:pointer}
.modal .substitution-choice input{flex:none;width:18px;height:18px;margin:1px 0 0;accent-color:var(--accent)}
.modal .substitution-choice input:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}
.modal .substitution-choice.is-disabled{cursor:default}
.modal .substitution-choice.is-disabled>span{opacity:.62}
.modal .substitution-choice.is-disabled input{cursor:not-allowed}
.substitution-choice-body>b{display:block;font-weight:600}
.substitution-choice>span,.substitution-item>div{display:grid;gap:4px;min-width:0;overflow-wrap:anywhere}
.substitution-choice span span,.substitution-item span{font-size:13px;color:var(--ink2)}
.substitution-choice small{color:var(--warn-strong)}
.substitution-list{display:grid;gap:10px}
.substitution-item{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px;background:var(--card2);border:1px solid var(--line);border-radius:10px}
.substitution-item .pill{flex:none}
.substitution-badge{display:block;margin-top:5px;font-size:12px;color:var(--accent)}
@media(max-width:560px){.substitution-item{align-items:flex-start;flex-direction:column}}

.substitution-dates{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.substitution-dates .field,.substitution-dates input{min-width:0;width:100%}
@media(max-width:560px){.substitution-dates{grid-template-columns:1fr}}


/* ---------- 周课表 / 听课课程表 移动端信息层级（20260915） ----------
   主体（表格或卡片）在上，编辑与教师操作在下；顶部角落只保留一个视图切换；
   导出 PDF 与班级颜色（含已保存配色与班级文本）收进「更多」。 */
.sched-actionbar{margin:12px 0 0}
.sched-more{position:relative;flex:none}
.sched-more-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:var(--z-sticky);display:grid;gap:6px;min-width:min(248px,74vw);padding:9px;border:1px solid var(--border);border-radius:12px;background:var(--card);box-shadow:var(--shadow-pop)}
.sched-more-menu[hidden]{display:none}
.sched-more-menu .btn{width:100%;justify-content:flex-start;text-align:left}
.sched-more-legend{padding-top:7px;border-top:1px dashed var(--line)}
.sched-more-legend .sched-class-legend{margin:6px 0 0;padding:7px 9px}
.substitution-summary{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:12px;padding:9px 11px;border:1px dashed var(--border);border-radius:10px;background:var(--card2)}
.substitution-summary .spacer{flex:1}
.substitution-summary-count{font-size:13px;color:var(--ink2)}
.substitution-summary-count b{color:var(--accent2);font-size:15px;margin:0 2px}
.substitution-item .sub-tag{font-style:normal;color:var(--accent2);border:1px solid var(--accent);border-radius:999px;padding:0 7px;font-size:11px;background:var(--card);white-space:nowrap;margin-right:5px}
.at-item .aud-teacher-view{margin-left:auto;flex:none}
@media(max-width:560px){
  .sched-actionbar{gap:6px}
  .sched-more-menu{right:auto;left:0;min-width:min(266px,86vw)}
  .smw-day{font-size:12px;padding:6px 3px}
  .substitution-summary{align-items:flex-start}
  .substitution-item .sub-tag{margin-right:4px}

/* 首页代课展示变体：班级第一眼可见；时间缺失显示"时间未录入"，不用内部占位科目。 */
.substitution-list-home{display:grid;gap:10px}
.substitution-list-home .substitution-item{align-items:flex-start;flex-direction:column;gap:7px}
.substitution-list-home .sub-home-class{font-size:17px;font-weight:750;color:var(--ink);line-height:1.35}
.substitution-list-home .substitution-item span{font-size:12.5px;color:var(--ink2);margin-right:10px}
.mc-audit-subject{font-size:12px;color:var(--ink2);border:1px dashed var(--line);border-radius:999px;padding:1px 8px}
}


/* ============================================================
   同板块子页面横向手势导航（assets/js/swipe-nav.js）
   只在本模块自己的状态类下生效；不改变布局归属、不全局删除其它动画。
   ============================================================ */

/* 拖动 / 回弹期间临时接管当前活动视图的横向位移，覆盖既有纵向 viewIn，
   避免两套 transform 争抢；类移除后立即让回。 */
.swipe-dragging .view.active,
.swipe-settling .view.active{animation:none !important}
.swipe-settling .view.active{will-change:transform}

/* 提交后目标页轻量入场，方向由 --swipe-enter-x 给出 */
.swipe-transit .view.active{animation:swipeInX .2s cubic-bezier(.22,.61,.36,1) both}
@keyframes swipeInX{from{opacity:0;transform:translate3d(var(--swipe-enter-x,14px),0,0)}to{opacity:1;transform:none}}

/* 触摸策略边界：只限定在真正承载页面手势的容器上（视图根 / 独立页外壳），
   保留纵向滚动与缩放，横向交给 JS；内部横向滚动容器与代码块保留自身
   策略，优先自己处理。不在 body 或复杂页面根容器上用 touch-action:none。
   这里不加媒体查询：touch-action 只影响触摸与笔输入，对鼠标无副作用，
   而移动端对 (pointer:coarse) 的判定在各家浏览器上并不一致。 */
.view.swipe-page,
main.shell.swipe-page{touch-action:pan-y pinch-zoom}
.view.swipe-page [data-swipe-scroll-x],
.view.swipe-page .sched-wrap,
.view.swipe-page .mk-overflow-x-auto,
.view.swipe-page pre{touch-action:pan-x pan-y}

/* 减少动态效果：取消跟随与位移入场，导航功能本身保留 */
@media (prefers-reduced-motion:reduce){
  .swipe-transit .view.active{animation:none !important}
  .swipe-dragging .view.active,
  .swipe-settling .view.active{transform:none !important;transition:none !important}
}
