/* ============ 淡蓝天空风 · 七年级男生向 ============ */
:root{
  --paper:#e4f0f8;          /* 淡蓝天空 · 背景 */
  --paper-2:#cce6f3;        /* 次背景 */
  --card:#ffffff;           /* 卡片白 */
  --ink:#162d4a;            /* 主文字 · 藏蓝 */
  --ink-2:#2e5a80;          /* 次级文字 */
  --ink-3:#6a99bd;          /* 辅助文字 */
  --line:#9cc5dd;           /* 淡线 */
  --line-2:#d3e9f2;         /* 极淡线 */
  --outline:#162d4a;        /* 描边 · 同主文字 */

  --sun:#f6ad55;            /* 暖金橙 · 高亮/激励 */
  --sun-soft:#fff8e6;
  --brand:#3678b8;          /* 天空蓝 · 主色 */
  --brand-2:#255a8f;        /* 深色变体 */
  --brand-soft:#ddeeff;     /* 浅底 */
  --coral:#e86a5e;          /* 珊瑚红 · 警示 */
  --blue:#5ba4cf;           /* 辅助蓝 */
  --blue-soft:#ddeeff;
  --green:#3aaa6a;          /* 翠绿 · 完成/达标 */
  --green-soft:#ddf5eb;
  --purple:#805ad5;
  --pink:#ed6496;

  --ok:#e6a800;
  --ok-soft:#fff8e6;
  --warn:#e6a800;
  --warn-soft:#fff8e6;
  --danger:#e86a5e;
  --danger-soft:#fde8e6;

  --gold:#f6ad55; --gold-2:#e09040; --gold-soft:#fff8e6;  /* 积分/奖励金 */
  --bronze:#cd8c52; --silver:#94a3b8;

  --radius:16px;
  --radius-sm:10px;
  --bw:2px;
  --shadow:4px 4px 0 rgba(22,45,74,.14);
  --shadow-sm:3px 3px 0 rgba(22,45,74,.14);
  --shadow-lg:7px 7px 0 rgba(22,45,74,.2);
  --font:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html,body{margin:0;padding:0;}
body{
  background:var(--paper);
  background-image:radial-gradient(rgba(22,45,74,.04) 1.3px, transparent 1.3px);
  background-size:22px 22px;   /* 漫画网点质感 */
  color:var(--ink);
  font-family:var(--font);
  font-size:15px;
  line-height:1.55;
  -webkit-font-smoothing:antialiased;
}
.hidden{display:none !important;}
h1,h2,h3,h4,h5,p{margin:0;}
button{font-family:inherit;}
input,select,textarea{font-family:inherit;font-size:15px;color:var(--ink);}
:focus-visible{outline:2.5px solid var(--brand);outline-offset:2px;}

/* ============ 启动 ============ */
.boot{position:fixed;inset:0;display:grid;place-items:center;background:var(--paper);z-index:60;}
.boot-inner{text-align:center;color:var(--ink-3);}
.boot-inner p{margin-top:14px;font-size:14px;}
.spinner{width:34px;height:34px;margin:0 auto;border:3.5px solid var(--line);border-top-color:var(--sun);border-radius:50%;animation:spin .8s linear infinite;}
@keyframes spin{to{transform:rotate(360deg);}}

/* ============ 通用控件 ============ */
.btn-primary{
  width:100%;border:var(--bw) solid var(--outline);border-radius:12px;
  background:linear-gradient(180deg,#f0ce4a,var(--sun));color:var(--ink);
  padding:11px 16px;font-size:15px;font-weight:800;cursor:pointer;
  box-shadow:var(--shadow-sm);transition:.12s;
}
.btn-primary:hover{filter:brightness(1.05);}
.btn-primary:active{transform:translate(2px,2px);box-shadow:1px 1px 0 rgba(22,45,74,.2);}
.btn-primary:disabled{opacity:.55;cursor:not-allowed;}
.btn-ghost{
  border:var(--bw) solid var(--outline);background:var(--card);color:var(--ink);border-radius:11px;
  padding:9px 14px;font-size:14px;font-weight:600;cursor:pointer;white-space:nowrap;
  box-shadow:var(--shadow-sm);transition:.12s;
}
.btn-ghost:hover{background:var(--sun-soft);}
.btn-ghost:active{transform:translate(2px,2px);box-shadow:1px 1px 0 rgba(22,35,58,.2);}
.btn-ghost:disabled{opacity:.5;cursor:not-allowed;}
.btn-mini{
  border:var(--bw) solid var(--outline);background:var(--card);color:var(--ink);border-radius:9px;
  padding:4px 10px;font-size:13px;font-weight:600;cursor:pointer;box-shadow:2px 2px 0 rgba(22,35,58,.16);transition:.12s;
}
.btn-mini:hover{background:var(--sun-soft);}
.btn-mini:active{transform:translate(2px,2px);box-shadow:none;}
.btn-danger-ghost{border-color:var(--outline);color:var(--danger);background:#fbeae9;}
.btn-danger-ghost:hover{background:var(--danger-soft);}
/* 触控区只按垂直方向放大到 44px：横向不扩，否则会盖住并排的「编辑」「加到今天」 */
.btn-mini.btn-danger-ghost{position:relative;}
.btn-mini.btn-danger-ghost::after{content:'';position:absolute;left:0;right:0;top:50%;
  transform:translateY(-50%);height:44px;}
.link-btn{background:none;border:0;color:var(--brand-2);font-size:14px;font-weight:600;cursor:pointer;padding:4px 0;}
.link-btn:hover{text-decoration:underline;}
input[type=text],input[type=email],input[type=password],input[type=number],input[type=date],select,textarea{
  width:100%;border:var(--bw) solid var(--outline);background:#fff;border-radius:11px;
  padding:10px 12px;transition:.16s;
}
input:focus,select:focus,textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3.5px var(--brand-soft);outline:none;}

/* ============ 登录 ============ */
.auth-wrap{min-height:100vh;display:grid;place-items:center;padding:24px 16px;
  background:linear-gradient(160deg,#fff7da 0%,var(--paper) 45%,#fff7da 100%);}
.auth-card{width:100%;max-width:420px;background:var(--card);border:3px solid var(--outline);
  border-radius:22px;padding:28px 24px 22px;box-shadow:var(--shadow-lg);}
.auth-head{text-align:center;margin-bottom:20px;}
.auth-head h2{font-size:21px;font-weight:900;margin-top:12px;letter-spacing:.5px;}
.auth-head p{font-size:13px;color:var(--ink-3);margin-top:4px;}
.logo{
  display:inline-grid;place-items:center;width:42px;height:42px;border-radius:13px;
  background:linear-gradient(160deg,#f0ce4a,var(--sun));color:var(--ink);font-weight:900;font-size:20px;
  border:2.5px solid var(--outline);box-shadow:3px 3px 0 rgba(22,35,58,.25);
}
.logo-lg{width:58px;height:58px;border-radius:18px;font-size:28px;}
.auth-tabs{display:flex;gap:6px;background:var(--paper-2);padding:4px;border:2px solid var(--outline);border-radius:13px;margin-bottom:18px;}
.atab{flex:1;border:0;background:transparent;padding:8px 6px;border-radius:9px;font-size:14px;
  color:var(--ink-2);cursor:pointer;font-weight:600;transition:.16s;}
.atab.active{background:var(--sun);color:var(--ink);font-weight:800;box-shadow:2px 2px 0 rgba(22,35,58,.3);}
.auth-form{display:flex;flex-direction:column;gap:14px;}
.auth-form label{display:block;font-size:13px;font-weight:700;color:var(--ink-2);}
.auth-form label input{margin-top:6px;font-weight:400;}
.row-inline{display:flex;gap:8px;margin-top:6px;align-items:stretch;}
.row-inline input{margin-top:0 !important;flex:1 1 0;min-width:0;}
.row-inline .btn-ghost{flex:none;}
.form-err{color:var(--danger);font-size:13px;min-height:0;font-weight:600;}
.form-err:not(:empty){background:var(--danger-soft);padding:8px 10px;border-radius:9px;}
.hint{font-size:12.5px;color:var(--ink-3);}
.form-foot{text-align:center;}
.auth-note{margin-top:18px;padding-top:16px;border-top:2px dashed var(--line);font-size:12.5px;color:var(--ink-3);line-height:1.7;}

/* ============ 主框架：左侧导航 + 右侧内容 ============ */
.app-shell{display:flex;min-height:100vh;align-items:stretch;}
.sidebar{
  width:196px;flex:none;position:sticky;top:0;height:100vh;overflow-y:auto;
  display:flex;flex-direction:column;align-items:center;gap:12px;
  background:var(--card);border-right:3px solid var(--outline);padding:14px 10px 12px;z-index:30;
}
.side-logo{
  width:42px;height:42px;display:grid;place-items:center;font-size:23px;
  background:linear-gradient(160deg,#fff0b8,var(--sun));border:2.5px solid var(--outline);
  border-radius:13px;box-shadow:3px 3px 0 rgba(22,35,58,.22);
}
.side-logo svg{width:22px;height:22px;color:var(--ink);}
.side-nav{display:flex;flex-direction:column;gap:5px;width:100%;flex:none;}

/* 侧边栏 · 学科导航（本年级全部学科） */
.side-subj{width:100%;flex:1;min-height:0;display:flex;flex-direction:column;
  border-top:2px dashed var(--line);padding-top:10px;}
.side-subj-head{font-size:11px;font-weight:800;color:var(--ink-3);letter-spacing:.6px;padding:0 8px 6px;}
.side-subj-list{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:5px;padding-bottom:4px;}
.side-subj-list::-webkit-scrollbar{width:5px;}
.side-subj-list::-webkit-scrollbar-thumb{background:var(--line);border-radius:3px;}
.subj-nav-btn{
  display:flex;align-items:center;gap:7px;width:100%;text-align:left;
  border:2px solid transparent;background:transparent;border-radius:10px;padding:6px 8px;
  font-size:13px;font-weight:600;color:var(--ink-2);cursor:pointer;transition:.13s;
}
.subj-nav-btn:hover{background:var(--sun-soft);color:var(--ink);}
.subj-nav-btn.active{background:linear-gradient(180deg,#f0ce4a,var(--sun));border-color:var(--outline);
  color:var(--ink);font-weight:800;box-shadow:2px 2px 0 rgba(22,35,58,.22);}
.subj-nav-btn .sn-dot{width:9px;height:9px;border-radius:50%;flex:none;border:1.5px solid var(--outline);}
.subj-nav-btn .sn-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.subj-nav-btn .sn-cnt{font-size:11px;color:var(--ink-3);font-variant-numeric:tabular-nums;flex:none;}
.subj-nav-btn.active .sn-cnt{color:var(--ink-2);}
/* 页签改成「图标在左、文字在右」的横排小行：竖排大图标一张占 ~76px，
   7 个页签就把 iPad 横屏的侧栏占满，学科列表只剩一行的地方；
   改横排后每张 ~38px，学科列表能整列放下。 */
.tab{
  border:var(--bw) solid transparent;background:transparent;border-radius:12px;
  padding:6px 9px;font-size:13px;color:var(--ink-2);cursor:pointer;font-weight:600;
  display:flex;flex-direction:row;align-items:center;gap:9px;transition:.14s;width:100%;
}
.tab .tab-ico{
  width:27px;height:27px;display:grid;place-items:center;font-size:15px;border-radius:9px;
  background:var(--paper-2);border:2px solid transparent;transition:.14s;flex:none;
}
.tab .tab-ico svg{width:15px;height:15px;color:var(--ink-2);transition:.14s;}
.tab.active .tab-ico svg{color:#fff;}
.tab:hover{color:var(--ink);}
.tab:hover .tab-ico{border-color:var(--outline);}
.tab.active{color:var(--ink);font-weight:800;}
.tab.active .tab-ico{
  background:linear-gradient(180deg,#5ba4cf,var(--brand));border-color:var(--outline);
  box-shadow:2.5px 2.5px 0 rgba(22,45,74,.28);
}
.side-foot{display:flex;flex-direction:column;align-items:center;gap:5px;color:var(--ink-3);padding:0 10px 12px;}
/* 侧边栏底部：同步云端数据 + 一键导出全部数据（微信传回电脑用） */
.side-export{width:100%;display:inline-flex;align-items:center;justify-content:center;gap:5px;
  font-size:11px;font-weight:800;color:var(--brand);background:var(--card);
  border:var(--bw) solid var(--outline);border-radius:10px;box-shadow:var(--shadow-sm);
  padding:6px 8px;cursor:pointer;line-height:1.4;}
.side-export:hover{border-color:var(--accent);color:var(--accent);}
/* 页首导出条：没有日期栏的页面（练习册 / 单词 / 历史）挂导出入口用 */
.export-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
  margin:0 0 12px;padding:9px 13px;background:var(--brand-soft);border:var(--bw) solid var(--outline);
  border-radius:12px;box-shadow:var(--shadow-sm);}
.export-hint{font-size:12px;color:var(--ink-2);}

.main-col{flex:1;min-width:0;display:flex;flex-direction:column;}
.topbar{
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  padding:12px 20px;background:var(--card);border-bottom:3px solid var(--outline);
  position:sticky;top:0;z-index:20;
}
.brand{display:flex;align-items:center;gap:11px;min-width:0;}
.brand-text h1{font-size:16.5px;font-weight:900;letter-spacing:.3px;white-space:nowrap;}
.brand-text p{font-size:12px;color:var(--ink-3);margin-top:1px;}
/* 版本号：每次更新这里会变，一眼看出手机上跑的是哪一版 */
.app-ver{display:inline-block;margin-top:3px;font-size:10.5px;font-weight:800;letter-spacing:.2px;
  color:var(--brand);background:var(--brand-soft);border:1px solid var(--brand);
  border-radius:999px;padding:1px 7px;line-height:1.5;white-space:nowrap;opacity:.9}
.topbar-right{display:flex;align-items:center;gap:10px;min-width:0;margin-left:auto;}
.who{font-size:12.5px;color:var(--ink-3);max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.streak-badge{
  display:inline-flex;align-items:center;gap:5px;background:linear-gradient(180deg,#e05a55,var(--coral));
  color:#fff;font-weight:800;font-size:13.5px;padding:6px 13px;border-radius:999px;
  border:2.5px solid var(--outline);box-shadow:2.5px 2.5px 0 rgba(22,35,58,.25);white-space:nowrap;
}

/* 学段切换（七上 ~ 九下） */
.sem-toggle{
  display:inline-flex;align-items:center;background:var(--paper-2);border:2.5px solid var(--outline);border-radius:999px;
  padding:3px;box-shadow:var(--shadow-sm);flex:0 1 auto;min-width:0;max-width:100%;flex-wrap:wrap;
}
.sem-btn{
  border:0;background:transparent;border-radius:999px;padding:6px 12px;
  font-size:13.5px;font-weight:700;color:var(--ink-2);cursor:pointer;transition:.14s;white-space:nowrap;
}
.sem-sep{width:1.5px;height:18px;background:var(--line);border-radius:2px;flex:none;margin:0 2px;}
.sem-btn:hover{color:var(--ink);}
.sem-btn.active{
  background:linear-gradient(180deg,#e05a55,var(--coral));color:#fff;font-weight:800;
  box-shadow:2px 2px 0 rgba(22,35,58,.3);
}
.view{flex:1;padding:20px 22px 90px;max-width:1160px;width:100%;margin:0 auto;}

/* ============ 问候横幅 ============ */
.greet-banner{
  display:flex;align-items:center;gap:14px;
  background:linear-gradient(135deg,#d9b53a,#c9a227);
  border:3px solid var(--outline);border-radius:18px;
  padding:16px 20px;box-shadow:var(--shadow);margin-bottom:16px;color:#fff;
}
.greet-emoji{font-size:32px;flex:none;filter:drop-shadow(2px 2px 0 rgba(22,35,58,.3));}
.greet-banner b{display:block;font-size:18px;font-weight:900;letter-spacing:.5px;text-shadow:1.5px 1.5px 0 rgba(22,35,58,.28);}
.greet-banner span{font-size:13px;opacity:.92;}

/* ============ 日期条 ============ */
.datebar{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  background:var(--card);border:var(--bw) solid var(--outline);border-radius:var(--radius);
  padding:12px 14px;box-shadow:var(--shadow);margin-bottom:16px;
}
.date-nav{display:flex;align-items:center;gap:6px;}
.icon-btn{width:34px;height:34px;border:var(--bw) solid var(--outline);background:var(--card);border-radius:10px;
  cursor:pointer;color:var(--ink);font-size:17px;font-weight:800;line-height:1;display:grid;place-items:center;
  box-shadow:2px 2px 0 rgba(22,35,58,.16);transition:.12s;}
.icon-btn:hover{background:var(--sun-soft);}
.icon-btn:active{transform:translate(2px,2px);box-shadow:none;}
.date-label{font-size:16px;font-weight:800;min-width:150px;text-align:center;}
.date-meta{font-size:12.5px;color:var(--ink-3);font-weight:600;}
/* 仅本地模式标识（2026-10-19）：提醒当前改动只存本机 */
.lm-chip{display:inline-block;margin-left:8px;padding:2px 9px;border-radius:99px;font-size:11.5px;font-weight:700;
  color:#8a5a00;background:#fff3d6;border:1px solid #f0d9a0;vertical-align:middle;cursor:help;}
.datebar-right{margin-left:auto;display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
input.date-input{width:auto !important;padding:7px 10px;font-size:14px;}

/* ============ 概览 ============ */
.overview{
  display:grid;grid-template-columns:auto 1fr;gap:18px;align-items:center;
  background:linear-gradient(135deg,#ffffff 0%,#fff7da 100%);
  border:var(--bw) solid var(--outline);border-radius:var(--radius);padding:16px 18px;
  box-shadow:var(--shadow);margin-bottom:16px;
}
.ring-wrap{position:relative;display:grid;place-items:center;}
.ring-wrap .ring-txt{position:absolute;text-align:center;}
.ring-wrap .ring-txt b{display:block;font-size:20px;font-weight:900;line-height:1.1;}
.ring-wrap .ring-txt span{font-size:11px;color:var(--ink-3);font-weight:600;}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(112px,1fr));gap:12px;}
.kpi{background:var(--card);border:var(--bw) solid var(--outline);border-radius:13px;padding:10px 12px;box-shadow:2.5px 2.5px 0 rgba(22,35,58,.14);}
.kpi b{display:block;font-size:19px;font-weight:900;letter-spacing:-.3px;}
.kpi span{font-size:12px;color:var(--ink-3);font-weight:600;}
.kpi.ok b{color:var(--ok);}
.kpi.warn b{color:var(--warn);}
.kpi.brand b{color:var(--brand-2);}

/* ============ 科目筛选 ============ */
.chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px;}
.chip{
  border:var(--bw) solid var(--outline);background:var(--card);border-radius:999px;padding:6px 13px;font-size:13.5px;
  color:var(--ink);cursor:pointer;font-weight:600;display:inline-flex;align-items:center;gap:6px;
  box-shadow:2px 2px 0 rgba(22,35,58,.14);transition:.12s;
}
.chip:hover{background:var(--sun-soft);}
.chip:active{transform:translate(2px,2px);box-shadow:none;}
.chip.active{background:var(--sun);font-weight:800;}
.chip .cnt{font-size:11.5px;opacity:.75;font-variant-numeric:tabular-nums;}
.chip .swatch{width:9px;height:9px;border-radius:50%;flex:none;border:1.5px solid var(--outline);}
.chip.active .swatch{border-color:var(--ink);}

/* ============ 科目卡片 ============ */
.subj-card{background:var(--card);border:var(--bw) solid var(--outline);border-radius:var(--radius);
  box-shadow:var(--shadow);margin-bottom:14px;overflow:hidden;}
.subj-head{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:2px dashed var(--line);}
.subj-bar{width:6px;height:22px;border-radius:3px;flex:none;border:1.5px solid var(--outline);}
.subj-head h3{font-size:15px;font-weight:800;flex:1;}
.subj-book{font-size:11px;font-weight:700;color:var(--blue);background:var(--blue-soft);
  border:1.5px solid var(--outline);border-radius:999px;padding:2px 8px;white-space:nowrap;flex:none;}
.subj-prog{font-size:12.5px;color:var(--ink-3);font-variant-numeric:tabular-nums;font-weight:600;}
.subj-prog.full{color:var(--green);font-weight:800;}
.progress-line{height:5px;background:var(--line-2);border-bottom:1.5px solid var(--line);}
.progress-line i{display:block;height:100%;transition:width .3s;}

/* 整科做完后收起任务行时的收尾提示（只在「全部学科」汇总视图出现） */
.subj-all-done{
  display:flex;align-items:center;gap:8px;padding:12px 16px;
  font-size:13.5px;font-weight:700;color:var(--green);
}
.subj-all-done svg{width:17px;height:17px;flex:none;}

/* ============ 汇总视图 / 单科视图 切换提示条 ============ */
.view-hint{
  display:flex;align-items:center;gap:8px;margin:-2px 0 12px;
  padding:8px 12px;border-radius:12px;border:2px dashed var(--line);
  background:var(--sun-soft);font-size:12.5px;color:var(--ink-2);font-weight:600;
}
.view-hint .vh-dot{
  width:8px;height:8px;border-radius:50%;flex:none;background:var(--brand);
  box-shadow:0 0 0 3px var(--brand-soft);
}
.view-hint .vh-txt{flex:1 1 auto;min-width:0;line-height:1.5;}
.view-hint .vh-btn{
  flex:none;border:2px solid var(--outline);background:var(--card);color:var(--ink);
  border-radius:999px;padding:4px 12px;font-size:12px;font-weight:700;cursor:pointer;transition:.14s;
  font-family:inherit;
}
.view-hint .vh-btn:hover{background:var(--brand);border-color:var(--brand);color:#fff;}
/* 单科视图用绿色调，和汇总视图一眼区分开 */
.view-hint.on-subj{background:var(--ok-soft);border-color:var(--ok-soft);}
.view-hint.on-subj .vh-dot{background:var(--ok);box-shadow:0 0 0 3px rgba(201,162,39,.18);}
/* 区间查看再换一种蓝色调：三种视图状态（汇总/单科/区间）各有各的颜色 */
.view-hint.on-range{background:var(--brand-soft);border-color:var(--brand-soft);align-items:center;flex-wrap:wrap;}
.view-hint.on-range .vh-dot{background:var(--brand);box-shadow:0 0 0 3px rgba(27,76,155,.18);}
.view-hint.on-range .vh-btn + .vh-btn{margin-left:6px;}
.range-bar-hw{align-items:center;}
.range-bar-hw .range-label{font-size:13px;font-weight:800;color:var(--ink-2);}
.btn-mini.range-toggle.on{background:var(--brand);border-color:var(--brand);color:#fff;}

.task-list{list-style:none;margin:0;padding:6px 8px;}
/* 区间视图里的日期小标题：把同一天的作业归在一起，尾巴上标这天这科完成了几项 */
.task-date-head{
  display:flex;align-items:center;gap:8px;list-style:none;
  padding:10px 10px 5px;margin-top:3px;
  font-size:12.5px;font-weight:800;color:var(--ink-3);
}
.task-date-head:first-child{margin-top:0;}
.task-date-head .tdh-prog{
  margin-left:auto;font-size:11.5px;font-weight:800;color:var(--ink-3);
  background:var(--paper-2);border:1.5px solid var(--line);border-radius:999px;
  padding:1px 9px;font-variant-numeric:tabular-nums;flex:none;
}
.task-date-head .tdh-prog.full{background:var(--green-soft);border-color:var(--green-soft);color:#1c6b3a;}
/* 提前学按日期铺开后的日期标题 */
.task-date-head.is-today .tdh-date{color:var(--brand);}
.tdh-tag{font-style:normal;font-size:10.5px;font-weight:800;border-radius:999px;padding:1px 7px;margin-left:6px;}
.tdh-tag.today{background:var(--brand-soft);color:var(--brand);}
.tdh-tag.overdue{background:var(--danger-soft);color:var(--danger);}
.adv-day-group{margin-bottom:10px;}
/* 每一项作业之间用粗虚线分割：相邻项去顶部圆角形成连体。
   用更粗更深的虚线，同科多行作业时每一项的边界一眼可辨 */
.task-item + .task-item .task-body{border-top:3px dashed #9fb0c4;border-radius:0;}
/* 同一科目多项作业：奇偶交替底色（.alt 由渲染时按行计数加上，need-attach 的
   红色渐变提示不受影响）；悬停高亮优先级更高，覆盖两者 */
.task-list .task-item.alt:not(.need-attach) .task-body{background:#f1f4fa;}
.task-list .task-item:hover .task-body,
.task-list .task-item.alt:hover .task-body{background:var(--sun-soft);}
.task-list .task-item:last-child .task-body{border-radius:0 0 12px 12px;}
/* .task-item 是外壳：左右滑动时只让里面的 .task-body 位移，红色删除按钮固定在两侧 */
.task-item{position:relative;overflow:hidden;border-radius:12px;transition:.16s;}
.task-body{display:flex;align-items:center;gap:10px;padding:8px;border-radius:12px;background:var(--card);
  position:relative;z-index:1;transition:transform .18s ease-out;}
.task-item:hover .task-body{background:var(--sun-soft);}
.task-item.done .task-title{color:var(--ink-3);text-decoration:line-through;text-decoration-color:var(--ink-3);}
.check{
  width:25px;height:25px;flex:none;border-radius:8px;border:2.5px solid var(--outline);background:#fff;
  cursor:pointer;display:grid;place-items:center;color:#fff;font-size:14px;transition:.14s;padding:0;
}
.check:hover{background:var(--sun-soft);}
.task-item.done .check{background:var(--green);}
.check svg{width:13px;height:13px;opacity:0;transition:.16s;}
.task-item.done .check svg{opacity:1;}
/* 独立使用的勾选框（如练习册目录表）：自身带 done 时也要显示绿底 + 勾 */
.check.done{background:var(--green);border-color:var(--green);}
.check.done svg{opacity:1;}
/* pre-line：识别结果里的小项换行、或手动输入的换行，都能原样显示，不全挤在一行 */
.task-title{flex:1 1 0;min-width:0;font-size:14.5px;word-break:break-word;cursor:pointer;font-weight:500;
  white-space:pre-line;}
input.min-input{
  width:66px !important;flex:none;padding:5px 8px;font-size:13px;text-align:right;border-radius:8px;
  border:2px solid var(--line);background:var(--paper);color:var(--ink-2);font-variant-numeric:tabular-nums;font-weight:700;
}
input.min-input:hover{border-color:var(--outline);}
input.min-input:focus{background:#fff;border-color:var(--brand);}
.min-suffix{font-size:12px;color:var(--ink-3);flex:none;margin-left:-6px;font-weight:600;}
.del-btn{
  width:30px;height:30px;flex:none;border:0;background:transparent;color:var(--ink-3);border-radius:8px;
  cursor:pointer;font-size:17px;line-height:1;display:grid;place-items:center;transition:.14s;padding:0;
  position:relative;
}
.del-btn:hover{background:var(--danger-soft);color:var(--danger);}
/* 手机端触控区放大：视觉尺寸不变，点击热区扩到 44×44（此前 27px 太小，容易点不中） */
.del-btn::after{content:'';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:44px;height:44px;border-radius:12px;}
.del-btn-lg{width:34px;height:34px;font-size:19px;border:2px solid var(--line);background:var(--card);}
.del-btn-lg:hover{border-color:var(--danger);}

/* ============ 「是否有附件需查看」选择框 ============ */
.attach-box{
  display:flex;align-items:center;gap:4px;flex:none;padding:3px 6px 3px 8px;border-radius:10px;
  border:2px solid var(--line);background:var(--paper);transition:.16s;
}
.attach-label{font-size:11px;color:var(--ink-3);font-weight:700;flex:none;}
.attach-opt{
  min-width:30px;height:24px;padding:0 8px;border:0;border-radius:7px;background:transparent;cursor:pointer;
  font-size:12.5px;font-weight:700;color:var(--ink-3);transition:.14s;position:relative;
}
/* 触控热区放大到 44px 高（视觉尺寸不变） */
.attach-opt::after{content:'';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:100%;height:44px;border-radius:10px;}
.attach-opt:hover{background:var(--sun-soft);color:var(--ink);}
/* 选中「是」→ 红色醒目提醒；选中「否」→ 保持安静的中性色 */
.attach-box.on{border-color:var(--danger);background:var(--danger-soft);}
.attach-box.on .attach-label{color:var(--danger);}
.attach-opt.on[data-val="1"]{background:var(--danger);color:#fff;}
.attach-opt.on[data-val="0"]{background:var(--sun-soft);color:var(--ink-2);}
/* 整条作业也带一点红色提示，扫一眼就能看到哪几项要翻附件 */
.task-item.need-attach .task-body{background:linear-gradient(90deg,var(--danger-soft) 0%,transparent 72%);}
.task-item.need-attach .task-title::before{
  content:'';display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--danger);
  margin-right:7px;vertical-align:middle;
}
/* 校内作业清单里「有附件」的那条也带一点红色提示 */
.hw-item.need-attach{background:linear-gradient(90deg,var(--danger-soft) 0%,transparent 70%);border-radius:10px;}
/* 附件提醒：明确让孩子「去微信查看」（登记校内作业 / 今日打卡通用） */
.attach-wechat{display:inline-flex;align-items:center;gap:2px;flex:none;font-size:11.5px;font-weight:800;
  color:#fff;background:var(--danger);border-radius:8px;padding:3px 8px;white-space:nowrap;}
.attach-remind{display:flex;align-items:center;gap:8px;margin:10px 14px 4px;padding:10px 14px;border-radius:12px;
  background:var(--danger-soft);border:2px solid var(--danger);color:var(--danger);font-size:13.5px;font-weight:700;}
.attach-remind a,.attach-remind b{color:var(--danger);}

/* ============ 左滑删除 / 右滑完成（触屏） ============ */
.swipe-act{
  position:absolute;top:0;bottom:0;width:78px;z-index:0;display:none;
  align-items:center;justify-content:center;border:0;color:#fff;
  font-size:14px;font-weight:700;cursor:pointer;padding:0;
}
/* 左滑 → 行尾露出红色「删除」；右滑 → 行首露出绿色「完成 / 撤销」 */
.swipe-del-r{right:0;background:var(--danger);border-radius:0 12px 12px 0;}
.swipe-done-l{left:0;background:var(--green);border-radius:12px 0 0 12px;}
/* 只显示「被滑出来的那一侧」的按钮 */
.task-item.swipe-left .swipe-del-r,
.task-item.swipe-right .swipe-done-l{display:flex;}
.task-item.swipe-left .task-body{transform:translateX(-78px);}
.task-item.swipe-right .task-body{transform:translateX(78px);}
/* 尊重系统「减少动态效果」：位移不做动画，直接到位 */
@media (prefers-reduced-motion: reduce){
  .task-body{transition:none;}
}

/* ============ 智能推荐计划 ============ */
.reco-stat{
  background:var(--sun-soft);border:2px solid var(--outline);border-radius:var(--radius-sm);
  padding:10px 12px;font-size:12.5px;line-height:1.6;margin-bottom:10px;
}
.reco-stat b{font-weight:800;}
.reco-note{display:block;color:var(--ink-3);font-size:11.5px;margin-top:3px;}
.reco-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px;}
.reco-chip{font-size:11.5px;font-weight:700;padding:3px 9px;border-radius:999px;
  border:2px solid var(--line);background:var(--paper);color:var(--ink-2);}
.reco-chip.weak{background:#fbeae9;border-color:#ebaaa8;color:#b01c23;}
.reco-chip.good{background:#fff7da;border-color:#e8ce7a;color:#8a6a0a;}
.reco-cat{font-size:13px;color:var(--ink-3);font-weight:600;margin:14px 0 4px;}
.reco-item{align-items:flex-start;}
.reco-title{font-weight:600;}
.reco-dup{color:var(--ink-3);font-weight:400;}
.reco-tag{
  font-size:10.5px;font-weight:700;padding:1px 6px;border-radius:999px;
  background:#ddeeff;color:#3678b8;border:1.5px solid #9cc5dd;white-space:nowrap;
}
.reco-why{display:block;font-size:11.5px;color:var(--warn);margin-top:3px;line-height:1.45;}
.btn-reco{background:linear-gradient(180deg,#fff0b8,var(--sun));border-color:var(--outline);font-weight:700;}

/* ============ 假期作业排期 ============ */
.field-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:12px;}
.field-row label{font-size:13px;font-weight:600;display:flex;align-items:center;gap:6px;}
.holiday-days{font-size:12.5px;font-weight:700;color:var(--brand-2);}
.holiday-mode{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px;}
.holiday-list{display:flex;flex-direction:column;gap:8px;margin-bottom:8px;}
.holiday-row{display:flex;align-items:center;gap:8px;}
.holiday-row select{
  width:96px;flex:none;padding:7px 9px;font-size:13.5px;border-radius:9px;
  border:2px solid var(--line);background:var(--card);color:var(--ink);
}
.holiday-row .h-title{flex:1 1 0;min-width:0;padding:7px 10px;font-size:14px;border-radius:9px;}
.holiday-row .h-min{width:72px !important;flex:none;padding:7px 9px;font-size:13px;border-radius:9px;text-align:right;}
.holiday-preview{
  margin-top:12px;background:var(--paper);border:2px dashed var(--line);border-radius:var(--radius-sm);
  padding:10px 12px;font-size:12.5px;line-height:1.6;color:var(--ink-2);word-break:break-word;
}
.holiday-span{display:block;color:var(--ink-3);font-size:11.5px;margin-top:2px;}

.add-row{display:flex;gap:8px;align-items:center;padding:10px 12px;border-top:2px dashed var(--line);background:var(--paper);}
.add-row input[type=text]{flex:1 1 0;min-width:0;padding:8px 11px;font-size:14px;border-radius:10px;}
.add-row input[type=number]{width:70px;flex:none;padding:8px 10px;font-size:14px;border-radius:10px;text-align:right;}
.add-row .btn-mini{flex:none;padding:7px 14px;}

/* ============ 提前学 ============ */
.cat-chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px;}
.two-col{display:grid;grid-template-columns:1fr;gap:16px;}
.panel{background:var(--card);border:var(--bw) solid var(--outline);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:16px;margin-bottom:16px;}
.panel-head{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap;}
.panel-head h3{font-size:15.5px;font-weight:800;flex:1;min-width:0;}
.panel-head .sub{font-size:12.5px;color:var(--ink-3);width:100%;margin-top:-8px;}

.plan-card{
  border:var(--bw) solid var(--outline);border-radius:14px;padding:13px 14px;margin-bottom:12px;
  background:var(--card);box-shadow:var(--shadow-sm);transition:.12s;
}
.plan-card:hover{transform:translate(-1px,-1px);box-shadow:5px 5px 0 rgba(22,35,58,.18);}
.plan-top{display:flex;align-items:center;gap:8px;margin-bottom:7px;flex-wrap:wrap;}
.tag{font-size:11.5px;font-weight:800;padding:3px 9px;border-radius:999px;white-space:nowrap;border:1.5px solid var(--outline);}
.tag-sem{background:var(--blue-soft);color:var(--blue);}
.plan-top h4{font-size:14.5px;font-weight:800;flex:1;min-width:0;word-break:break-word;}
.plan-goal{font-size:13px;color:var(--ink-2);margin-bottom:9px;word-break:break-word;}
.plan-foot{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.week-bar{flex:1;min-width:110px;height:10px;background:var(--paper-2);border:1.5px solid var(--outline);border-radius:6px;overflow:hidden;}
.week-bar i{display:block;height:100%;background:var(--sun);transition:width .3s;}
.week-bar.full i{background:var(--green);}
.week-txt{font-size:12.5px;color:var(--ink-2);font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:700;}
.plan-actions{display:flex;gap:6px;margin-left:auto;}

.log-item{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:12px;transition:.16s;}
.log-item:hover{background:var(--sun-soft);}
.log-main{flex:1;min-width:0;}
.log-title{font-size:14.5px;word-break:break-word;font-weight:500;}
.log-item.done .log-title{color:var(--ink-3);text-decoration:line-through;text-decoration-color:var(--ink-3);}
.log-sub{font-size:12px;color:var(--ink-3);margin-top:2px;font-weight:600;}

.empty{text-align:center;color:var(--ink-3);font-size:13.5px;padding:26px 12px;}
.empty b{display:block;color:var(--ink-2);font-size:14.5px;margin-bottom:5px;font-weight:800;}

/* ============ 历史统计 ============ */
.range-bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:16px;}
.range-custom{display:flex;align-items:center;gap:7px;font-size:13px;color:var(--ink-3);font-weight:600;}

.heat{display:flex;gap:11px;overflow-x:auto;padding-bottom:6px;}
.heat-labels{display:grid;grid-template-rows:repeat(7,15px);gap:4px;font-size:10.5px;color:var(--ink-3);padding-top:19px;font-weight:600;}
.heat-labels span{line-height:15px;}
.heat-grid{display:flex;gap:4px;}
.heat-col{display:flex;flex-direction:column;gap:4px;}
.heat-col .mlabel{height:15px;line-height:15px;font-size:10.5px;color:var(--ink-3);white-space:nowrap;font-weight:600;}
.heat-col .cells{display:grid;grid-template-rows:repeat(7,15px);gap:4px;}
.heat-cell{width:15px;height:15px;border-radius:4.5px;background:#d3e9f2;cursor:pointer;transition:.15s;border:1.5px solid rgba(22,45,74,.14);}
.heat-cell:hover{transform:scale(1.25);border-color:var(--outline);}
.heat-cell.lv1{background:#fff8e6;}
.heat-cell.lv2{background:#e09040;}
.heat-cell.lv3{background:#e86a5e;}
.heat-cell.lv4{background:#255a8f;}
.heat-cell.today{border-color:var(--outline);box-shadow:0 0 0 2px #fff inset;}
.heat-legend{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--ink-3);margin-top:12px;justify-content:flex-end;font-weight:600;}
.heat-legend i{width:13px;height:13px;border-radius:4px;display:inline-block;border:1.5px solid rgba(22,45,74,.2);}

table.data-table{width:100%;border-collapse:collapse;font-size:13.5px;}
table.data-table th{
  text-align:left;font-weight:700;color:var(--ink-3);font-size:12.5px;padding:9px 10px;
  border-bottom:2px solid var(--outline);white-space:nowrap;
}
table.data-table td{padding:10px;border-bottom:2px dashed var(--line-2);font-variant-numeric:tabular-nums;}
table.data-table tr:last-child td{border-bottom:0;}
table.data-table td.name{font-weight:800;font-variant-numeric:normal;}
.rate-pill{display:inline-block;min-width:52px;text-align:center;padding:3px 9px;border-radius:999px;font-size:12.5px;font-weight:800;border:1.5px solid var(--outline);}
.rate-high{background:var(--green-soft);color:var(--green);}
.rate-mid{background:var(--warn-soft);color:var(--warn);}
.rate-low{background:var(--danger-soft);color:var(--danger);}
.table-scroll{overflow-x:auto;}

.day-list{display:flex;flex-direction:column;gap:9px;}
.day-row{border:var(--bw) solid var(--outline);border-radius:13px;overflow:hidden;background:var(--card);box-shadow:2.5px 2.5px 0 rgba(22,35,58,.12);}
.day-row-head{display:flex;align-items:center;gap:10px;padding:11px 13px;cursor:pointer;transition:.16s;}
.day-row-head:hover{background:var(--sun-soft);}
.day-row-head .d{font-size:14px;font-weight:800;min-width:96px;}
.day-row-head .bar{flex:1;height:10px;background:var(--paper-2);border:1.5px solid var(--outline);border-radius:6px;overflow:hidden;min-width:60px;}
.day-row-head .bar i{display:block;height:100%;background:var(--sun);}
.day-row-head .bar.full i{background:var(--green);}
.day-row-head .pct{font-size:12.5px;color:var(--ink-2);min-width:74px;text-align:right;font-variant-numeric:tabular-nums;font-weight:600;}
.day-row-body{padding:0 13px 13px;border-top:2px dashed var(--line);}
.day-row-body h5{font-size:12.5px;color:var(--ink-3);font-weight:800;margin:11px 0 6px;}
.mini-list{list-style:none;margin:0;padding:0;font-size:13.5px;}
.mini-list li{padding:4px 0;display:flex;gap:8px;align-items:baseline;}
.mini-list li .ok{color:var(--green);flex:none;font-size:12px;font-weight:700;}
.mini-list li .no{color:var(--ink-3);flex:none;font-size:12px;font-weight:600;}
.note-box{background:var(--paper);border:2px dashed var(--line);border-radius:11px;padding:11px 13px;font-size:13.5px;color:var(--ink-2);}

/* ============ 每日小结 ============ */
.mood-row{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px;}
.mood-chip{border:var(--bw) solid var(--outline);background:var(--card);border-radius:999px;padding:7px 15px;
  font-size:13.5px;color:var(--ink-2);cursor:pointer;font-weight:600;box-shadow:2px 2px 0 rgba(22,35,58,.14);transition:.12s;}
.mood-chip:hover{background:var(--sun-soft);}
.mood-chip:active{transform:translate(2px,2px);box-shadow:none;}
.mood-chip.active{background:var(--sun);color:var(--ink);font-weight:800;}
.note-field{margin-bottom:12px;}
.note-field label{display:block;font-size:13px;font-weight:700;color:var(--ink-2);margin-bottom:6px;}
.note-field textarea{min-height:70px;resize:vertical;line-height:1.6;}

/* ============ 我的 ============ */
.me-grid{display:grid;grid-template-columns:1fr;gap:14px;}
.info-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:11px 0;border-bottom:2px dashed var(--line-2);font-size:14px;}
.info-row:last-child{border-bottom:0;}
.info-row .lbl{color:var(--ink-3);font-size:13px;font-weight:600;}
.info-row .val{font-weight:700;word-break:break-all;text-align:right;}
.doc-list{margin:0;padding-left:19px;font-size:13.5px;color:var(--ink-2);line-height:1.9;}
.doc-list b{color:var(--ink);}

/* 教材标准清单 */
.book-list{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.book-row{display:flex;align-items:center;gap:8px;border:2px solid var(--line);border-radius:10px;padding:7px 10px;background:var(--paper);}
.book-row .swatch{width:9px;height:9px;border-radius:50%;flex:none;border:1.5px solid var(--outline);}
.book-row .bk-name{font-size:13.5px;font-weight:700;flex:1;min-width:0;}
.book-row .bk-tag{font-size:11.5px;color:var(--ink-3);font-weight:600;white-space:nowrap;}

/* ============ 弹窗 / 提示 ============ */
.modal-wrap{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:18px;}
.modal-backdrop{position:absolute;inset:0;background:rgba(22,35,58,.45);}
.modal{position:relative;width:100%;max-width:480px;max-height:86vh;overflow-y:auto;background:var(--card);
  border:3px solid var(--outline);border-radius:20px;padding:22px;box-shadow:var(--shadow-lg);animation:pop .18s ease-out;}
@keyframes pop{from{transform:translateY(10px) scale(.98);opacity:0;}}
.modal h3{font-size:17px;font-weight:900;margin-bottom:6px;}
.modal .modal-sub{font-size:13px;color:var(--ink-3);margin-bottom:16px;line-height:1.65;}
.modal-actions{display:flex;gap:9px;justify-content:flex-end;margin-top:18px;}
.modal-actions .btn-ghost,.modal-actions .btn-primary{width:auto;flex:none;padding:10px 20px;}
/* 导出筛选面板：按「天的状态」勾选要打印哪些天 */
.exp-st-list{display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 10px;}
.exp-st{display:inline-flex;align-items:center;gap:7px;padding:8px 13px;border:1px solid var(--line);
  border-radius:9px;background:#fff;font-size:13.5px;color:var(--ink-2);cursor:pointer;}
.exp-st.on{border-color:var(--brand);background:var(--brand-soft);color:var(--brand);font-weight:600;}
.exp-st-box{width:15px;height:15px;border:1.5px solid var(--line);border-radius:4px;background:#fff;flex:none;position:relative;}
.exp-st.on .exp-st-box{background:var(--brand);border-color:var(--brand);}
.exp-st.on .exp-st-box::after{content:'';position:absolute;left:4px;top:1px;width:4px;height:8px;
  border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg);}
.exp-st-dot{width:9px;height:9px;border-radius:50%;flex:none;}
.exp-st-acts{display:flex;align-items:center;gap:9px;margin-bottom:6px;}
.exp-st-acts .btn-ghost{width:auto;flex:none;padding:7px 14px;}
.exp-st-cnt{font-size:12.5px;color:var(--ink-3);}
/* 导出面板里的「预计打印」实时预估条 */
.exp-pv{margin:6px 0 10px;font-size:12.5px;line-height:1.8;color:var(--ink-2);
  background:var(--brand-soft);border:1px solid #d9e4f6;border-radius:9px;padding:8px 11px;}
.exp-pv b{color:var(--brand);}
/* 导出筛选面板：练习册筛选（按书名归组，点一本只看这一本） */
.exp-book-hd,.exp-st-hd{font-size:13px;font-weight:700;color:var(--ink-2);margin:14px 0 7px;}
.exp-book-list{display:flex;flex-wrap:wrap;gap:8px;}
.exp-book{display:inline-flex;flex-direction:column;align-items:flex-start;gap:2px;padding:8px 13px;
  border:1px solid var(--line);border-radius:9px;background:#fff;cursor:pointer;min-width:118px;}
.exp-book.on{border-color:var(--brand);background:var(--brand-soft);}
.exp-book-name{font-size:13px;font-weight:600;color:var(--ink-2);line-height:1.2;}
.exp-book.on .exp-book-name{color:var(--brand);}
.exp-book-cnt{font-size:11.5px;color:var(--ink-3);line-height:1.2;}
.exp-book.on .exp-book-cnt{color:var(--brand);}
.exp-book-empty{font-size:12.5px;color:var(--ink-3);padding:4px 2px;}

.exp-range-hd{font-size:13px;font-weight:700;color:var(--ink-2);margin:14px 0 7px;}
.exp-range-row{display:flex;flex-wrap:wrap;gap:14px;align-items:center;margin:0 0 4px;}
.exp-range-row label{font-size:13px;color:var(--ink-2);display:inline-flex;align-items:center;gap:6px;}
.exp-date{font-size:13px;padding:6px 8px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink);}

.field{margin-bottom:13px;}
.field label{display:block;font-size:13px;font-weight:700;color:var(--ink-2);margin-bottom:6px;}
.field-row{display:flex;gap:10px;}
.field-row .field{flex:1;}
.tpl-item{display:flex;gap:10px;align-items:flex-start;padding:9px 0;border-bottom:2px dashed var(--line-2);font-size:13.5px;}
.tpl-item:last-child{border-bottom:0;}
.tpl-item input[type=checkbox]{width:17px;height:17px;flex:none;margin-top:2px;accent-color:var(--brand);}
.tpl-item .t-main{flex:1;}
.tpl-item .t-sub{font-size:12px;color:var(--ink-3);margin-top:2px;}

.toast{position:fixed;left:50%;bottom:28px;transform:translate(-50%,16px);background:var(--ink);color:#fff;
  padding:11px 18px;border-radius:12px;font-size:13.5px;font-weight:600;opacity:0;pointer-events:none;transition:.24s;z-index:70;
  border:2.5px solid #fff;box-shadow:4px 4px 0 rgba(22,35,58,.4);
  max-width:calc(100vw - 32px);text-align:center;}
.toast.show{opacity:1;transform:translate(-50%,0);}
.toast.err{background:var(--danger);}
.toast.ok{background:var(--ok);}

/* ============ 响应式 ============ */
@media (min-width:768px){
  .view{padding:24px 26px 90px;}
  .two-col{grid-template-columns:1fr 1fr;}
  .overview{grid-template-columns:auto 1fr;}
  .me-grid{grid-template-columns:1fr 1fr;}
  .wide{grid-column:1 / -1;}
}
@media (max-width:860px){
  .app-shell{display:block;}
  .sidebar{
    position:fixed;left:0;right:0;bottom:0;top:auto;height:auto;width:auto;
    flex-direction:column;align-items:stretch;gap:0;
    padding:7px 8px calc(6px + env(safe-area-inset-bottom));
    border-right:0;border-top:3px solid var(--outline);z-index:40;
  }
  .side-logo{display:none;}
  .side-subj{order:-1;flex:none;display:block;border-top:0;border-bottom:2px dashed var(--line);padding:0 0 7px;margin-bottom:6px;}
  .side-subj-head{display:none;}
  .side-subj-list{flex-direction:row;overflow-x:auto;overflow-y:hidden;gap:6px;padding-bottom:2px;-webkit-overflow-scrolling:touch;}
  .subj-nav-btn{width:auto;flex:none;border:2px solid var(--outline);background:var(--card);border-radius:999px;
    padding:5px 12px;font-size:12.5px;box-shadow:2px 2px 0 rgba(22,35,58,.14);}
  .subj-nav-btn.active{background:linear-gradient(180deg,#f0ce4a,var(--sun));}
  .subj-nav-btn .sn-cnt{font-size:10.5px;}
  .side-nav{flex-direction:row;flex:none;gap:4px;}
  .tab{flex:1;flex-direction:column;padding:4px 2px;font-size:11px;border-radius:11px;}
  .tab .tab-ico{width:30px;height:30px;font-size:17px;}
  .tab.active{background:transparent;}
  .side-foot{display:none;}
  .who{display:none;}
  .view{padding:16px 14px 152px;}
  .topbar{padding:10px 12px;gap:8px;}
  .brand-text{min-width:0;overflow:hidden;}
  .brand-text p{display:none;}
  .brand-text h1{font-size:14.5px;overflow:hidden;text-overflow:ellipsis;}
  .sem-toggle{width:100%;justify-content:center;order:3;}
  .sem-btn{padding:5px 9px;font-size:12.5px;}
  .sem-sep{height:15px;}
  .streak-badge{font-size:12px;padding:5px 10px;}
}
@media (max-width:560px){
  .overview{grid-template-columns:1fr;justify-items:center;text-align:center;}
  .date-label{min-width:0;font-size:15px;}
  .datebar-right{margin-left:0;width:100%;}
  .datebar-right input[type=date].date-input{flex:1;}
  .task-body{gap:8px;}
  .min-input{width:56px;}
  .modal{padding:18px;}
  .heat-cell{width:13px;height:13px;}
  .heat-col .cells{grid-template-rows:repeat(7,13px);}
  .heat-labels{grid-template-rows:repeat(7,13px);padding-top:17px;}
  .heat-labels span{line-height:13px;}
  .heat-col .mlabel{height:13px;line-height:13px;}
  .greet-banner{padding:13px 15px;}
  .greet-banner b{font-size:15.5px;}
  .book-list{grid-template-columns:1fr;}
}
/* 极窄屏：应用名较长，缩小字号保证完整显示且不与连击徽章重叠 */
@media (max-width:380px){
  .brand-text h1{font-size:12px;letter-spacing:0;}
}
@media print{.topbar,.sidebar,.datebar,.add-row,.toast,.greet-banner{display:none !important;}}


@media (max-width:560px){
  .holiday-row{flex-wrap:wrap;}
  .holiday-row select{width:82px;}
  .holiday-row .h-title{flex:1 1 140px;}
  .holiday-row .h-min{width:64px !important;}
  .field-row{flex-direction:column;align-items:flex-start;}
  .field-row .date-input{flex:1;width:100% !important;}
  /* 窄屏：用时/附件换到第二行，别把作业标题挤没了 */
  .task-body{flex-wrap:wrap;}
  .task-body .task-title{flex:1 1 100%;order:-1;}
  .attach-box{order:5;margin-left:auto;}
}


/* ============ 任务完成「盖章」动效 ============ */
.stamp-fx{
  position:fixed;z-index:9000;pointer-events:none;
  transform:translate(-50%,-50%);width:0;height:0;
}
/* 印章本体：朱红圆章，环形描边内嵌一圈内圈，像真的印章 */
.stamp-ink{
  position:absolute;left:0;top:0;
  width:108px;height:108px;margin:-54px 0 0 -54px;border-radius:50%;
  display:grid;place-items:center;box-sizing:border-box;
  padding:16px;
  font-size:14.5px;font-weight:900;letter-spacing:.5px;line-height:1.25;text-align:center;
  color:#fff;background:var(--danger);
  border:3px solid #fff;
  box-shadow:0 6px 20px rgba(210,35,42,.45), inset 0 0 0 2px rgba(255,255,255,.9), inset 0 0 0 6px rgba(210,35,42,.95);
  font-family:inherit;
  opacity:0;
  animation:stampDrop .72s cubic-bezier(.18,1.5,.4,1) forwards;
}
@keyframes stampDrop{
  0%   {opacity:0;transform:scale(2.5) rotate(-24deg);}
  38%  {opacity:1;transform:scale(.82) rotate(-11deg);}   /* 落下压扁 */
  56%  {opacity:1;transform:scale(1.12) rotate(-9deg);}   /* 回弹 */
  74%  {opacity:1;transform:scale(.96) rotate(-10deg);}
  100% {opacity:0;transform:scale(1) rotate(-10deg);}     /* 淡出留痕 */
}
/* 中心扩散的光环 */
.stamp-ring{
  position:absolute;left:0;top:0;width:108px;height:108px;margin:-54px 0 0 -54px;
  border-radius:50%;border:3px solid var(--danger);opacity:0;
  animation:stampRing .88s ease-out forwards;
}
@keyframes stampRing{
  0%   {opacity:.7;transform:scale(.7);}
  100% {opacity:0;transform:scale(2.15);}
}
/* 星屑飞溅 */
.stamp-spark{
  position:absolute;left:0;top:0;width:7px;height:7px;margin:-3.5px 0 0 -3.5px;
  border-radius:50%;background:var(--danger);opacity:0;
  animation:stampSpark .62s ease-out forwards;
}
@keyframes stampSpark{
  0%   {opacity:1;transform:rotate(var(--ang)) translateX(6px) scale(1);}
  100% {opacity:0;transform:rotate(var(--ang)) translateX(var(--dist)) scale(.2);}
}
/* 整行轻微「压实」反馈 */
.task-item.stamped{animation:rowPress .42s ease-out;}
@keyframes rowPress{
  0%{transform:scale(1);}
  42%{transform:scale(.985);}
  100%{transform:scale(1);}
}
/* 尊重系统的「减少动态效果」：关掉动画，只留下最终状态 */
@media (prefers-reduced-motion: reduce){
  .stamp-fx{display:none !important;}
  .task-item.stamped{animation:none !important;}
}
html[data-noanim="1"] .stamp-fx{display:none !important;}

/* ============ 学情页（成绩趋势） ============ */
.kpi.warn b{color:var(--warn);}
.subj-chips{display:flex;gap:6px;flex-wrap:wrap;margin:2px 0 10px;}
.chip.sm{padding:4px 10px;font-size:12.5px;display:inline-flex;align-items:center;gap:5px;}
.chip.sm .swatch{width:8px;height:8px;border-radius:50%;display:inline-block;}
.trend-svg{width:100%;height:auto;display:block;}
.data-table td{vertical-align:middle;}
.data-table td:last-child{white-space:nowrap;}


@media (max-width:640px){
  .kn-name{width:42%;min-width:96px;}
  .notebook-bar{flex-wrap:wrap;}
  /* 成绩等数据表：窄屏不硬压单元格（日期/分数会被挤成竖条），
     给表格保底宽度，让容器横向滑动 */
  .table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}
  .table-scroll table.data-table{min-width:560px;}
  .note-search{width:100%;flex:1 1 100%;}
}

/* ============ 记住密码（登录页） ============ */
.remember-row{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600;
  color:var(--ink-2);cursor:pointer;user-select:none;}
.remember-row input{width:16px !important;height:16px;margin:0 !important;accent-color:var(--brand);flex:none;}

/* ============ 酷炫进度环（替代普通圆环） ============ */
.fancy-ring .fr-arc{
  filter:drop-shadow(0 0 6px rgba(47,111,208,.45));
  animation:ringDraw 1.1s cubic-bezier(.22,.9,.3,1) both;
}
.fancy-ring .fr-track{
  animation:ringSpin 16s linear infinite;transform-origin:50% 50%;transform-box:fill-box;
}
@keyframes ringDraw{from{stroke-dashoffset:var(--c);}to{stroke-dashoffset:var(--off);}}
@keyframes ringSpin{to{transform:rotate(360deg);}}
.ring-wrap .ring-txt{animation:ringTxtIn .7s ease-out both .2s;}
@keyframes ringTxtIn{from{opacity:0;transform:scale(.7);}to{opacity:1;transform:scale(1);}}
@media (prefers-reduced-motion: reduce){
  .fancy-ring .fr-arc,.fancy-ring .fr-track,.ring-wrap .ring-txt{animation:none !important;}
}

/* ============ 作业完成分析（近 7 天 + 超时未完成） ============ */
.ana-overdue-head{font-size:13.5px;font-weight:800;color:var(--danger);margin:6px 0 8px;}
.ana-list{display:flex;flex-direction:column;gap:7px;}
.ana-row{display:flex;align-items:center;gap:8px;background:var(--danger-soft);
  border:1.5px solid #ebaaa8;border-radius:10px;padding:7px 10px;cursor:pointer;transition:.13s;}
.ana-row:hover{background:#f7d6d4;}
.ana-date{font-size:11.5px;font-weight:800;color:#8f1a20;flex:none;background:#fff;
  border-radius:6px;padding:1px 7px;font-variant-numeric:tabular-nums;}
.ana-row .swatch{width:9px;height:9px;border-radius:50%;flex:none;border:1.5px solid var(--outline);}
.ana-subj{font-size:12.5px;font-weight:800;flex:none;}
.ana-title{font-size:13px;color:var(--ink-2);min-width:0;word-break:break-word;}
.ana-clear{font-size:13.5px;font-weight:700;color:var(--green);background:var(--green-soft);
  border-radius:10px;padding:10px 12px;}

/* ============ 提前学未完成提醒 ============ */
.adv-pending-panel .ana-row.todo{background:var(--sun-soft);border-color:#e8c64a;}
.adv-pending-panel .ana-row.todo:hover{background:#f7e6ac;}
.ana-row.todo .ana-date{color:#7a5a00;background:#fffbe9;}
.ana-today-head{font-size:13.5px;font-weight:800;color:#a06800;margin:12px 0 8px;}
.ana-more{font-size:12px;color:var(--ink-3);margin-top:7px;}
.ava-cat{margin-left:auto;font-size:11px;font-weight:700;color:var(--ink-3);background:#fff;
  border:1px solid var(--line);border-radius:6px;padding:1px 6px;flex:none;}

/* ============ 必背页 ============ */
.bb-panel{padding:14px 16px 16px;}
.bb-subj-head{display:flex;align-items:center;gap:8px;margin-bottom:12px;font-size:15px;font-weight:800;}
.bb-subj-head .swatch{width:10px;height:10px;border-radius:50%;flex:none;border:1.5px solid var(--outline);}
.bb-sec{border:2px solid var(--line);border-radius:12px;margin-bottom:10px;overflow:hidden;background:var(--card);}
.bb-sec>summary{cursor:pointer;font-weight:800;font-size:13.5px;padding:9px 12px;
  background:var(--paper);list-style:none;transition:.13s;}
.bb-sec>summary::-webkit-details-marker{display:none;}
.bb-sec>summary::before{content:'▸ ';color:var(--ink-3);}
.bb-sec[open]>summary::before{content:'▾ ';}
.bb-sec>summary:hover{background:var(--sun-soft);}
.bb-sec[open]>summary{border-bottom:2px dashed var(--line);}
.bb-item{padding:10px 12px;background:var(--card);border-bottom:1.5px dashed var(--line-2);}
.bb-item:last-child{border-bottom:0;}
.bb-item-title{font-size:13.5px;font-weight:800;color:var(--brand-2);margin-bottom:4px;}
.bb-item-body{font-size:13px;line-height:1.9;color:var(--ink-2);}

.wd-chips{display:flex;gap:6px;flex-wrap:wrap;}
.wd-chip{min-width:46px;padding:8px 4px;border:var(--bw) solid var(--line);background:var(--card);
  border-radius:9px;font-family:inherit;font-size:13px;font-weight:700;color:var(--ink-2);cursor:pointer;transition:.14s;}
.wd-chip:hover{border-color:var(--brand);color:var(--brand);}
.wd-chip.active{background:var(--brand);color:#fff;border-color:var(--outline);box-shadow:2px 2px 0 rgba(22,35,58,.24);}
.wd-chip.we.active{background:var(--coral);}
.btn-export{border-color:var(--brand);color:var(--brand);background:var(--brand-soft);}
.btn-export:hover{background:var(--brand);color:#fff;}
.cal-acts{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
.cal-wk{display:inline-flex;align-items:center;gap:6px;}
.cal-wk-lbl{font-size:12px;color:var(--ink-soft);margin-right:2px;}

/* ---------- 第 17 轮：AI 改排期 ---------- */
.field-hint{display:block;font-size:11.5px;color:var(--ink-3);line-height:1.6;margin-top:5px;}

/* ---------- 第 17 轮：提前学日程的期间选择 ---------- */
.adv-scope{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 4px 12px;}
.adv-scope .scope-txt{font-size:12px;color:var(--ink-3);font-weight:700;}
.adv-scope .scope-range{display:inline-flex;align-items:center;gap:6px;}
.adv-scope .tilde{font-size:12px;color:var(--ink-3);}
.adv-scope .date-input{padding:5px 8px;font-size:12.5px;}

/* ---------- 第 17 轮：练习册汇总栏 ---------- */
.wb-books{margin-bottom:4px;}
.wb-book{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  background:var(--paper);border:1.5px dashed var(--line);border-radius:10px;
  padding:9px 11px;margin-bottom:8px;font-size:13px;}
.wb-book.on{background:var(--brand-soft);border-style:solid;border-color:var(--brand);}
.wb-book-pick{display:flex;align-items:center;gap:8px;cursor:pointer;flex:1;min-width:170px;}
.wb-book-pick input{width:17px;height:17px;accent-color:var(--brand);cursor:pointer;flex:none;}
.wb-book-name{font-weight:800;color:var(--brand-2);word-break:break-word;line-height:1.5;}
.wb-book-meta{font-size:11.5px;color:var(--ink-3);flex:none;}
.wb-book-prog{display:flex;align-items:center;gap:7px;flex:none;}
.wb-book-prog .wb-bar{display:inline-block;width:78px;height:8px;background:var(--line);
  border-radius:5px;overflow:hidden;border:1px solid var(--outline);}
.wb-book-prog .wb-bar b{display:block;height:100%;background:var(--green);}
.wb-book-prog em{font-style:normal;font-size:11.5px;font-weight:800;color:var(--ink-2);}
.wb-book-acts{display:flex;gap:6px;flex:none;}
.btn-mini.danger{border-color:var(--coral);color:var(--coral);}
.btn-mini.danger:hover{background:var(--coral);color:#fff;}
.btn-primary.danger{background:var(--coral);border-color:var(--outline);color:#fff;}
.wb-preview{margin-top:10px;font-size:12.5px;color:var(--ink-2);background:var(--paper);
  border-radius:9px;padding:8px 11px;}
.wb-preview b{color:var(--brand-2);font-size:14px;}
/* ---------- 第 17 轮补：提前学日程批量整理 ---------- */
.btn-mini.active{background:var(--brand);color:#fff;border-color:var(--outline);}
.bulk-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;background:var(--brand-soft);
  border:1.5px solid var(--brand);border-radius:10px;padding:9px 11px;margin-bottom:10px;}
.bulk-bar.has{background:var(--sun-soft);border-color:var(--sun);}
.bulk-n{font-size:12.5px;color:var(--ink-2);font-weight:700;}
.bulk-n b{color:var(--brand-2);font-size:15px;}
.bulk-sp{flex:1;}
.bulk-bar .btn-mini[disabled]{opacity:.42;cursor:not-allowed;}
.bulk-pick{display:inline-flex;align-items:center;gap:6px;cursor:pointer;flex:none;}
.bulk-pick input{width:17px;height:17px;accent-color:var(--brand);cursor:pointer;}
.bulk-day{font-size:11.5px;font-weight:700;color:var(--brand-2);}
.task-item.bulk-on{background:var(--sun-soft);}
.task-item.bulk-on .task-body{border-color:var(--sun);}
.task-date-head .bulk-pick{margin-right:4px;}
.move-row{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:6px;}

@media(max-width:640px){
  .wb-book-meta{width:100%;flex:none;}
  .wb-book-acts{width:100%;justify-content:flex-end;}
  .bulk-bar{gap:6px;}
  .bulk-sp{display:none;}
}
.pdf-links{display:flex;gap:10px;flex-wrap:wrap;margin-top:6px;}
.pdf-links .btn-primary,.pdf-links .btn-ghost{display:inline-flex;align-items:center;justify-content:center;
  text-decoration:none;padding:11px 20px;border-radius:11px;font-weight:800;font-size:14px;}

/* ============ 提前学 · 整月日历（第 13/15 轮）============ */
.adv-cal-panel{padding-bottom:12px;}
.cal-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:11px;}
.cal-nav{display:flex;align-items:center;gap:8px;}
.cal-nav-btn{width:32px;height:32px;border:var(--bw) solid var(--outline);border-radius:9px;
  background:var(--card);font-size:17px;line-height:1;cursor:pointer;color:var(--ink);
  display:flex;align-items:center;justify-content:center;padding:0;}
.cal-nav-btn:disabled{opacity:.3;cursor:not-allowed;}
.cal-title{font-size:15px;font-weight:800;min-width:96px;text-align:center;}
.cal-legend{display:flex;gap:12px;flex-wrap:wrap;}
.cal-legend span{display:flex;align-items:center;gap:5px;font-size:11.5px;color:var(--ink-2);font-weight:600;}
.cal-legend i{width:12px;height:12px;border-radius:3px;border:1.5px solid;flex:none;}

.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:5px;}
.cal-head{margin-bottom:5px;}
.cal-head>div{text-align:center;font-size:12px;font-weight:700;color:var(--ink-2);}
.cal-head>div.we{color:var(--coral);}

.cal-cell{min-height:80px;border:1.5px solid var(--line-2);background:#fff;border-radius:9px;
  padding:4px 5px;display:flex;flex-direction:column;gap:2px;overflow:hidden;}
.cal-cell.cal-blank{border:none;background:transparent;box-shadow:none;}
.cal-cell.st-none{background:#fff;border-color:var(--line-2);}
.cal-cell.st-done{background:var(--green-soft);border-color:#9fd8b4;}
.cal-cell.st-partial{background:var(--warn-soft);border-color:#e0be5a;}
.cal-cell.st-miss{background:var(--danger-soft);border-color:#f0a9a7;}
.cal-cell.st-todo{background:#e6f1fb;border-color:#a8cef2;}
.cal-cell.is-today{outline:2px solid var(--brand);outline-offset:-2px;}

.cal-dnum{display:flex;align-items:center;justify-content:space-between;gap:3px;line-height:1.2;}
.cal-dnum>span{font-size:12.5px;font-weight:800;color:var(--ink-2);}
.cal-cell.is-today .cal-dnum>span{color:var(--brand);}
.cal-today-tag{font-style:normal;font-size:11px;font-weight:800;background:var(--brand-soft);
  color:var(--brand);border-radius:999px;padding:0 6px;}
.cal-cnt{font-style:normal;font-size:11px;font-weight:700;color:var(--ink-3);}

.cal-task{display:flex;align-items:flex-start;gap:4px;text-align:left;border:none;background:transparent;
  padding:1px 0;font-family:inherit;cursor:pointer;width:100%;}
.cal-box{width:12px;height:12px;flex:none;border:1.5px solid var(--outline);border-radius:3px;
  background:#fff;margin-top:2px;}
.cal-task.done .cal-box{background:var(--green);border-color:var(--green);}
.cal-t{font-size:11.5px;line-height:1.3;color:var(--ink);overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;}
.cal-task.done .cal-t{color:var(--ink-3);text-decoration:line-through;}
.cal-more{font-size:11px;color:var(--ink-3);font-weight:700;text-align:left;border:none;
  background:transparent;padding:0;cursor:pointer;font-family:inherit;}
.cal-foot{margin-top:10px;font-size:12.5px;color:var(--ink-2);font-weight:600;}

.cal-detail-list{display:flex;flex-direction:column;gap:6px;margin:10px 0;}
.cal-detail-row{display:flex;align-items:center;gap:9px;text-align:left;font-family:inherit;
  border:1.5px solid var(--line);background:#fff;border-radius:10px;padding:9px 11px;cursor:pointer;width:100%;}
.cal-detail-row.done{background:var(--green-soft);border-color:#9fd8b4;}
.cdr-t{flex:1;font-size:13px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cal-detail-row.done .cdr-t{color:var(--ink-3);text-decoration:line-through;}
.cdr-s{font-size:11.5px;color:var(--ink-3);flex:none;}
.cdr-m{font-size:11.5px;color:var(--ink-3);flex:none;min-width:46px;text-align:right;}

@media (max-width:820px){
  .cal-cell{min-height:64px;padding:3px 4px;}
  .cal-t{font-size:11px;}
  .cal-legend{gap:9px;}
}

/* ============ 日历下方 · 本周计划（周一~周日）第 16 轮 ============ */
.adv-week-panel{margin-top:14px;}
.week-cards{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;margin-top:4px;}
.week-card{border:1.5px solid var(--line);border-radius:11px;background:#fff;overflow:hidden;
  display:flex;flex-direction:column;min-height:110px;}
.week-card.st-done{background:var(--green-soft);border-color:#9fd8b4;}
.week-card.st-partial{background:var(--warn-soft);border-color:#e0be5a;}
.week-card.st-miss{background:var(--danger-soft);border-color:#f0a9a7;}
.week-card.st-todo{background:#e6f1fb;border-color:#a8cef2;}
.week-card.is-today{outline:2.5px solid var(--brand);outline-offset:-2px;}
.wc-head{display:flex;flex-direction:column;gap:1px;align-items:flex-start;width:100%;border:none;
  background:rgba(255,255,255,.55);cursor:pointer;font-family:inherit;padding:7px 9px;
  border-bottom:1.5px dashed var(--line);text-align:left;}
.wc-head:hover{background:#fff;}
.wc-wd{font-size:12.5px;font-weight:900;color:var(--ink);display:flex;align-items:center;gap:5px;}
.wc-tag{font-style:normal;font-size:10px;font-weight:800;background:var(--brand);color:#fff;
  border-radius:999px;padding:1px 6px;}
.wc-date{font-size:11px;color:var(--ink-3);font-weight:700;}
.wc-prog{font-size:11px;font-weight:800;color:var(--ink-2);}
.wc-prog.full{color:#1c6b3a;}
.wc-empty{font-size:11.5px;color:var(--ink-3);padding:10px 9px;font-weight:600;}
.wc-list{list-style:none;margin:0;padding:5px 7px;display:flex;flex-direction:column;gap:4px;}
.wc-item{display:flex;align-items:flex-start;gap:5px;}
.wc-item .check-sm{width:16px;height:16px;min-width:16px;border-radius:4px;border-width:1.5px;margin-top:1px;}
.wc-item .check-sm svg{width:10px;height:10px;}
.wc-item.done .check-sm{background:var(--green);}
.wc-item.done .check-sm svg{opacity:1;}
.wc-item.done .wc-t{color:var(--ink-3);text-decoration:line-through;}
.wc-t{flex:1;min-width:0;font-size:11.5px;line-height:1.35;color:var(--ink);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word;}
.wc-s{font-size:10px;font-weight:800;flex:none;white-space:nowrap;}

@media (max-width:820px){
  .week-cards{grid-template-columns:repeat(2,minmax(0,1fr));}
  .week-card{min-height:0;}
}

/* ============ 今日打卡 · 提前学当日进度（独立，不共用作业圆环）============ */
.adv-prog{display:flex;align-items:center;gap:10px;margin-bottom:12px;}
.adv-prog-track{flex:1;height:16px;background:var(--line-2);border:1.5px solid var(--outline);
  border-radius:999px;overflow:hidden;}
.adv-prog-fill{height:100%;background:var(--blue);border-right:1.5px solid var(--outline);transition:width .3s;}
.adv-prog-fill.full{background:var(--green);}
.adv-prog-num{font-size:13px;font-weight:800;min-width:78px;text-align:right;}
.ana-src{font-size:11px;font-weight:700;color:var(--ink-3);border:1.5px solid var(--line);
  border-radius:999px;padding:0 7px;flex:none;}

/* ============ 第 19 轮：练习册独立页 + 目录多图 + 单词页 ============ */
.wb-page-head .hint{font-size:12.5px;color:var(--ink-3);line-height:1.75}
.btn-mini.wb-new{border-color:var(--outline);background:linear-gradient(180deg,#f0ce4a,var(--sun));font-weight:800;padding:5px 11px}
.wb-rule{background:var(--brand-soft);border:1.5px dashed var(--brand);border-radius:10px;
  padding:7px 12px;font-size:12.5px;color:var(--brand-2);font-weight:700;margin-bottom:10px}
/* 第 20 轮：练习册卡片头部可折叠（点书名展开/收起）+ 书名旁进度条 */
.wb-book-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;cursor:pointer;
  padding:11px 13px;background:var(--paper);border-bottom:1px solid var(--line)}
.wb-book-head:hover{background:var(--brand-soft)}
.wb-caret{flex:none;width:18px;text-align:center;color:var(--brand-2);font-size:14px;line-height:1}
.wb-name{margin:0;font-size:15.5px;font-weight:800;color:var(--brand-2);
  max-width:40vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wb-head-bar{display:flex;align-items:center;gap:7px;flex:none}
.wb-head-bar .wb-bar{display:inline-block;width:96px;height:9px;background:var(--line);
  border-radius:6px;overflow:hidden;vertical-align:middle}
.wb-head-bar .wb-bar b{display:block;height:100%;background:var(--green);border-radius:6px}
.wb-head-bar em{font-style:normal;font-size:11.5px;font-weight:800;color:var(--ink-2)}
.wb-head-meta{font-size:11.5px;color:var(--ink-3);flex:none}
.wb-detail .right{margin-left:auto}
/* 目录明细表：不要斑马纹；写完的一整行淡绿底，和「必背」打钩一个样子 */
table.data.wb-toc tr td{background:#fff}
table.data.wb-toc tr.wb-row-done td{background:var(--green-soft)}
table.data.wb-toc tr.wb-row-done .wb-title-cell{color:var(--ink-2)}
table.data.wb-toc tr.wb-row-done .wb-done-txt{color:#1c7a3e}
.wb-toc .wb-no{color:var(--ink-3);font-size:12px}
.wb-toc .wb-title-cell{font-size:13px;line-height:1.5}
.wb-done-txt{font-weight:800}
.wb-todo-txt{color:var(--ink-3)}
/* 第 21 轮：练习册明细按「主题」分组，每块可点标题收起／展开 */
.wb-rule-tip{margin-left:8px;font-weight:700;color:var(--ink-3);font-size:11.5px}
.wb-theme{border:1.5px solid var(--line);border-radius:10px;overflow:hidden;
  margin-bottom:9px;background:var(--card)}
.wb-theme.all-done{border-color:#bfe6c9}
.wb-theme-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  padding:8px 11px;background:var(--paper-2);cursor:pointer;border-bottom:1.5px solid var(--line)}
.wb-theme.all-done .wb-theme-head{background:var(--green-soft);border-bottom-color:#bfe6c9}
.wb-theme-head:hover{background:var(--brand-soft)}
.wb-theme-caret{flex:none;width:14px;text-align:center;color:var(--brand-2);font-size:12px;line-height:1}
.wb-theme-name{font-size:13.5px;font-weight:800;color:var(--brand-2)}
.wb-theme-full{font-size:11px;font-weight:800;color:#1c7a3e;background:#fff;
  border:1.5px solid #bfe6c9;border-radius:999px;padding:0 7px}
.wb-theme-bar{margin-left:auto;display:flex;align-items:center;gap:7px;flex:none}
.wb-theme-bar .wb-bar{display:inline-block;width:88px;height:9px;background:var(--line);
  border-radius:6px;overflow:hidden;vertical-align:middle}
.wb-theme-bar .wb-bar b{display:block;height:100%;background:var(--green);border-radius:6px}
.wb-theme-bar em{font-style:normal;font-size:11.5px;font-weight:800;color:var(--ink-2)}
.wb-theme .wb-toc th{border-top:0}
/* 第 22 轮：练习册必须按顺序完成——排在后面还没轮到的，勾选框先锁住 */
.wb-toc .check.locked{opacity:.3;cursor:not-allowed;border-color:var(--ink-3)}
.wb-toc .check.locked:hover{background:#fff}
.wb-lock-txt{color:var(--ink-3)}
.wb-toc tr.wb-row-locked .wb-title-cell{color:var(--ink-3)}

/* ===== 练习册章节/Test 嵌套层级 ===== */
.wb-chapter{margin-bottom:12px;border:1.5px solid var(--line);border-radius:10px;overflow:hidden}
.wb-chapter.all-done{border-color:#bfe6c9}
.wb-subtheme{margin:6px 12px 6px 28px;border-left:2px solid var(--line)}
.wb-subtheme-head{display:flex;align-items:center;gap:6px;padding:8px 10px;border-radius:8px;background:#f7f7f7;cursor:pointer;transition:background .15s}
.wb-subtheme-head:hover{background:var(--brand-soft)}
.wb-subtheme-name{font-size:13px;font-weight:700;color:var(--ink-1)}
.wb-subtheme.open>.wb-subtheme-head{background:var(--brand-soft)}
.wb-subtheme.all-done .wb-subtheme-head{background:#e8f5e9}
.wb-subtheme .wb-toc{margin:6px 0 6px 24px}
@media (max-width:860px){
  .wb-theme-name{max-width:54vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .wb-theme-bar .wb-bar{width:64px}
}


/* ---------- 单词页 ---------- */
.wd-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:16px}
.wd-kpi{background:var(--card);border:var(--bw) solid var(--outline);border-radius:14px;box-shadow:var(--shadow-sm);
  padding:12px 14px;text-align:center}
.wd-kpi b{display:block;font-size:23px;font-weight:900;line-height:1.2}
.wd-kpi span{font-size:12px;color:var(--ink-3);font-weight:700}
.wd-kpi.t1 b{color:var(--brand)}.wd-kpi.t2 b{color:var(--ink-2)}
.wd-kpi.t3 b{color:var(--coral)}.wd-kpi.t4 b{color:#1c7a3e}.wd-kpi.t5 b{color:#a35b00}

/* 单词保存状态条 + 今日进度：记录即时保存到云端，实时同步已取消（2026-10-19） */
.wd-syncbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:-4px 0 14px}
.wd-sync{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:800;
  padding:6px 12px;border-radius:999px;border:1.5px solid var(--line);background:var(--paper-2);color:var(--ink-3)}
.wd-sync.ok{color:#1c7a3e;background:#e8f7ee;border-color:#b9e3c8}
.wd-sync.ing{color:var(--brand);background:var(--brand-soft);border-color:var(--brand)}
.wd-sync.off{color:#a8451b;background:#fdeee6;border-color:#f3c9b4}
.wd-today{font-size:13px;color:var(--ink-2);font-weight:700}
.wd-today b{color:var(--brand);font-weight:900}
.wd-bar{height:13px;border:1.5px solid var(--outline);border-radius:8px;background:#e9edf4;overflow:hidden;display:flex}
.wd-bar i{display:block;height:100%}
.wd-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--ink-2);margin-top:8px}
.wd-legend s{display:inline-block;width:11px;height:11px;border:1px solid var(--ink);margin-right:5px;vertical-align:-1px}
.wd-rule{background:var(--warn-soft);border:1.5px solid var(--warn);border-radius:11px;padding:10px 13px;
  font-size:12.5px;line-height:1.85;color:#6b5300}
.wd-rule b{color:#3a2f00}
.wd-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px}
.wd-q{border:2px solid var(--line);border-radius:12px;padding:11px 13px;background:#fff;position:relative}
.wd-q.right{border-color:var(--green);background:var(--green-soft)}
.wd-q.wrong{border-color:var(--coral);background:var(--danger-soft)}
.wd-q .qno{font-size:11.5px;font-weight:900;color:var(--ink-3)}
.wd-dir{display:inline-block;font-size:11px;font-weight:800;border-radius:6px;padding:1px 6px;margin-left:6px;border:1.5px solid}
.wd-dir.cn2en{background:var(--brand-soft);color:var(--brand-2);border-color:var(--brand)}
.wd-dir.en2cn{background:var(--warn-soft);color:#7a5f00;border-color:var(--warn)}
.wd-q .qprompt{font-size:17px;font-weight:900;margin:6px 0 8px;line-height:1.35}
.wd-q .qprompt small{display:block;font-size:11.5px;font-weight:700;color:var(--ink-3);margin-top:2px}
.wd-q input[type=text]{width:100%;border:1.5px solid var(--line);border-radius:9px;padding:7px 10px;font-size:14px;outline:none}
.wd-q input[type=text]:focus{border-color:var(--brand)}
.wd-res{font-size:12.5px;font-weight:800;margin-top:6px;min-height:18px;line-height:1.5}
/* 朗读小喇叭：任何出现单词的地方都能点一下听读音 */
.wd-say{border:1.5px solid var(--line);background:#fff;border-radius:8px;width:26px;height:26px;
  font-size:13px;line-height:1;cursor:pointer;padding:0;margin-left:6px;vertical-align:middle;flex:none}
.wd-say:hover{border-color:var(--brand);background:var(--brand-soft)}
.wd-say:active{transform:scale(.92)}
.wd-say.big{width:32px;height:32px;font-size:16px;border-radius:10px}
/* 今日任务三段的小标题 */
.wd-sub{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:18px 0 2px;
  border-left:4px solid var(--brand);padding-left:9px}
.wd-sub b{font-size:14.5px;font-weight:900;color:var(--ink)}
.wd-sub span{font-size:11.5px;font-weight:700;color:var(--ink-3)}
/* 新词卡片（先看会再默写） */
.wd-newcard{border:2px solid var(--line);border-radius:12px;padding:11px 13px;background:#fff}
.wd-newcard .wd-nw{display:flex;align-items:center;gap:2px;font-size:19px;font-weight:900;letter-spacing:.2px}
.wd-newcard .wd-nph{font-size:12px;color:var(--ink-3);font-weight:700;margin-top:2px}
.wd-newcard .wd-ncn{font-size:14px;font-weight:800;color:var(--ink-2);margin-top:5px;line-height:1.45}
.wd-newcard .wd-nsrc{font-size:11px;color:var(--ink-3);margin-top:5px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.wd-newcard .wd-nsrc .wd-src{font-size:10.5px;font-weight:700}
/* 全册出处渲染：册次彩色小标签 + 单元号 */
.wd-src{display:inline-flex;flex-wrap:wrap;gap:4px;align-items:center}
.wd-u{display:inline-flex;align-items:center;gap:3px;font-size:10.5px;font-weight:700;color:var(--ink-3)}
.wd-u.muted{color:var(--ink-3);font-weight:700}
.wd-book{display:inline-block;font-size:9.5px;font-weight:900;line-height:1.5;border-radius:5px;
  padding:0 5px;white-space:nowrap;border:1px solid transparent}
.wd-book.b7a{color:#1f5fa8;background:#e4efff;border-color:#a9c9f2}
.wd-book.b7b{color:#1a7a72;background:#dff5f2;border-color:#96ddd5}
.wd-book.b8a{color:#8a5a00;background:#fff2d1;border-color:#ffd97e}
.wd-book.b8b{color:#8a3d6a;background:#fdeaf5;border-color:#f2b6d9}
.wd-book.b9{color:#a1322a;background:#ffe8e4;border-color:#f7b3aa}
.wd-src-cell{font-size:10.5px;line-height:1.7}
.wd-src-cell .wd-u{font-size:10.5px}
/* 频率徽标：f1 高频 / f2 中频 / f3 低频（柯林斯星级口径） */
.wd-freq{display:inline-block;font-size:10px;font-weight:900;line-height:1.6;border-radius:999px;
  padding:0 7px;white-space:nowrap;letter-spacing:.2px;border:1px solid transparent}
.wd-freq.f1{color:#a12b1e;background:#ffe6e0;border-color:#ffb9ab}
.wd-freq.f2{color:#8a5a00;background:#fff2d1;border-color:#ffd97e}
.wd-freq.f3{color:#3f5568;background:#eaeef4;border-color:#cfd8e3}
.wd-freq.f4{color:#1c5a3e;background:#e3f5ea;border-color:#a9dcbf}
/* 题目里的出处小字 */
.wd-q .qprompt .wd-qsrc{display:block;margin-top:4px;font-size:10.5px;font-weight:700;color:var(--ink-3);letter-spacing:.1px}
/* 词库总览的排序工具条 */
.wd-sortbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:-4px 0 12px;
  padding:10px 12px;background:var(--brand-soft);border:1.5px dashed var(--brand);border-radius:11px}
.wd-sortbar .lbl{font-size:12px;font-weight:900;color:var(--ink-2)}
.wd-sortbar select{border:1.5px solid var(--line);border-radius:9px;padding:6px 10px;font-size:12.5px;
  font-weight:800;background:#fff;outline:none;font-family:inherit;color:var(--ink);cursor:pointer}
.wd-sortbar select:focus{border-color:var(--brand)}
.wd-sortbar .note{font-size:11px;font-weight:700;color:var(--ink-3)}
/* 自定义背诵顺序提示条 */
.wd-custombar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:8px 0 2px;
  padding:9px 12px;background:#eef7f0;border:1.5px solid #b7dfc2;border-radius:11px}
.wd-custombar .tag{font-size:12px;font-weight:900;color:#1f6b3a}
.wd-custombar .note{font-size:11px;font-weight:700;color:var(--ink-3)}
.wd-custombar .note b{color:#1f6b3a}
/* 睡前速过：盖住中文，点开看答案 */
.wd-night{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
.wd-ni{border:1.5px solid var(--line);border-radius:10px;background:#fff;padding:7px 11px}
.wd-ni>summary{cursor:pointer;font-size:15px;font-weight:900;display:flex;align-items:center;list-style:none}
.wd-ni>summary::-webkit-details-marker{display:none}
.wd-ni>summary::before{content:'▸';color:var(--ink-3);margin-right:6px;font-size:12px}
.wd-ni[open]>summary::before{content:'▾'}
.wd-ni-cn{font-size:13px;font-weight:800;color:var(--ink-2);margin-top:5px;line-height:1.5}
.wd-ni-cn span{font-weight:700;color:var(--ink-3);font-size:11.5px}
.wd-lv{display:inline-block;font-size:10.5px;font-weight:800;color:var(--ink-3);margin-left:6px}
.wd-filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:12px}
.wd-filters select,.wd-filters input[type=text]{border:1.5px solid var(--line);border-radius:9px;
  padding:7px 10px;font-size:13px;font-weight:700;background:#fff;outline:none;font-family:inherit;color:var(--ink)}
.wd-filters input[type=text]{flex:1;min-width:180px}
.wd-filters select:focus,.wd-filters input[type=text]:focus{border-color:var(--brand)}
.wd-pager{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:12px;
  font-size:12.5px;font-weight:800;color:var(--ink-2)}
.wd-tag{display:inline-block;font-size:10px;font-weight:900;border-radius:5px;padding:0 5px;border:1.5px solid}
.wd-tag.ok{background:var(--green-soft);color:#1c7a3e;border-color:var(--green)}
.wd-tag.bad{background:var(--danger-soft);color:var(--coral);border-color:var(--coral)}
.wd-ph{font-family:"Segoe UI",Arial,sans-serif;font-size:11.5px;color:var(--ink-3)}
.wd-planbar{display:flex;gap:9px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
.wd-planbar b{font-size:16px;font-weight:900;color:var(--brand)}
.wd-twrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.wd-twrap table.data{min-width:560px}
.wd-files{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px}
.wd-file{display:block;border:var(--bw) solid var(--outline);border-radius:12px;background:var(--card);
  box-shadow:var(--shadow-sm);padding:11px 13px;text-decoration:none;color:inherit}
.wd-file:hover{border-color:var(--brand);background:var(--brand-soft)}
.wd-file b{display:block;font-size:13.5px;font-weight:900;color:var(--brand-2)}
.wd-file span{display:block;font-size:11.5px;color:var(--ink-3);margin-top:3px;line-height:1.5}
@media(max-width:640px){
  .wd-files{grid-template-columns:1fr}
  .wd-planbar .right{width:100%;display:flex;gap:8px;flex-wrap:wrap}
}
.wd-res.ok{color:#1c7a3e}
.wd-res.bad{color:var(--coral)}
.wd-hist{font-size:11.5px;color:var(--ink-3);margin-top:3px}
.wd-flag{position:absolute;right:10px;top:9px;font-size:11px;font-weight:900;color:var(--coral)}
.wd-acts{display:flex;gap:10px;align-items:center;margin-top:14px;flex-wrap:wrap}
/* 2026-10-28 单词：按「当天答对个数」推进后的补词标记 / 轮次分隔 */
.wd-sup{display:inline-block;font-size:10.5px;font-weight:900;color:#b4560f;background:#fff7ef;
  border:1.5px solid #f0c9a8;border-radius:999px;padding:1px 7px;margin-left:6px;vertical-align:middle}
.wd-round{grid-column:1/-1;display:flex;align-items:center;gap:8px;margin:8px 0 0;
  font-size:12px;font-weight:900;color:#b4560f}
.wd-round::after{content:'';flex:1;height:1.5px;background:#f0c9a8;border-radius:2px}
.wd-supbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:10px 0 2px;
  padding:10px 12px;background:#fff7ef;border:1.5px solid #f0c9a8;border-radius:11px}
.wd-supbar .tag{font-size:12px;font-weight:900;color:#b4560f}
.wd-supbar .note{font-size:11px;font-weight:700;color:var(--ink-3)}
.wd-supbar .note b{color:#b4560f}
.wd-goal{font-size:11.5px;font-weight:800;color:var(--ink-2)}
.wd-goal.done{color:#1c7a3e}
.wd-goal b{font-weight:900}
/* 词库自检条：有词库外的词时提示，一键清理 */
.wd-clean{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:12px;padding:10px 12px;
  border:1px solid #f0c9a8;border-radius:10px;background:#fff7ef;font-size:12.5px;line-height:1.6}
.wd-clean b{font-weight:800;color:#b4560f}
.wd-clean span{color:#6b7280;flex:1 1 240px}
.wd-clean.ok{border-color:#bfe3cb;background:#f2fbf5}
.wd-clean.ok b{color:#1c7a3e}
.wd-clean-list{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;max-height:150px;overflow:auto}
.wd-clean-item{font-size:12px;padding:3px 8px;border-radius:999px;background:#f1f4f9;
  border:1px solid #d6deea;font-family:"Segoe UI",Arial}
@media (max-width:520px){.wd-clean{align-items:flex-start}.wd-clean span{flex:1 1 100%}}
.wd-score{font-size:13.5px;font-weight:900}
.wd-chart{display:flex;align-items:flex-end;gap:8px;height:110px;padding:6px 4px;border-bottom:2px solid var(--line)}
.wd-chart .col{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:4px}
.wd-chart .col i{display:block;width:60%;background:var(--brand);border:1.5px solid var(--outline);border-radius:4px 4px 0 0;min-height:2px}
.wd-chart .col i.warn{background:var(--warn)}
.wd-chart .col span{font-size:10.5px;color:var(--ink-3)}
.wd-empty{text-align:center;color:var(--ink-3);font-size:13px;padding:22px 10px;line-height:1.9}
.wd-bank-note{font-size:12.5px;color:var(--ink-3);margin-top:8px;line-height:1.75}
@media(max-width:820px){
  .wd-grid{grid-template-columns:1fr}
  .wd-night{grid-template-columns:1fr}
  .wd-kpis{grid-template-columns:repeat(2,1fr)}
  .wb-detail .panel-head h3{max-width:52vw}
}

/* ============ 必背（七上 / 七下：打钩 + 排计划 + 今日打卡独立卡） ============ */
.panel-head .right{margin-left:auto;display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.seg{display:inline-flex;gap:3px;background:var(--paper-2);border:1.5px solid var(--line);border-radius:10px;padding:3px;}
.seg button{border:none;background:transparent;padding:4px 12px;border-radius:7px;font-size:12.5px;font-weight:800;
  color:var(--ink-2);cursor:pointer;font-family:inherit;}
.seg button.on{background:var(--brand);color:#fff;}
.bb-bar{height:14px;border:1.5px solid var(--outline);border-radius:999px;background:var(--line-2);overflow:hidden;}
.bb-bar i{display:block;height:100%;background:var(--green);transition:width .3s;}
.bb-subj-head .bb-cnt{margin-left:auto;font-size:12.5px;font-weight:800;color:var(--ink-3);}
.bb-new{font-size:10.5px;font-weight:900;color:#fff;background:var(--coral);border-radius:6px;padding:1px 6px;}
.bb-sec>summary{display:flex;align-items:center;gap:8px;}
.bb-sec-cnt{margin-left:auto;font-size:11.5px;font-weight:800;color:var(--ink-3);}
.bb-item{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;background:var(--card);
  border-bottom:1.5px dashed var(--line-2);}
.bb-item:last-child{border-bottom:0;}
.bb-item.done{background:var(--green-soft);}
.bb-item.done .bb-item-title{color:#1c7a3e;}
.bb-ck{flex:none;width:20px;height:20px;margin-top:1px;border:2px solid var(--outline);border-radius:6px;background:#fff;
  cursor:pointer;display:grid;place-items:center;color:transparent;}
.bb-ck svg{width:12px;height:12px;}
.bb-ck.on{background:var(--green);border-color:var(--green);color:#fff;}
.bb-item-main{flex:1;min-width:0;}
.bb-today-panel .adv-prog{display:flex;align-items:center;gap:10px;margin-bottom:10px;}
.bb-today-panel .adv-prog-fill{background:var(--green);}
.bb-pick-box{max-height:230px;overflow:auto;border:1.5px solid var(--line);border-radius:11px;padding:8px 10px;background:var(--paper-2);}
.bb-pick-sec{font-size:11.5px;font-weight:800;color:var(--ink-3);margin:8px 0 4px;}
.bb-pick-row{display:flex;gap:8px;align-items:flex-start;padding:4px 2px;font-size:13px;cursor:pointer;}
.bb-pick-row input{margin-top:3px;}
.bb-pick-subj{flex:none;font-size:11.5px;font-weight:800;}
/* ===== 今日打卡：单词 / 练习册 当日进度卡（2026-10-09 新增） ===== */
.wd-today-panel .adv-prog{margin-bottom:12px;}
.wd-today-panel .adv-prog-fill{background:var(--brand);}
.wd-today-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}
.wd-today-row{display:flex;align-items:center;gap:9px;padding:9px 11px;border:1.5px solid var(--line);
  border-radius:10px;background:#fff;font-size:13px;}
.wd-today-row.done{background:var(--green-soft,#eef7f0);border-color:#b7dfc2;}
.wd-today-row .wd-ti{font-size:15px;flex:none;}
.wd-today-row .wd-tl{font-weight:800;color:var(--ink-2);flex:1;min-width:0;}
.wd-today-row .wd-tv{font-size:12.5px;color:var(--ink-3);font-weight:700;white-space:nowrap;}
.wd-today-row .wd-tv b{color:var(--ink);font-weight:900;font-size:13.5px;}
.wd-today-row .wd-tok{color:var(--green);font-weight:900;font-size:15px;flex:none;}
.wd-today-row .wd-tno{font-size:11px;font-weight:800;color:var(--coral);flex:none;}
.wd-today-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:11px;flex-wrap:wrap;}
.wb-today-panel .adv-prog{margin-bottom:12px;}
.wb-today-panel .adv-prog-fill{background:var(--purple,#7c5cff);}
.bb-wd-row{display:flex;gap:6px;flex-wrap:wrap;}
.bb-wd{width:44px;height:36px;border:2px solid var(--outline);border-radius:9px;background:#fff;font-size:12.5px;
  font-weight:800;cursor:pointer;font-family:inherit;}
.bb-wd.we{background:var(--sun-soft);}
.bb-wd.on{background:var(--brand);color:#fff;}
.bb-plan-preview{border:1.5px dashed var(--brand);background:var(--brand-soft);border-radius:11px;
  padding:10px 12px;font-size:12.5px;line-height:1.8;margin-top:12px;}
@media(max-width:560px){
  .bb-item-body{font-size:12.5px;}
  .panel-head .right{width:100%;margin-left:0;}
}

.bb-ver{display:inline-block;font-size:11px;font-weight:900;color:#fff;background:var(--coral);
  border-radius:5px;padding:1px 6px;margin:0 2px;}

/* ============ 打卡管理升级 · rewards.js 样式 ============ */

/* 积分条 */
.rw-points-bar{
  display:flex;align-items:center;gap:10px;padding:10px 14px;
  background:linear-gradient(135deg,var(--ink) 0%,var(--brand-2) 100%);
  color:#fff;position:relative;overflow:hidden;
}
.rw-points-bar::after{
  content:'';position:absolute;inset:0;
  background:radial-gradient(circle at 90% 50%,rgba(245,197,24,.15),transparent 60%);
  pointer-events:none;
}
.rw-pb-icon{
  width:36px;height:36px;border-radius:10px;display:grid;place-items:center;
  background:linear-gradient(160deg,#f0ce4a,var(--sun));color:var(--ink);
  font-size:18px;border:2px solid var(--sun);box-shadow:0 0 12px rgba(245,197,24,.4);
  flex-shrink:0;
}
.rw-pb-info{flex:1;position:relative;z-index:1;}
.rw-pb-total{font-size:22px;font-weight:900;color:var(--sun);line-height:1.2;}
.rw-pb-label{font-size:11px;color:#a0b0c4;}
.rw-pb-progress{height:5px;background:rgba(255,255,255,.15);border-radius:3px;margin-top:5px;overflow:hidden;}
.rw-pb-progress i{
  display:block;height:100%;background:linear-gradient(90deg,var(--sun),#ffd84a);
  border-radius:3px;transition:width .8s cubic-bezier(.22,.61,.36,1);
}
.rw-pb-next{font-size:11px;color:#a0b0c4;margin-top:3px;}
.rw-pb-next b{color:var(--sun);}

/* 提醒横幅 */
.rw-remind-banner{
  display:flex;align-items:center;gap:10px;padding:10px 14px;
  background:linear-gradient(135deg,#fff0d0,var(--sun-soft));
  border-bottom:2px solid var(--sun);font-size:13px;font-weight:600;
  color:var(--ink);position:relative;
}
.rw-rb-icon{font-size:20px;animation:rwPulse 2s ease-in-out infinite;}
@keyframes rwPulse{0%,100%{opacity:1;}50%{opacity:.5;}}
.rw-rb-txt{flex:1;}
.rw-rb-action{
  background:var(--sun);border:2px solid var(--outline);padding:5px 12px;
  border-radius:8px;font-size:12px;font-weight:700;box-shadow:var(--shadow-sm);
  transition:.12s;flex-shrink:0;
}
.rw-rb-action:active{transform:translate(1px,1px);box-shadow:1px 1px 0 rgba(22,35,58,.2);}

/* AI 建议卡片 */
.rw-suggest{
  display:flex;gap:10px;padding:12px 14px;margin:0 14px 12px;
  background:linear-gradient(135deg,var(--blue-soft),#fff);
  border:2px solid var(--blue);border-radius:var(--radius-sm);
  box-shadow:var(--shadow-sm);
}
.rw-as-icon{
  width:36px;height:36px;border-radius:10px;display:grid;place-items:center;
  background:var(--brand);color:#fff;font-size:18px;flex-shrink:0;
  box-shadow:0 0 10px rgba(27,76,155,.3);
}
.rw-as-body{flex:1;}
.rw-as-title{font-size:13px;font-weight:800;color:var(--brand);}
.rw-as-text{font-size:12px;color:var(--ink-2);margin-top:3px;line-height:1.5;}
.rw-warn-suggest{
  border-color:var(--coral);background:linear-gradient(135deg,var(--danger-soft),#fff);
}

/* 通用面板 */
.rw-panel{
  background:var(--card);border:2px solid var(--outline);border-radius:var(--radius);
  margin:0 14px 12px;overflow:hidden;box-shadow:var(--shadow);
}
.rw-panel-head{
  display:flex;align-items:center;gap:8px;padding:10px 14px;border-bottom:2px solid var(--line);
}
.rw-panel-head h3{font-size:14px;font-weight:800;flex:1;}
.rw-panel-head .rw-sub{font-size:11px;color:var(--ink-3);font-weight:400;}
.rw-panel-body{padding:10px 14px;}
.rw-empty{padding:16px;text-align:center;color:var(--ink-3);font-size:14px;}

/* 积分规则 */
.rw-rules{font-size:13px;line-height:2;color:var(--ink-2);}
.rw-rules b{color:#c9a227;}

/* 徽章墙 */
.rw-badge-wall{
  display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:12px;
}
.rw-badge{
  display:flex;flex-direction:column;align-items:center;gap:4px;
  padding:10px 4px;border:2px solid var(--line);border-radius:11px;
  background:var(--paper);transition:.2s;position:relative;
}
.rw-badge.unlocked{
  border-color:var(--sun);background:linear-gradient(160deg,var(--sun-soft),#fff);
  box-shadow:var(--shadow-sm);
}
.rw-badge:not(.unlocked){opacity:.5;}
.rw-badge:not(.unlocked) .rw-badge-ico{filter:grayscale(1) opacity(.4);}
.rw-badge-ico{font-size:28px;line-height:1;}
.rw-badge-name{font-size:10px;font-weight:700;text-align:center;color:var(--ink-2);}
.rw-badge.new::after{
  content:'新';position:absolute;top:-4px;right:-4px;
  background:var(--coral);color:#fff;font-size:9px;font-weight:800;
  padding:1px 5px;border-radius:8px;border:1px solid var(--outline);
  animation:rwBadgePop .5s ease;
}
@keyframes rwBadgePop{0%{transform:scale(0);}60%{transform:scale(1.2);}100%{transform:scale(1);}}

/* 获得记录 */
.rw-recent-list{font-size:13px;}
.rw-recent-row{
  display:flex;justify-content:space-between;align-items:center;
  padding:6px 0;border-bottom:1px solid var(--line-2);
}
.rw-recent-badge{font-weight:600;color:var(--ink-2);}
.rw-recent-date{font-size:11px;color:var(--ink-3);}

/* 周报告卡片 */
.rw-report-card{
  background:linear-gradient(160deg,var(--brand-2),var(--ink));
  border:2px solid var(--outline);border-radius:var(--radius);
  margin:0 14px 12px;padding:14px;color:#fff;box-shadow:var(--shadow);
  position:relative;overflow:hidden;
}
.rw-report-card::after{
  content:'';position:absolute;top:-30px;right:-30px;width:100px;height:100px;
  border-radius:50%;background:radial-gradient(circle,rgba(245,197,24,.1),transparent 70%);
}
.rw-report-card h3{font-size:14px;font-weight:800;color:var(--sun);}
.rw-rc-period{font-size:11px;color:#a0b0c4;margin-top:2px;}
.rw-report-stats{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-top:10px;}
.rw-report-stat{text-align:center;}
.rw-report-stat b{display:block;font-size:20px;font-weight:900;color:var(--sun);}
.rw-report-stat span{font-size:10px;color:#a0b0c4;}
.rw-rc-btn{
  display:inline-block;margin-top:10px;
  background:var(--sun);color:var(--ink);border:2px solid var(--outline);
  border-radius:9px;padding:5px 14px;font-size:12px;font-weight:700;
  box-shadow:var(--shadow-sm);transition:.12s;cursor:pointer;
}
.rw-rc-btn:active{transform:translate(1px,1px);}

/* 数据表 */
.rw-table-scroll{overflow-x:auto;}
.rw-data-table{width:100%;border-collapse:collapse;font-size:13px;}
.rw-data-table th{padding:8px 10px;text-align:left;border-bottom:2px solid var(--line);background:var(--paper-2);}
.rw-data-table td{padding:8px 10px;border-bottom:1px solid var(--line-2);text-align:center;}
.rw-data-table .rw-name{text-align:left;font-weight:600;}
.rw-rate-pill{padding:2px 8px;border-radius:6px;font-weight:700;font-size:12px;}
.rw-rate-high{background:var(--green-soft);color:var(--green);}
.rw-rate-mid{background:var(--warn-soft);color:var(--warn);}
.rw-rate-low{background:var(--danger-soft);color:var(--danger);}

/* 分科诊断 */
.rw-diag-row{padding:12px 14px;border-bottom:1px solid var(--line-2);}
.rw-diag-head{display:flex;align-items:center;gap:6px;margin-bottom:4px;}
.rw-diag-head b{font-size:14px;}
.rw-diag-tag{font-size:11px;font-weight:700;padding:1px 6px;border-radius:5px;}
.rw-tag-green{background:var(--green-soft);color:var(--green);}
.rw-tag-ok{background:var(--ok-soft);color:var(--ok);}
.rw-tag-warn{background:var(--warn-soft);color:var(--warn);}
.rw-tag-danger{background:var(--danger-soft);color:var(--danger);}
.rw-diag-rate{font-size:12px;color:var(--ink-3);margin-left:auto;}
.rw-diag-tips{font-size:12px;color:var(--ink-2);line-height:1.6;padding-left:14px;}

/* 习惯分析 */
.rw-habit{font-size:13px;line-height:2;color:var(--ink-2);}
.rw-habit b{color:var(--ink);}
.rw-habit-tip{
  margin-top:8px;padding:8px 10px;background:var(--blue-soft);
  border-radius:8px;border:1px solid var(--blue);font-size:12px;
}

/* 周总评 */
.rw-summary{font-size:14px;line-height:1.8;color:var(--ink-2);}

/* 庆祝动画 */
.rw-celebrate-overlay{
  position:fixed;inset:0;z-index:200;pointer-events:none;
  display:none;place-items:center;
}
.rw-celebrate-overlay.show{display:grid;animation:rwFadeOut 1.8s forwards;}
@keyframes rwFadeOut{0%,60%{opacity:1;}100%{opacity:0;}}
.rw-celebrate-card{
  background:linear-gradient(160deg,#fff,var(--sun-soft));
  border:3px solid var(--outline);border-radius:20px;
  padding:24px 32px;text-align:center;
  box-shadow:var(--shadow-lg);transform:scale(.8);
  animation:rwCelebratePop .4s cubic-bezier(.34,1.56,.64,1) forwards;
}
@keyframes rwCelebratePop{to{transform:scale(1);}}
.rw-cc-ico{font-size:48px;margin-bottom:8px;}
.rw-celebrate-card h3{font-size:20px;font-weight:900;color:var(--coral);}
.rw-celebrate-card p{font-size:14px;color:var(--ink-2);margin-top:4px;}
.rw-cc-points{
  display:inline-block;margin-top:8px;
  background:var(--sun);border:2px solid var(--outline);border-radius:12px;
  padding:4px 14px;font-size:16px;font-weight:800;color:var(--ink);
  box-shadow:var(--shadow-sm);
}
.rw-confetti{position:absolute;width:8px;height:8px;animation:rwConfettiFall 1.5s ease-out forwards;}
@keyframes rwConfettiFall{
  0%{transform:translateY(0) rotate(0);opacity:1;}
  100%{transform:translateY(300px) rotate(360deg);opacity:0;}
}

/* 连续天数心跳 */
@keyframes rwHeartbeat{0%,100%{transform:scale(1);}15%{transform:scale(1.12);}30%{transform:scale(1);}}
#streakBadge{animation:rwHeartbeat 1.6s ease-in-out infinite;}

/* ============ 侧栏分组标签 ============ */
.side-group-label{
  font-size:11px;font-weight:700;color:var(--ink-3);letter-spacing:1px;
  padding:10px 10px 4px;text-transform:uppercase;
}
.side-group-label:first-child{padding-top:0;}

/* ============ 学情报告子页签 ============ */
.rw-subtabs{
  display:flex;gap:6px;background:var(--paper-2);padding:5px;
  border:2px solid var(--outline);border-radius:13px;margin-bottom:14px;
}
.rw-subtab{
  flex:1;border:0;background:transparent;padding:8px 6px;border-radius:9px;
  font-size:14px;font-weight:600;color:var(--ink-2);cursor:pointer;transition:.14s;
}
.rw-subtab.active{
  background:linear-gradient(180deg,#5ba4cf,var(--brand));color:#fff;
  font-weight:800;box-shadow:2px 2px 0 rgba(22,45,74,.22);
}
.rw-subtab:hover:not(.active){background:var(--sun-soft);color:var(--ink);}

/* ==================== 校内作业 ==================== */
.hw-reg .hw-add-row{display:flex;flex-wrap:wrap;gap:8px;padding:12px 14px;align-items:center}
.hw-reg .hw-subj-sel,.hw-reg .hw-add-input,.hw-reg .hw-date-input{
  height:38px;border:1px solid var(--line, #d6dee9);border-radius:9px;padding:0 10px;
  font-size:14px;background:#fff;color:var(--ink);outline:none}
.hw-reg .hw-subj-sel{width:96px}
.hw-reg .hw-add-input{flex:1;min-width:180px}
.hw-reg .hw-date-input{width:150px}
.hw-reg .hw-add-input:focus,.hw-reg .hw-date-input:focus,.hw-reg .hw-subj-sel:focus{border-color:var(--brand)}

.hw-subj-group{margin:6px 14px 14px}
.hw-subj-title{font-size:14px;color:var(--ink-2,#5a6b80);font-weight:700;margin:10px 0 6px;display:flex;align-items:center;gap:6px}
.hw-subj-title .cnt{display:inline-block;min-width:20px;height:20px;line-height:20px;text-align:center;
  background:var(--sun-soft,#fff3d6);color:var(--ink-2,#5a6b80);border-radius:10px;font-size:12px;padding:0 6px}

.hw-list{list-style:none;margin:0;padding:0}
.hw-item{display:flex;align-items:center;gap:10px;padding:9px 4px;border-top:1px solid var(--line,#eef1f6)}
.hw-item:first-child{border-top:0}
.hw-item .check{margin:0}
.hw-item-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.hw-item-title{font-size:15px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hw-item-date{font-size:12px;color:var(--ink-3,#90a0b4)}
.hw-item.done .hw-item-title{color:var(--ink-3,#90a0b4);text-decoration:line-through}
.hw-item .del-btn{margin-left:auto}

/* ============ 每日一练（英语语法）· 2026-10-23 ============ */
.gr-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:12px}
.gr-kpi{background:var(--card);border:var(--bw) solid var(--outline);border-radius:var(--radius-sm);box-shadow:var(--shadow-sm);padding:8px 4px;text-align:center}
.gr-kpi b{display:block;font-size:17px;font-weight:900;color:var(--brand-2);line-height:1.3}
.gr-kpi span{font-size:10.5px;color:var(--ink-3)}
.gr-kpi.hot b{color:var(--green)}
.gr-progress{height:10px;background:var(--paper-2);border:var(--bw) solid var(--outline);border-radius:99px;overflow:hidden;margin-bottom:6px}
.gr-progress i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--brand),var(--green));transition:width .35s}
.gr-progress-txt{display:flex;justify-content:space-between;font-size:11.5px;color:var(--ink-3);margin-bottom:12px;font-weight:700}
.gr-qcard{background:var(--card);border:var(--bw) solid var(--outline);border-radius:var(--radius);box-shadow:var(--shadow);padding:15px;margin-bottom:12px}
.gr-grow{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.gr-gtag{display:inline-block;background:var(--brand-soft);color:var(--brand-2);border:1.5px solid var(--brand);border-radius:99px;font-size:11.5px;font-weight:800;padding:2px 10px}
.gr-qno{font-size:11.5px;color:var(--ink-3);margin-left:auto;font-weight:800}
.gr-qtext{font-size:16.5px;font-weight:800;line-height:2;color:var(--ink)}
.gr-qtext u{text-decoration:none;border-bottom:2px solid var(--sun);padding:0 14px}
.gr-opt{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:var(--card);border:var(--bw) solid var(--outline);border-radius:var(--radius-sm);box-shadow:var(--shadow-sm);padding:11px 12px;font-size:15px;font-weight:700;margin-bottom:9px;cursor:pointer;transition:.15s;color:var(--ink);font-family:inherit}
.gr-opt:hover{transform:translate(-1px,-1px);box-shadow:var(--shadow)}
.gr-opt .k{flex:none;width:26px;height:26px;border-radius:8px;background:var(--paper-2);border:1.5px solid var(--outline);display:grid;place-items:center;font-size:13px;font-weight:900}
.gr-opt .mk{margin-left:auto;font-size:16px;font-weight:900}
.gr-opt.ok{background:var(--green-soft);border-color:var(--green)}
.gr-opt.ok .k{background:var(--green);color:#fff;border-color:var(--green)}
.gr-opt.ok .mk{color:var(--green)}
.gr-opt.no{background:var(--danger-soft);border-color:var(--danger)}
.gr-opt.no .k{background:var(--danger);color:#fff;border-color:var(--danger)}
.gr-opt.no .mk{color:var(--danger)}
.gr-opt.dim{opacity:.5}
.gr-verdict{display:inline-flex;align-items:center;gap:5px;font-size:13.5px;font-weight:900;border-radius:99px;padding:4px 13px;margin-bottom:10px}
.gr-verdict.v-ok{background:var(--green-soft);color:var(--green)}
.gr-verdict.v-no{background:var(--danger-soft);color:var(--danger)}
.gr-explain{background:var(--sun-soft);border:var(--bw) solid var(--sun);border-radius:var(--radius-sm);padding:12px 14px;margin-bottom:12px;font-size:13.5px;line-height:1.85;color:#6b4d00}
.gr-explain .t{font-weight:900;margin-bottom:4px}
.gr-explain.gr-tip{background:var(--brand-soft);border-color:var(--brand);color:var(--brand-2);font-weight:700}
.gr-next{display:block;width:100%;background:var(--brand);color:#fff;border:var(--bw) solid var(--brand-2);border-radius:var(--radius-sm);box-shadow:var(--shadow-sm);padding:13px;font-size:16px;font-weight:900;cursor:pointer;font-family:inherit}
.gr-next:hover{background:var(--brand-2)}
.gr-result{background:var(--card);border:var(--bw) solid var(--outline);border-radius:var(--radius);box-shadow:var(--shadow);padding:22px 16px;text-align:center;margin-bottom:12px}
.gr-ring{width:136px;height:136px;border-radius:50%;margin:0 auto 10px;display:grid;place-items:center;background:conic-gradient(var(--green) var(--pct,80%),var(--paper-2) 0)}
.gr-ring i{width:104px;height:104px;border-radius:50%;background:var(--card);display:grid;place-items:center;font-size:30px;font-weight:900;color:var(--brand-2);font-style:normal}
.gr-ring i small{display:block;font-size:11px;color:var(--ink-3);font-weight:700;margin-top:2px}
.gr-rstat{display:flex;justify-content:center;gap:18px;font-size:12.5px;color:var(--ink-2);font-weight:700}
.gr-rstat b{color:var(--ink)}
.gr-say{background:var(--brand-soft);border-radius:var(--radius-sm);padding:11px 13px;font-size:13px;line-height:1.85;color:var(--brand-2);font-weight:700;margin-bottom:12px}
.gr-wrong{background:var(--card);border:var(--bw) solid var(--outline);border-radius:var(--radius-sm);box-shadow:var(--shadow-sm);padding:13px;margin-bottom:12px}
.gr-wrong h4{font-size:14px;margin-bottom:6px;color:var(--coral)}
.gr-witem{border-top:1.5px dashed var(--line);padding:10px 0;font-size:12.5px;line-height:1.8}
.gr-witem:first-of-type{border-top:0}
.gr-witem .wq{font-weight:800;color:var(--ink)}
.gr-witem .wa{color:var(--ink-2)}
.gr-witem .wa b{color:var(--danger)}
.gr-witem .wa i{color:var(--green);font-style:normal;font-weight:800}
.gr-btns{display:flex;gap:9px}
.gr-btns button{flex:1;border:var(--bw) solid var(--outline);border-radius:var(--radius-sm);box-shadow:var(--shadow-sm);padding:12px 6px;font-size:14px;font-weight:800;cursor:pointer;font-family:inherit}
.gr-btns .b1{background:var(--brand);color:#fff;border-color:var(--brand-2)}
.gr-btns .b2{background:var(--card);color:var(--ink)}
.gr-hist{background:var(--card);border:var(--bw) solid var(--outline);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px;margin-bottom:12px}
.gr-hist h4{font-size:14px;margin-bottom:3px}
.gr-hist .sub{font-size:11.5px;color:var(--ink-3);margin-bottom:8px}
.gr-bars{display:flex;align-items:flex-end;gap:8px;height:92px;padding-top:16px}
.gr-bars .b{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:4px;height:100%;position:relative}
.gr-bars .b i{width:100%;background:var(--blue);border-radius:5px 5px 0 0;position:relative;min-height:3px}
.gr-bars .b.today i{background:var(--green)}
.gr-bars .b em{font-size:10px;color:var(--ink-3);font-style:normal;font-weight:700}
.gr-bars .b b{font-size:10px;color:var(--ink-2);position:absolute;top:-16px;left:50%;transform:translateX(-50%);font-weight:800;white-space:nowrap}
/* 桌面端选项两列排布 */
@media (min-width:720px){
  .gr-opts{display:grid;grid-template-columns:1fr 1fr;gap:9px}
  .gr-opts .gr-opt{margin-bottom:0}
  .gr-btns{max-width:460px}
}

/* ==================== 每日一练 · 错题本 ==================== */
.gr-topbar{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.gr-topbar-hint{font-size:12px;color:var(--ink-3)}
.btn-mini.primary{background:var(--brand);border-color:var(--brand);color:#fff}
.btn-mini.primary:hover{filter:brightness(1.05);color:#fff}
.chk{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-3);cursor:pointer;user-select:none}
.gr-wtools{display:flex;flex-wrap:wrap;gap:10px;align-items:center;background:var(--card);
  border:var(--bw) solid var(--outline);border-radius:var(--radius);box-shadow:var(--shadow);padding:10px 12px;margin-bottom:10px}
.gr-wcnt{font-size:13px;color:var(--ink-2);font-weight:700;margin:2px 2px 12px}
.gr-wlist{display:flex;flex-direction:column;gap:12px}
.gr-witem{background:var(--card);border:var(--bw) solid var(--outline);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px 16px}
.gr-wtop{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.gr-wcnt-badge{font-size:12px;color:var(--coral,var(--danger));background:#fff0f0;border-radius:99px;padding:2px 9px;font-weight:800}
.gr-wqno{font-size:12px;color:var(--ink-3);margin-left:auto;font-weight:800}
.gr-wopt{display:flex;align-items:center;gap:10px;background:var(--card);border:var(--bw) solid var(--outline);
  border-radius:var(--radius-sm);box-shadow:var(--shadow-sm);padding:9px 12px;font-size:14.5px;font-weight:700;margin-bottom:8px;color:var(--ink)}
.gr-wopt .k{flex:none;width:26px;height:26px;border-radius:8px;background:var(--paper-2);border:1.5px solid var(--outline);
  display:grid;place-items:center;font-size:13px;font-weight:900}
.gr-wopt.r{background:var(--green-soft);border-color:var(--green)}
.gr-wopt.r .k{background:var(--green);color:#fff;border-color:var(--green)}
.gr-wopt.w{background:var(--danger-soft);border-color:var(--danger)}
.gr-wopt.w .k{background:var(--danger);color:#fff;border-color:var(--danger)}
.gr-wex{margin-top:8px;font-size:13px;color:var(--ink-2);line-height:1.6;background:var(--paper-2);
  border-left:3px solid var(--brand);padding:8px 10px;border-radius:0 8px 8px 0}
