/* 知识卡片刷题站 — 手写 CSS,零外链 */
:root{
  --bg:#f6f7fb;
  --card:#ffffff;
  --ink:#1f2430;
  --ink2:#5b6478;
  --ink3:#8b93a7;
  --line:#e3e7f0;
  --line2:#f1f3f9;
  --blue:#3b7ff5;
  --blue-soft:#e8f0ff;
  --green:#1fa971;
  --green-soft:#e4f7ef;
  --orange:#f08c2e;
  --orange-soft:#fff1e0;
  --red:#e2564a;
  --red-soft:#fdeceb;
  --purple:#8659e0;
  --shadow:0 2px 10px rgba(31,36,48,.06);
  --shadow-lg:0 10px 30px rgba(31,36,48,.13);
  --theme:#3b7ff5;
  --theme-soft:#e8f0ff;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;background:var(--bg);color:var(--ink);
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  font-size:16px;line-height:1.7;
  -webkit-tap-highlight-color:transparent;
}
a{color:inherit;text-decoration:none}
.hidden{display:none !important}
.muted{color:var(--ink2);font-size:14px}
.wrap{max-width:820px;margin:0 auto;padding:16px 14px 90px}
code{
  background:var(--line2);border-radius:6px;padding:1px 6px;
  font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.94em;
  word-break:break-word;
}

/* ---------- 顶栏 ---------- */
#topbar{
  position:sticky;top:0;z-index:60;
  background:rgba(246,247,251,.94);backdrop-filter:blur(8px);
  border-bottom:1px solid var(--line);
}
.topbar-in{
  max-width:820px;margin:0 auto;padding:8px 14px;
  display:flex;align-items:center;gap:10px;
}
.brand{font-weight:800;font-size:17px;letter-spacing:.5px;white-space:nowrap;flex:0 0 auto}
.topnav{margin-left:auto;display:flex;align-items:center;gap:3px;flex:0 1 auto}
.topnav a{
  font-size:14px;color:var(--ink2);padding:5px 11px;border-radius:999px;
  white-space:nowrap;flex:0 0 auto;
}
.topnav a.on{background:#fff;color:var(--blue);box-shadow:var(--shadow)}
.iconbtn{
  border:1px solid var(--line);background:#fff;color:var(--ink2);
  border-radius:999px;padding:4px 11px;font-size:13.5px;cursor:pointer;font-family:inherit;
  white-space:nowrap;flex:0 0 auto;
}
/* 五个入口在 375px 上要塞得下 */
@media (max-width:440px){
  .topbar-in{padding:7px 10px;gap:6px}
  .brand{font-size:15px;letter-spacing:0}
  .topnav{gap:1px}
  .topnav a{font-size:13px;padding:4px 7px}
  .iconbtn{padding:3px 8px;font-size:12.5px}
}
@media (max-width:360px){
  .brand{display:none}
}

/* ---------- 通用卡片 ---------- */
.card{
  background:var(--card);border-radius:16px;padding:18px 16px;
  margin-bottom:14px;box-shadow:var(--shadow);
}
h2.sec{margin:22px 2px 10px;font-size:17px;letter-spacing:.4px}
h2.sec .muted{font-weight:400;margin-left:6px}

/* ---------- 图标(game-icons.net,CSS mask 上色,零外链) ---------- */
.gi{
  display:inline-block;width:1em;height:1em;flex:0 0 auto;background:currentColor;
  -webkit-mask:var(--gi) center/contain no-repeat;
          mask:var(--gi) center/contain no-repeat;
  vertical-align:-.13em;
}
.gi-realm{width:1.02em;height:1.02em;margin-right:.3em;opacity:.95}
.gi-realm-sm{width:15px;height:15px;margin-right:5px;opacity:.65;vertical-align:-2px}
.gi-dao{width:1.05em;height:1.05em;margin-right:.3em}
.sitefoot{text-align:center;color:var(--ink3);font-size:11.5px;padding:0 16px 26px;margin-top:-66px}

/* ---------- 顶部总进度 ---------- */
.hero{
  position:relative;overflow:hidden;
  background:linear-gradient(160deg,#4a86f7,#7a5cf0);
  color:#fff;border-radius:18px;padding:18px 16px 16px;margin-bottom:16px;
  box-shadow:var(--shadow-lg);
}
.hero>*:not(.hero-aura){position:relative;z-index:1}
/* 当前境界的呼吸光晕;瓶颈时换成压抑的紫云脉动 */
.hero-aura{
  position:absolute;left:-12%;top:-118%;width:130%;height:220%;pointer-events:none;
  background:radial-gradient(ellipse at 32% 78%,rgba(255,255,255,.30),rgba(255,255,255,0) 62%);
  animation:breathe 5.5s ease-in-out infinite;
}
@keyframes breathe{0%,100%{opacity:.55;transform:scale(1)}50%{opacity:1;transform:scale(1.09)}}
.hero.blocked{background:linear-gradient(160deg,#4b3f7a,#2c2150)}
.hero.blocked .hero-aura{
  background:radial-gradient(ellipse at 50% 80%,rgba(150,112,238,.5),rgba(80,52,150,0) 64%);
  animation:pulseDark 3.2s ease-in-out infinite;
}
@keyframes pulseDark{0%,100%{opacity:.45;transform:scale(1.02)}50%{opacity:.95;transform:scale(1.14)}}
.bottleneck-tag{
  margin-left:9px;font-size:11.5px;font-weight:700;letter-spacing:1px;
  background:rgba(0,0,0,.3);border-radius:6px;padding:2px 8px;vertical-align:4px;
}
.bottleneck-tag.dark{background:#efe9fc;color:var(--purple)}
.gatelist{margin-top:13px;display:flex;flex-direction:column;gap:7px}
.gaterow{
  display:flex;align-items:center;gap:9px;width:100%;text-align:left;
  background:rgba(255,255,255,.15);border:0;border-radius:11px;padding:10px 12px;
  color:#fff;font-family:inherit;font-size:14px;cursor:pointer;line-height:1.4;
}
.gaterow:active{transform:translateY(1px)}
.gaterow:disabled{cursor:default;opacity:.75}
.gatedot{
  width:8px;height:8px;border-radius:50%;background:#ffd479;flex:0 0 auto;
  box-shadow:0 0 0 3px rgba(255,212,121,.22);
}
.gatetxt{flex:1 1 auto;min-width:0}
.gatego{flex:0 0 auto;font-size:12.5px;opacity:.85;font-weight:700}
.gaterow.dark{background:#f6f2ff;color:var(--ink);margin-top:8px}
.gaterow.dark .gatego{color:var(--purple)}
.gate-card{border-left:4px solid var(--purple)}
.hero-top{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.hero-pts{font-size:36px;font-weight:800;line-height:1.1;font-variant-numeric:tabular-nums}
.hero-rank{font-size:33px;font-weight:800;line-height:1.15;letter-spacing:2px;display:flex;align-items:center;flex-wrap:wrap}
.hero .chip b{font-size:19px}
.hero-lv{
  background:rgba(255,255,255,.2);border-radius:999px;padding:2px 11px;
  font-size:13px;font-weight:700;
}
.hero-sub{opacity:.92;font-size:14px;margin-top:2px}
.hero-track{height:8px;background:rgba(255,255,255,.25);border-radius:99px;overflow:hidden;margin:12px 0 10px}
.hero-fill{height:100%;background:#fff;border-radius:99px;width:0;transition:width .6s cubic-bezier(.3,1.2,.5,1)}
.hero-stats{display:flex;gap:8px;flex-wrap:wrap}
.chip{
  background:rgba(255,255,255,.17);border-radius:11px;padding:6px 11px;
  font-size:13px;line-height:1.35;flex:1 1 auto;min-width:78px;
}
.chip b{display:block;font-size:19px;font-weight:800;font-variant-numeric:tabular-nums}
.due-btn{
  display:block;width:100%;margin-top:10px;border:0;border-radius:12px;
  background:#fff;color:var(--purple);font-weight:700;font-size:15px;
  padding:11px;cursor:pointer;font-family:inherit;
}

/* ---------- 课程卡 ---------- */
.scope-group{margin-bottom:6px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}
.course{
  background:var(--card);border-radius:16px;padding:14px;box-shadow:var(--shadow);
  border-top:3px solid var(--theme);cursor:pointer;position:relative;
  transition:transform .15s,box-shadow .15s;
}
.course:active{transform:translateY(1px)}
.course.open{box-shadow:var(--shadow-lg)}
.course-head{display:flex;align-items:center;gap:12px}
.course-name{font-size:17px;font-weight:700;flex:1 1 auto;display:flex;align-items:center;flex-wrap:wrap;gap:6px}
.dao-badge{
  display:inline-flex;align-items:center;border-radius:999px;
  padding:1px 9px;font-size:11.5px;font-weight:700;letter-spacing:.3px;
}
/* 统计页专精一栏 */
.dao-row{display:flex;align-items:flex-start;gap:11px;padding:11px 0;border-bottom:1px solid var(--line2)}
.dao-row:last-of-type{border-bottom:0}
.dao-row .gi-dao{font-size:24px;margin-top:3px}
.dao-mid{flex:1 1 auto;min-width:0}
.dao-title{display:flex;align-items:baseline;gap:8px}
.dao-title b{font-size:16px;letter-spacing:1px}
.dao-tier{font-size:12.5px;color:var(--ink2);font-weight:700}
.dao-track{height:7px;background:var(--line);border-radius:99px;overflow:hidden;margin:6px 0 4px}
.dao-track i{display:block;height:100%;width:0;border-radius:99px;transition:width .6s cubic-bezier(.3,1.2,.5,1)}
.dao-gap{font-size:12.5px;color:var(--ink3)}
.course-meta{color:var(--ink2);font-size:13px;margin-top:1px;font-weight:400}
.ring{flex:0 0 auto}
.ring text{font-weight:800}
.course-act{display:flex;gap:8px;margin-top:12px}
.course-act .btn{flex:1 1 auto}

/* ---------- 按钮 ---------- */
.btn{
  background:var(--theme);color:#fff;border:0;border-radius:11px;
  padding:11px 16px;font-size:15.5px;cursor:pointer;font-family:inherit;font-weight:600;
  line-height:1.35;
}
.btn:active{transform:translateY(1px)}
.btn.ghost{background:#fff;color:var(--theme);border:1.5px solid var(--theme)}
.btn.grey{background:#fff;color:var(--ink2);border:1.5px solid var(--line)}
.btn.danger{--theme:var(--red)}
.btn.block{display:block;width:100%}
.btn.small{padding:7px 13px;font-size:14px;border-radius:9px}
.btn:disabled{opacity:.45;cursor:not-allowed}

/* ---------- 章节条 ---------- */
.deckrow{
  display:block;background:var(--card);border-radius:13px;padding:11px 13px;
  margin-bottom:8px;box-shadow:var(--shadow);cursor:pointer;
}
.deckrow-top{display:flex;align-items:baseline;gap:8px}
.deckrow-name{font-weight:650;flex:1 1 auto;font-size:15.5px}
.deckrow-pct{font-size:13px;color:var(--ink2);font-variant-numeric:tabular-nums;flex:0 0 auto}
.deckrow .tag{
  font-size:11.5px;color:var(--ink3);background:var(--line2);
  border-radius:5px;padding:0 6px;flex:0 0 auto;
}
.mbar{display:flex;height:7px;border-radius:99px;overflow:hidden;background:var(--line);margin-top:7px}
.mbar i{display:block;height:100%;transition:width .5s}
.mbar .m-g{background:var(--green)}
.mbar .m-y{background:var(--orange)}
.due-dot{
  display:inline-block;background:var(--purple);color:#fff;font-size:11px;
  border-radius:99px;padding:0 7px;font-weight:700;
}

/* ---------- 雷达图 ---------- */
.radar-box{text-align:center;padding:6px 0 2px}
.radar-box canvas{max-width:100%;height:auto}
.dirbars{padding:8px 0 2px}
.dirbar{display:flex;align-items:center;gap:8px;margin-bottom:7px}
.dirbar-name{flex:0 0 auto;max-width:38%;font-size:13px;color:var(--ink2);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dirbar-track{flex:1 1 auto;height:7px;background:var(--line);border-radius:99px;overflow:hidden}
.dirbar-track i{display:block;height:100%;width:0;border-radius:99px;transition:width .5s}
.dirbar-pct{flex:0 0 auto;font-size:12.5px;color:var(--ink3);font-variant-numeric:tabular-nums}

/* ---------- 章节页 ---------- */
.pagehead{margin:4px 2px 14px}
.pagehead h1{margin:0;font-size:23px;line-height:1.35}
.back-link{color:var(--ink2);font-size:14px;display:inline-block;margin-bottom:6px}
.lvhead{
  display:flex;align-items:center;gap:8px;margin:18px 2px 8px;
  font-size:15px;font-weight:700;color:var(--ink2);
}
.lvhead .lvdot{width:9px;height:9px;border-radius:50%;background:var(--theme)}
.cardrow{
  display:flex;align-items:flex-start;gap:11px;background:var(--card);
  border-radius:13px;padding:11px 13px;margin-bottom:8px;box-shadow:var(--shadow);cursor:pointer;
}
.dot{width:11px;height:11px;border-radius:50%;background:var(--line);flex:0 0 auto;margin-top:7px}
.dot.seen{background:var(--orange)}
.dot.mastered{background:var(--green)}
.cardrow-main{flex:1 1 auto;min-width:0}
.cardrow-kp{font-weight:650;font-size:15.5px}
.cardrow-hook{color:var(--ink2);font-size:13.5px;margin-top:1px}
.cardrow-num{color:var(--ink3);font-size:12.5px;flex:0 0 auto;margin-top:3px}

/* ---------- 刷卡流 ---------- */
.study-top{display:flex;align-items:center;gap:10px;margin:2px 2px 12px}
.study-top .qbar{flex:1 1 auto;height:8px;background:var(--line);border-radius:99px;overflow:hidden}
.study-top .qbar i{display:block;height:100%;background:linear-gradient(90deg,#4a86f7,#7a5cf0);border-radius:99px;transition:width .4s}
.study-top .cnt{font-size:13px;color:var(--ink2);font-variant-numeric:tabular-nums;flex:0 0 auto}
.study-top .quit{font-size:13px;color:var(--ink3);flex:0 0 auto;cursor:pointer;background:none;border:0;font-family:inherit;padding:2px 4px}

.flash{
  background:var(--card);border-radius:20px;box-shadow:var(--shadow-lg);
  padding:26px 18px 20px;margin-bottom:14px;animation:pop .28s cubic-bezier(.2,1.3,.4,1);
}
@keyframes pop{from{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:none}}
.flash .kp{
  display:inline-block;background:var(--theme-soft);color:var(--theme);
  border-radius:999px;padding:2px 11px;font-size:12.5px;font-weight:700;margin-bottom:14px;
}
.flash .hook{font-size:26px;font-weight:800;line-height:1.45;letter-spacing:.5px}
.flash .subtitle{color:var(--ink2);font-size:14.5px;margin-top:8px}
.flash .lvtag{color:var(--ink3);font-size:12.5px;margin-left:8px;font-weight:400}
.flash-act{display:flex;gap:10px;margin-top:22px;flex-wrap:wrap}
.flash-act .btn{flex:1 1 140px}

.bk-item{margin-bottom:14px}
.bk-item h4{margin:0 0 2px;font-size:15.5px}
.bk-item p{margin:0;color:var(--ink);font-size:15.5px;line-height:1.72}
.note{
  border-radius:0 10px 10px 0;padding:10px 13px;margin:14px 0 0;font-size:14.5px;line-height:1.65;
  background:var(--blue-soft);border-left:4px solid var(--blue);
}
.note.ok{background:var(--green-soft);border-color:var(--green)}
.note.warn{background:var(--orange-soft);border-color:var(--orange)}
.note b:first-child{display:block;margin-bottom:1px;font-size:13px;opacity:.85}

/* 题目 */
.stem{font-size:19px;font-weight:700;line-height:1.6;margin:2px 0 16px}
.stem .qidx{color:var(--ink3);font-size:13px;font-weight:600;display:block;margin-bottom:4px}
.opt{
  display:block;width:100%;text-align:left;background:#fff;border:1.5px solid var(--line);
  border-radius:13px;padding:14px 15px;margin-bottom:12px;font-size:16.5px;
  font-family:inherit;color:var(--ink);cursor:pointer;line-height:1.5;
  min-height:52px;
  transition:border-color .15s,background .15s,transform .1s;
}
.opt:active{transform:scale(.995)}
.opt .lab{
  display:inline-block;width:22px;height:22px;line-height:21px;text-align:center;
  border-radius:7px;background:var(--line2);color:var(--ink2);font-size:12.5px;
  font-weight:700;margin-right:9px;vertical-align:2px;
}
.opt.right{border-color:var(--green);background:var(--green-soft)}
.opt.right .lab{background:var(--green);color:#fff}
.opt.wrong{border-color:var(--red);background:var(--red-soft)}
.opt.wrong .lab{background:var(--red);color:#fff}
.opt.locked{cursor:default}
.fill-row{display:flex;gap:9px;margin-bottom:10px}
.fill-row input{
  flex:1 1 auto;border:1.5px solid var(--line);border-radius:12px;padding:12px 14px;
  font-size:17px;font-family:inherit;color:var(--ink);min-width:0;background:#fff;
}
.fill-row input:focus{outline:none;border-color:var(--theme)}
.fill-row input.right{border-color:var(--green);background:var(--green-soft)}
.fill-row input.wrong{border-color:var(--red);background:var(--red-soft)}

/* 掌握庆祝 */
.celebrate{
  background:linear-gradient(160deg,#1fa971,#4ec9a0);color:#fff;border-radius:20px;
  padding:32px 20px;text-align:center;box-shadow:var(--shadow-lg);
  animation:pop .32s cubic-bezier(.2,1.4,.4,1);
}
.celebrate .big{font-size:44px;font-weight:800;line-height:1.15}
.celebrate .ttl{font-size:20px;font-weight:700;margin-top:6px}
.celebrate p{margin:6px 0 0;opacity:.95;font-size:14.5px}
.finale{
  background:linear-gradient(160deg,#4a86f7,#7a5cf0);color:#fff;border-radius:20px;
  padding:28px 20px;text-align:center;box-shadow:var(--shadow-lg);margin-bottom:14px;
}
.finale .big{font-size:40px;font-weight:800;line-height:1.2}
.finale p{margin:6px 0 0;opacity:.95}
.finale-stats{display:flex;gap:8px;margin-top:16px}
.finale-stats .chip{text-align:center}

/* ---------- 统计页 ---------- */
.weak{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--line2);cursor:pointer}
.weak:last-child{border-bottom:0}
.weak-n{
  flex:0 0 auto;background:var(--red-soft);color:var(--red);border-radius:8px;
  font-size:12.5px;font-weight:700;padding:2px 8px;
}
.weak-kp{flex:1 1 auto;font-size:15px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.weak-sub{flex:0 0 auto;color:var(--ink3);font-size:12.5px}
.bars{display:flex;align-items:flex-end;gap:4px;height:110px;margin-top:8px}
.bars .b{flex:1 1 0;display:flex;flex-direction:column;justify-content:flex-end;height:100%;min-width:0}
.bars .b i{display:block;background:var(--blue);border-radius:4px 4px 0 0;min-height:2px;transition:height .5s}
.bars .b.today i{background:var(--purple)}
.bars .b span{font-size:10px;color:var(--ink3);text-align:center;margin-top:4px;white-space:nowrap}

/* ---------- toast / 飘分 ---------- */
#toast{
  position:fixed;left:50%;bottom:34px;transform:translate(-50%,20px);
  background:var(--green);color:#fff;font-weight:700;font-size:16px;
  padding:10px 22px;border-radius:999px;box-shadow:0 6px 20px rgba(31,169,113,.4);
  opacity:0;pointer-events:none;transition:opacity .25s,transform .25s;z-index:200;
  max-width:88vw;text-align:center;
}
#toast.show{opacity:1;transform:translate(-50%,0)}
#toast.bad{background:var(--red);box-shadow:0 6px 20px rgba(226,86,74,.4)}
#floatlayer{position:fixed;inset:0;pointer-events:none;z-index:210}
.floatpt{
  position:absolute;font-size:26px;font-weight:800;color:var(--green);
  text-shadow:0 2px 8px rgba(255,255,255,.9);
  animation:floatup 1s cubic-bezier(.2,.9,.4,1) forwards;
}
@keyframes floatup{
  0%{opacity:0;transform:translate(-50%,0) scale(.7)}
  22%{opacity:1;transform:translate(-50%,-14px) scale(1.15)}
  100%{opacity:0;transform:translate(-50%,-66px) scale(1)}
}
/* 连对越多越金 */
.floatpt.hot{
  color:#e8a317;
  text-shadow:0 0 14px rgba(240,185,58,.75),0 2px 8px rgba(255,255,255,.9);
}
/* 答对的小星点 */
.spark{
  position:absolute;width:6px;height:6px;border-radius:50%;background:var(--green);
  margin:-3px 0 0 -3px;opacity:0;
  animation:sparkout .72s cubic-bezier(.2,.8,.3,1) forwards;
}
@keyframes sparkout{
  0%{opacity:1;transform:translate(0,0) scale(1)}
  100%{opacity:0;transform:translate(var(--dx),var(--dy)) scale(.25)}
}
/* 升重:卡片周身流光扫一圈 */
.sweep{
  position:absolute;inset:0;border-radius:inherit;pointer-events:none;overflow:hidden;
}
.sweep::before{
  content:"";position:absolute;top:-60%;left:-70%;width:55%;height:220%;
  background:linear-gradient(100deg,rgba(255,214,120,0),rgba(255,226,160,.75),rgba(255,214,120,0));
  transform:rotate(14deg);
  animation:sweepx .95s cubic-bezier(.35,.1,.3,1) forwards;
}
@keyframes sweepx{to{left:120%}}
.flash,.hero{position:relative}

/* ---------- 设置抽屉 ---------- */
.sheet{position:fixed;inset:0;background:rgba(31,36,48,.42);z-index:300;display:flex;align-items:flex-end;justify-content:center}
.sheet-card{
  background:#fff;border-radius:18px 18px 0 0;padding:18px 16px 22px;
  width:100%;max-width:520px;max-height:86vh;overflow:auto;box-shadow:var(--shadow-lg);
}
.sheet-card h3{margin:0 0 4px;font-size:18px}
.sheet-row{display:flex;gap:9px;margin-top:12px;flex-wrap:wrap}
.sheet-row.end{justify-content:flex-end}
.sheet-row .btn{flex:1 1 auto}
.sheet hr{border:0;border-top:1px solid var(--line);margin:16px 0}
.io-box{
  width:100%;min-height:110px;margin-top:10px;border:1.5px solid var(--line);
  border-radius:11px;padding:10px;font-size:12.5px;font-family:ui-monospace,Menlo,Consolas,monospace;
  resize:vertical;
}
@media (min-width:560px){.sheet{align-items:center}.sheet-card{border-radius:18px}}
#reset-note{margin:6px 0 0}

/* ---------- 档案选择 ---------- */
.profile-btn{
  display:flex;align-items:center;gap:10px;width:100%;text-align:left;
  background:#fff;border:1.5px solid var(--line);border-radius:13px;
  padding:12px 14px;margin-top:9px;font-family:inherit;color:var(--ink);cursor:pointer;
}
.profile-btn:active{transform:translateY(1px)}
.profile-btn.on{border-color:var(--purple);background:#f6f2ff}
.profile-btn>div{flex:1 1 auto;min-width:0}
.profile-name{font-size:17px;font-weight:700}
.profile-meta{font-size:13px;color:var(--ink2);font-variant-numeric:tabular-nums}
.profile-cur{
  flex:0 0 auto;background:var(--purple);color:#fff;border-radius:999px;
  font-size:11.5px;font-weight:700;padding:2px 9px;
}

/* ---------- 境界天梯 ---------- */
.realm{display:flex;align-items:flex-start;gap:10px;padding:7px 0;border-bottom:1px solid var(--line2)}
.realm:last-of-type{border-bottom:0}
.realm-name{
  flex:0 0 62px;font-weight:700;font-size:14.5px;color:var(--ink3);
  padding-top:2px;letter-spacing:1px;
}
.realm.done .realm-name{color:var(--ink2)}
.realm.here .realm-name{color:var(--purple)}
.realm-stages{flex:1 1 auto;display:flex;flex-wrap:wrap;gap:4px}
.stage{
  font-size:11.5px;line-height:1.9;padding:0 7px;border-radius:6px;
  background:var(--line2);color:var(--ink3);white-space:nowrap;
}
.stage.passed{background:#e9e2fb;color:var(--purple);font-weight:600}
.stage.cur{
  background:var(--purple);color:#fff;font-weight:700;
  box-shadow:0 0 0 3px rgba(134,89,224,.18);
}

/* ---------- 境界突破 ---------- */
.bt{
  position:fixed;inset:0;z-index:400;background:rgba(24,18,40,.72);
  display:flex;align-items:center;justify-content:center;padding:20px;
  animation:btfade .3s ease forwards;
}
@keyframes btfade{from{opacity:0}to{opacity:1}}
.bt-card{
  position:relative;background:linear-gradient(165deg,#6b46d6,#38227a 70%);
  color:#fff;border-radius:22px;padding:36px 24px 26px;text-align:center;
  max-width:400px;width:100%;box-shadow:0 20px 60px rgba(24,18,40,.55);
  overflow:hidden;animation:btpop .45s cubic-bezier(.2,1.5,.4,1);
}
@keyframes btpop{from{opacity:0;transform:scale(.85) translateY(16px)}to{opacity:1;transform:none}}
.bt-halo{
  position:absolute;left:50%;top:-40%;width:320px;height:320px;margin-left:-160px;
  background:radial-gradient(circle,rgba(255,224,140,.55),rgba(255,224,140,0) 66%);
  pointer-events:none;animation:halo 2.6s ease-in-out infinite;
}
@keyframes halo{0%,100%{transform:scale(1);opacity:.85}50%{transform:scale(1.16);opacity:1}}
.bt-label{
  position:relative;font-size:13px;letter-spacing:5px;opacity:.85;font-weight:700;
}
.bt-rank{
  position:relative;font-size:42px;font-weight:800;letter-spacing:4px;
  margin:8px 0 6px;text-shadow:0 3px 22px rgba(255,220,130,.6);
}
.bt-from{position:relative;font-size:14px;opacity:.88;margin-bottom:22px}
.bt-card .btn{position:relative;background:#fff;color:#4a2ea0;width:100%}
.bt-storm{
  position:absolute;left:50%;top:0;width:100%;max-width:380px;height:200px;
  transform:translateX(-50%);pointer-events:none;opacity:.9;
}
.bt-icon{
  position:relative;display:block;margin:0 auto 6px;width:58px;height:58px;color:#ffe6a6;
  filter:drop-shadow(0 0 16px rgba(255,222,140,.75));
  animation:iconpop .7s cubic-bezier(.2,1.5,.4,1);
}
@keyframes iconpop{
  0%{opacity:0;transform:scale(.35) rotate(-35deg)}
  60%{opacity:1;transform:scale(1.16) rotate(6deg)}
  100%{opacity:1;transform:scale(1) rotate(0)}
}
.bt-rank.flash-in{animation:flashin .24s ease-out}
@keyframes flashin{0%{opacity:.25;transform:scale(.86)}100%{opacity:1;transform:scale(1)}}
/* 专精升阶:轻快的青绿 */
.bt.dao .bt-card{background:linear-gradient(165deg,#17936a,#0d5f52 72%)}
.bt.dao .bt-halo{background:radial-gradient(circle,rgba(160,255,214,.5),rgba(160,255,214,0) 66%)}
.bt.dao .bt-icon{
  color:#d6fff0;filter:drop-shadow(0 0 16px rgba(150,255,214,.8));
  animation:iconspin .8s cubic-bezier(.2,1.3,.4,1);
}
@keyframes iconspin{
  0%{opacity:0;transform:scale(.4) rotate(-160deg)}
  100%{opacity:1;transform:scale(1) rotate(0)}
}
.bt.dao .bt-rank{font-size:34px;text-shadow:0 3px 22px rgba(150,255,214,.55)}
.bt.dao .bt-card .btn{color:#0d5f52}
/* 渡劫突破:最狠的一档 */
.bt.gate{background:rgba(12,8,26,.86)}
.bt.gate .bt-card{background:linear-gradient(165deg,#3a2570,#140b30 72%)}
.bt.gate .bt-rank{font-size:46px;text-shadow:0 0 30px rgba(255,226,150,.9)}
.bt.gate .bt-halo{animation:halo 1.6s ease-in-out infinite}
.bt.gate .bt-card{animation:btpop .45s cubic-bezier(.2,1.5,.4,1),goldburst 1s ease-out}
@keyframes goldburst{
  0%{box-shadow:0 0 0 0 rgba(255,222,140,.85)}
  100%{box-shadow:0 0 0 62px rgba(255,222,140,0)}
}

/* ---------- 空态 ---------- */
.empty{text-align:center;color:var(--ink2);padding:44px 16px}
.empty .big{font-size:19px;font-weight:700;color:var(--ink);margin-bottom:6px}

/* ---------- 尊重系统的「减少动态效果」 ---------- */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{
    animation-duration:.001ms !important;animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
  }
  .hero-aura,.bt-halo{animation:none;opacity:.7}
  .bt-storm{display:none !important}
}

@media (max-width:400px){
  body{font-size:15.5px}
  .wrap{padding:14px 12px 80px}
  /* 手机上手指粗,选项之间留够距离防误触 */
  .opt{margin-bottom:14px;padding:15px 14px;min-height:56px}
  .hero-pts{font-size:31px}
  .hero-rank{font-size:27px;letter-spacing:1px}
  .bt-rank{font-size:33px}
  .bt.gate .bt-rank{font-size:37px}
  .realm-name{flex-basis:64px;font-size:13px}
  .dao-badge{font-size:11px}
  .flash{padding:22px 15px 18px}
  .flash .hook{font-size:22px}
  .stem{font-size:17.5px}
  .opt{font-size:16px}
  .grid{grid-template-columns:1fr}
}

/* ================= 渡劫台 / 天劫考 ================= */
.reddot{
  display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--red);
  margin-left:4px;vertical-align:5px;box-shadow:0 0 0 3px rgba(226,86,74,.2);
  animation:dotpulse 1.6s ease-in-out infinite;
}
@keyframes dotpulse{0%,100%{opacity:.65}50%{opacity:1}}
.due-btn.ready{
  background:linear-gradient(100deg,#ffd479,#ffb03a);color:#4a2b00;
  animation:readyglow 2.2s ease-in-out infinite;
}
@keyframes readyglow{0%,100%{box-shadow:0 0 0 0 rgba(255,212,121,.5)}50%{box-shadow:0 0 0 12px rgba(255,212,121,0)}}

.ascend-hero{padding-bottom:20px}
.lore{
  margin:12px 0 0;font-size:14px;line-height:1.85;opacity:.92;
  border-left:3px solid rgba(255,255,255,.4);padding-left:12px;
}
.trial-card{border:1.5px solid var(--line);position:relative;overflow:hidden}
.trial-card.ready{border-color:#f0b93a;box-shadow:0 0 0 4px rgba(240,185,58,.14),var(--shadow)}
.trial-label{font-size:12px;letter-spacing:3px;color:var(--ink3);font-weight:700}
.trial-name{
  font-size:26px;font-weight:800;letter-spacing:3px;margin:2px 0 6px;
  display:flex;align-items:center;gap:8px;color:var(--purple);
}
.gi-trial{width:26px;height:26px}
.dark-list{margin-top:12px}
.dark-list.hl .gaterow.dark{animation:hlflash .6s ease 2}
@keyframes hlflash{50%{background:#ffe9c2}}
.gaterow.dark.done{background:var(--green-soft);color:var(--green);font-weight:600}
.gatedot.ok{background:var(--green);box-shadow:0 0 0 3px rgba(31,169,113,.2)}
.gatego.undo{background:none;border:0;font-family:inherit;color:var(--ink3);cursor:pointer;font-size:12px}
.deed{align-items:flex-start;cursor:pointer;user-select:none;-webkit-user-select:none}
.deed-mid{flex:1 1 auto;min-width:0}
.deed-hint{font-size:12px;color:var(--ink3);margin-top:2px}
.deed-prog{height:4px;background:var(--line);border-radius:99px;overflow:hidden;margin-top:7px}
.deed-prog i{display:block;height:100%;width:0;background:var(--purple);border-radius:99px}
.big-ascend{
  margin-top:16px;font-size:18px;padding:15px;letter-spacing:4px;
  background:linear-gradient(100deg,#7a5cf0,#b06ae8);
}
.big-ascend.locked{background:var(--line);color:var(--ink3);box-shadow:none}
.big-ascend.shake{animation:shake .4s}
@keyframes shake{
  0%,100%{transform:translateX(0)}20%{transform:translateX(-7px)}
  40%{transform:translateX(6px)}60%{transform:translateX(-4px)}80%{transform:translateX(3px)}
}

/* 纵向天梯 */
.ladder{display:flex;flex-direction:column;gap:9px}
.lrealm{
  background:var(--card);border-radius:14px;padding:12px 14px;box-shadow:var(--shadow);
  border-left:3px solid var(--line);
}
.lrealm.done{border-left-color:var(--purple)}
.lrealm.here{border-left-color:#f0b93a;box-shadow:0 0 0 3px rgba(240,185,58,.15),var(--shadow)}
.lrealm.future{opacity:.55}
.lrealm-head{display:flex;align-items:center;gap:8px;font-size:16px}
.lrealm-head b{letter-spacing:2px}
.gi-lrealm{width:20px;height:20px;color:var(--purple)}
.lrealm.future .gi-lrealm{color:var(--ink3)}
.lrealm-trial{margin-left:auto;font-size:12px;color:var(--ink3);letter-spacing:1px}
.lrealm-desc{font-size:13px;color:var(--ink2);line-height:1.75;margin:6px 0 8px}
.stage.gated{position:relative;padding-right:20px}
.gi-lock{position:absolute;right:5px;top:6px;width:11px;height:11px;opacity:.75}
.stamp{
  display:inline-block;margin-left:5px;font-size:9.5px;font-style:normal;
  border:1px solid currentColor;border-radius:3px;padding:0 3px;opacity:.7;
}

/* 考试 */
.examrow{
  display:flex;align-items:center;gap:11px;width:100%;text-align:left;
  background:var(--card);border:1.5px solid var(--line);border-radius:14px;
  padding:13px 14px;margin-bottom:9px;font-family:inherit;color:var(--ink);cursor:pointer;
}
.examrow:disabled{opacity:.5;cursor:not-allowed}
.examrow .gi-dao{font-size:26px}
.examrow-mid{flex:1 1 auto;min-width:0}
.examrow-name{font-weight:700;font-size:16px}
.passed-stamp{
  flex:0 0 auto;background:var(--green-soft);color:var(--green);border-radius:7px;
  font-size:11.5px;font-weight:700;padding:2px 8px;
}
.exam-top{
  position:sticky;top:52px;z-index:40;display:flex;align-items:center;gap:10px;
  background:linear-gradient(160deg,#3a2570,#221448);color:#fff;
  border-radius:13px;padding:10px 13px;margin-bottom:12px;box-shadow:var(--shadow-lg);
  animation:cloudsdown .5s cubic-bezier(.2,1.1,.4,1);
}
@keyframes cloudsdown{from{opacity:0;transform:translateY(-14px)}to{opacity:1;transform:none}}
.exam-title{font-size:13.5px;font-weight:700;flex:0 0 auto;max-width:44%;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.exam-time{font-size:15px;font-weight:800;font-variant-numeric:tabular-nums;flex:0 0 auto}
.incense{flex:1 1 auto;height:6px;background:rgba(255,255,255,.22);border-radius:99px;overflow:hidden}
.incense i{display:block;height:100%;background:linear-gradient(90deg,#ffd479,#ff8a3a);border-radius:99px}
.incense.urgent i{background:linear-gradient(90deg,#ff8a3a,#e2564a);animation:dotpulse .8s infinite}
.exam-q{padding:18px 16px}
.opt.picked{border-color:var(--purple);background:#f4efff}
.opt.picked .lab{background:var(--purple);color:#fff}
.exam-review{padding:16px;animation:flipin .4s cubic-bezier(.2,1.1,.4,1)}
@keyframes flipin{from{opacity:0;transform:rotateX(-22deg)}to{opacity:1;transform:none}}
.exam-review.ok{border-left:4px solid var(--green)}
.exam-review.bad{border-left:4px solid var(--red)}
.exam-pass{background:linear-gradient(160deg,#1fa971,#4ec9a0);position:relative;overflow:hidden}
.exam-fail{background:linear-gradient(160deg,#6b7488,#4a5164)}
.seal{
  position:absolute;right:14px;top:14px;border:3px solid #ffe6a6;color:#ffe6a6;
  border-radius:8px;padding:4px 9px;font-weight:800;letter-spacing:2px;font-size:13px;
  transform:rotate(-14deg);animation:sealin .55s cubic-bezier(.2,1.6,.4,1);
}
@keyframes sealin{
  0%{opacity:0;transform:rotate(-14deg) scale(2.4)}
  70%{opacity:1;transform:rotate(-14deg) scale(.92)}
  100%{opacity:1;transform:rotate(-14deg) scale(1)}
}
/* KaTeX 在小屏别撑破 */
.katex{font-size:1.02em}
.katex-display{overflow-x:auto;overflow-y:hidden;padding:2px 0}
@media (max-width:400px){
  .trial-name{font-size:22px}
  .exam-top{top:48px}
  .lrealm-desc{font-size:12.5px}
}

/* 图标 URL 放 CSS 里声明:相对 assets/style.css 解析,避免 JS 内联 url() 的相对路径坑 */
.gi-i-breakthrough{--gi:url(icons/breakthrough.svg)}
.gi-i-dao-biology{--gi:url(icons/dao-biology.svg)}
.gi-i-dao-chemistry{--gi:url(icons/dao-chemistry.svg)}
.gi-i-dao-chinese{--gi:url(icons/dao-chinese.svg)}
.gi-i-dao-english{--gi:url(icons/dao-english.svg)}
.gi-i-dao-geography{--gi:url(icons/dao-geography.svg)}
.gi-i-dao-history{--gi:url(icons/dao-history.svg)}
.gi-i-dao-japanese{--gi:url(icons/dao-japanese.svg)}
.gi-i-dao-math{--gi:url(icons/dao-math.svg)}
.gi-i-dao-physics{--gi:url(icons/dao-physics.svg)}
.gi-i-dao-politics{--gi:url(icons/dao-politics.svg)}
.gi-i-gate-locked{--gi:url(icons/gate-locked.svg)}
.gi-i-path-beast{--gi:url(icons/path-beast.svg)}
.gi-i-path-code{--gi:url(icons/path-code.svg)}
.gi-i-path-cook{--gi:url(icons/path-cook.svg)}
.gi-i-path-craft{--gi:url(icons/path-craft.svg)}
.gi-i-path-fit{--gi:url(icons/path-fit.svg)}
.gi-i-path-game{--gi:url(icons/path-game.svg)}
.gi-i-path-tool{--gi:url(icons/path-tool.svg)}
.gi-i-path-trophy{--gi:url(icons/path-trophy.svg)}
.gi-i-realm-banxian{--gi:url(icons/realm-banxian.svg)}
.gi-i-realm-dacheng{--gi:url(icons/realm-dacheng.svg)}
.gi-i-realm-daluo{--gi:url(icons/realm-daluo.svg)}
.gi-i-realm-daozu{--gi:url(icons/realm-daozu.svg)}
.gi-i-realm-dujie{--gi:url(icons/realm-dujie.svg)}
.gi-i-realm-heti{--gi:url(icons/realm-heti.svg)}
.gi-i-realm-huashen{--gi:url(icons/realm-huashen.svg)}
.gi-i-realm-jiedan{--gi:url(icons/realm-jiedan.svg)}
.gi-i-realm-jinxian{--gi:url(icons/realm-jinxian.svg)}
.gi-i-realm-lianqi{--gi:url(icons/realm-lianqi.svg)}
.gi-i-realm-lianxu{--gi:url(icons/realm-lianxu.svg)}
.gi-i-realm-taiyi{--gi:url(icons/realm-taiyi.svg)}
.gi-i-realm-yuanying{--gi:url(icons/realm-yuanying.svg)}
.gi-i-realm-zhenxian{--gi:url(icons/realm-zhenxian.svg)}
.gi-i-realm-zhuji{--gi:url(icons/realm-zhuji.svg)}

/* ================= wave2 交互打磨 ================= */
/* 键盘提示(触屏设备隐藏) */
.kbd-hint{font-size:12px;color:var(--ink3);text-align:right;margin:-2px 2px 2px}
@media (hover:none){ .kbd-hint{display:none} }
/* 回炉记号 */
.retag{
  display:inline-block;background:var(--orange-soft);color:var(--orange);
  border-radius:7px;padding:1px 8px;font-size:11.5px;font-weight:700;
  margin-bottom:10px;letter-spacing:.5px;
}
.retag.small{margin:0;font-size:11px;padding:0 7px;flex:0 0 auto}
/* 章节页顶部快捷入口 */
.quickbar{
  display:flex;align-items:center;gap:10px;width:100%;margin-top:10px;
  background:var(--theme-soft);border:1.5px solid var(--theme);border-radius:12px;
  padding:11px 13px;font-family:inherit;color:var(--theme);cursor:pointer;
}
.quickbar:active{transform:translateY(1px)}
.quickbar-main{flex:1 1 auto;text-align:left;font-weight:700;font-size:15px}
.quickbar-go{flex:0 0 auto;font-size:13px;font-weight:700;opacity:.85}
/* 薄弱榜「去补」 */
.weak-fix{flex:0 0 auto;margin-left:6px}
.weak{gap:8px}

/* ---------- 单词专项 ---------- */
/* 首页「今日到期」拆两个入口:卡片一个,单词一个 */
.hero-sub.duehead{margin-top:10px;font-weight:650}
.duerow{display:flex;gap:8px}
.duerow .due-btn{flex:1 1 0;min-width:0}
/* 课程卡上的词库条 */
.vstrip{
  display:flex;align-items:center;gap:9px;width:100%;margin-top:11px;
  background:var(--theme-soft);border:0;border-radius:11px;padding:9px 11px;
  font-family:inherit;color:var(--theme);cursor:pointer;text-align:left;
}
.vstrip:active{transform:translateY(1px)}
.vstrip-main{flex:0 0 auto;font-size:13px;line-height:1.3}
.vstrip-main b{display:block;font-size:13.5px}
.vstrip-track{
  flex:1 1 auto;height:6px;min-width:34px;border-radius:99px;
  background:rgba(255,255,255,.75);overflow:hidden;
}
.vstrip-track i{display:block;height:100%;border-radius:99px;width:0;transition:width .5s}
.quickbar.book{background:#fff5e4;border-color:var(--orange);color:#b96a10}
.vocab-card .dao-badge{font-size:11.5px;padding:1px 8px}
.vbank-row .btn.small{flex:0 0 auto;align-self:center;margin-left:10px}
/* 刷词卡面 */
.vcard{text-align:center;position:relative}
.vcard .kp{margin-bottom:10px}
.vword{font-size:40px;font-weight:800;line-height:1.3;letter-spacing:.5px;word-break:break-word}
.vword-sm{font-size:28px;font-weight:800;display:block;line-height:1.35;word-break:break-word}
.vsub{margin-top:8px;display:flex;gap:10px;align-items:center;justify-content:center;flex-wrap:wrap;min-height:26px}
.vipa{color:var(--ink2);font-size:15px;font-family:ui-monospace,Menlo,Consolas,monospace}
.kanabtn{
  background:var(--theme-soft);color:var(--theme);border:0;border-radius:999px;
  padding:3px 13px;font-size:15px;font-weight:700;font-family:inherit;cursor:pointer;
}
.vcard .note{text-align:left}
.vcard .flash-act{margin-top:20px}
.vconf .btn{flex:1 1 88px}
.starbtn{
  position:absolute;top:-8px;right:0;background:none;border:0;cursor:pointer;
  font-family:inherit;font-size:12.5px;color:var(--ink3);padding:4px 6px;
}
.starbtn.on{color:#e0a23a;font-weight:700}
.vexsub{font-size:14px;font-weight:400;color:var(--ink2);margin-top:6px;line-height:1.6}
.vcard .vmean{font-size:17px}
@media (max-width:400px){
  .vword{font-size:34px}
  .vconf .btn{flex:1 1 100%}
}

/* ---------- 学科卡 / 学科页 / 主线 ---------- */
.course.subj{cursor:pointer}
.mainline{
  display:flex;align-items:baseline;gap:7px;margin-top:11px;
  background:var(--theme-soft);border-radius:10px;padding:7px 10px;
}
.mainline-tag{
  flex:0 0 auto;font-size:11.5px;font-weight:700;color:var(--theme);
  background:rgba(255,255,255,.8);border-radius:6px;padding:1px 7px;
}
.mainline-name{flex:1 1 auto;font-size:13.5px;font-weight:650;color:var(--ink);min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mainline-pct{flex:0 0 auto;font-size:13px;color:var(--theme);font-variant-numeric:tabular-nums;font-weight:700}
.mainline.big{margin-top:0;padding:10px 12px}
.mainline.big .mainline-name{font-size:16px}
.subj-due{margin-top:8px;font-size:12.5px;color:var(--orange);font-weight:650}
.personal-line{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:9px;
  padding:7px 9px;border-radius:9px;background:var(--theme-soft);color:var(--theme);font-size:13px;font-weight:700}
.personal-line .btn{flex:0 0 auto;padding:5px 10px}
/* 学科页分区 */
.subtabs{display:flex;gap:8px;overflow-x:auto;padding:2px 0 10px;-webkit-overflow-scrolling:touch}
.subtabs::-webkit-scrollbar{display:none}
.subtab{
  flex:0 0 auto;border:1.5px solid var(--line);background:#fff;color:var(--ink2);
  border-radius:999px;padding:6px 14px;font-size:14px;font-family:inherit;
  font-weight:650;cursor:pointer;white-space:nowrap;
}
.subtab.on{border-color:var(--theme);background:var(--theme-soft);color:var(--theme)}
.scope-head{
  display:flex;align-items:center;gap:8px;margin:14px 2px 6px;
  font-size:13px;font-weight:700;color:var(--ink2);
}
.ext-badge{
  background:var(--purple);color:#fff;border-radius:999px;padding:1px 8px;
  font-size:11px;font-weight:700;letter-spacing:.5px;
}
/* grid item 默认 min-width:auto,卡里一行不换行的长文本(词库 1,626/19,659)会把整列撑爆 */
.grid > .course{min-width:0}
.course-name,.course-meta,.subj-due{min-width:0;overflow-wrap:anywhere}
.vstrip-main{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mainline,.course-head,.course-act{min-width:0}

/* ---------- 断点续刷:首页顶部「接着刷」 ---------- */
.resume{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  background:var(--card);border:1.5px solid var(--orange);border-left-width:5px;
  border-radius:14px;padding:12px 14px;margin-bottom:12px;box-shadow:var(--shadow);
}
.resume-txt{flex:1 1 190px;min-width:0}
.resume-slim{font-size:13px;color:var(--ink3);margin:-4px 4px 12px;line-height:1.5}
.resume-slim a{color:var(--theme);text-decoration:none;white-space:nowrap}
.resume-title{font-weight:700;font-size:15px;color:var(--ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.resume-sub{font-size:12.5px;color:var(--ink2);margin-top:3px}
.resume .btn{flex:0 0 auto}
.resume-x{
  flex:0 0 auto;background:none;border:none;padding:6px 2px;
  font-size:12.5px;color:var(--ink3);text-decoration:underline;cursor:pointer;
}

/* ---------- 首页减法:今天的任务 / 紧凑境界条 / 我的课程 ---------- */
/* 主卡:整页唯一的大按钮,拇指一点就进刷词 */
.task{
  background:var(--card);border-radius:18px;padding:16px;margin-bottom:14px;
  box-shadow:var(--shadow);border-top:3px solid var(--blue);
  display:flex;flex-direction:column;gap:10px;
}
.task-label{font-size:13.5px;font-weight:700;color:var(--ink2);letter-spacing:.5px}
.task-go{
  display:block;width:100%;min-height:60px;font-size:19px;font-weight:800;letter-spacing:1px;
  border-radius:14px;background:linear-gradient(100deg,#4a86f7,#7a5cf0);
  box-shadow:0 6px 18px rgba(74,134,247,.32);
}
.task-sub{font-size:13px;color:var(--ink2);text-align:center}
.task-done{font-size:22px;font-weight:800;color:var(--green);text-align:center}
.task.done{border-top-color:var(--green)}
.task.done .btn.ghost{--theme:var(--green);align-self:center}
.task-cards{align-self:center}

/* 紧凑境界条:段位一行 + 进度条,不再占半屏;点它去统计页看细节 */
.hero.mini{padding:12px 14px;margin-bottom:6px;border-radius:14px;cursor:pointer;box-shadow:var(--shadow)}
.mini-top{display:flex;align-items:center;gap:10px}
.mini-rank{flex:1 1 auto;min-width:0;font-size:17px;font-weight:800;letter-spacing:1px;
  display:flex;align-items:center;white-space:nowrap;overflow:hidden}
.mini-rank .bottleneck-tag{vertical-align:0}
.mini-today{flex:0 0 auto;font-size:12.5px;opacity:.9;white-space:nowrap}
.mini-today b{font-size:16px;font-weight:800;font-variant-numeric:tabular-nums}
.hero.mini .hero-track{margin:9px 0 1px;height:6px}
.hero.mini .mini-gate{margin-top:9px;padding:8px;font-size:14px}

/* 我的课程:一科一行 */
.clist{background:var(--card);border-radius:16px;box-shadow:var(--shadow);padding:2px 14px}
.crow{display:flex;align-items:center;gap:11px;padding:12px 0;border-bottom:1px solid var(--line2)}
.crow:last-child{border-bottom:0}
.crow .gi-dao{font-size:22px;margin:0;color:var(--theme)}
.crow-mid{flex:1 1 auto;min-width:0}
.crow-name{font-weight:700;font-size:15.5px;line-height:1.3}
.crow-track{height:5px;background:var(--line);border-radius:99px;overflow:hidden;margin-top:5px}
.crow-track i{display:block;height:100%;width:0;background:var(--theme);border-radius:99px;transition:width .5s}
.crow-pct{flex:0 0 auto;font-size:13.5px;font-weight:700;color:var(--theme);font-variant-numeric:tabular-nums}
.crow-go{flex:0 0 auto;font-size:20px;color:var(--ink3);line-height:1}

/* 单词页:没碰过的词库折起来;「看分组」降成文字链接 */
.more-banks{margin-top:14px}
.more-banks summary{
  cursor:pointer;color:var(--ink2);font-size:14.5px;font-weight:650;padding:8px 2px;
  list-style-position:inside;
}
.more-banks[open] summary{margin-bottom:8px}
.course-act .textlink{flex:0 0 auto;align-self:center;font-size:13.5px;color:var(--ink2);padding:6px 4px}

/* 三条轴(境界 / 学业专精 / 外道):原来根本没有这几个类的样式,渲染成一串竖排散字。
   现在只在统计页出现,做成等宽并排的小格子,窄屏自动换行。 */
.axes{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 10px}
.axis{
  flex:1 1 100px;min-width:0;display:flex;align-items:center;gap:8px;
  background:var(--line2);border-radius:12px;padding:9px 10px;
}
.gi-axis{width:22px;height:22px;flex:0 0 auto}
.axis>div{min-width:0}
.axis-main{font-size:14px;font-weight:700;line-height:1.3;overflow-wrap:anywhere}
.axis-sub{font-size:11.5px;color:var(--ink3);line-height:1.3;margin-top:1px}
.axis.a-rank .gi-axis{color:var(--purple)}
.axis.a-dao .gi-axis{color:var(--green)}
.axis.a-wai .gi-axis{color:#e8871a}
.crow-note{font-size:11.5px;color:var(--ink3);margin-top:3px;line-height:1.3;font-variant-numeric:tabular-nums}

/* ---------- 学习计划(docs/SPEC-PLAN.md):首页「今日计划」卡 / 计划页 / 计划列表 ----------
   一件事一行:勾选框 + 类型色块 + 做什么 + 分钟数,有去处的整行末尾一个 ›。
   勾选框 26px、整行最小 48px 高 —— 手机上拇指一下点准。颜色只用 --theme(计划的学科色)和类型色。 */
.plan-card{padding:14px 14px 12px;border-top:3px solid var(--theme)}
.plan-head{display:block;margin:-2px 0 4px}
.plan-line{display:flex;align-items:center;gap:8px;min-width:0}
.plan-name{font-weight:800;font-size:15.5px;line-height:1.3;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.plan-day{flex:0 0 auto;font-size:13px;font-weight:700;color:var(--theme)}
.plan-count{flex:0 0 auto;margin-left:auto;font-size:12.5px;color:var(--ink3);font-variant-numeric:tabular-nums}
.plan-go{flex:0 0 auto;font-size:20px;color:var(--ink3);line-height:1}
.plan-badge{
  flex:0 0 auto;font-size:11.5px;font-weight:700;line-height:1.5;padding:0 7px;border-radius:99px;
  background:var(--orange-soft);color:var(--orange);white-space:nowrap;
}
.plan-badge.now{background:var(--theme-soft);color:var(--theme)}
.plan-focus{font-size:14px;color:var(--ink2);line-height:1.45;margin-top:2px}
.plan-tag{
  display:inline-block;margin-left:6px;font-size:11px;line-height:1.55;padding:0 6px;border-radius:6px;
  background:var(--line2);color:var(--ink3);vertical-align:1px;
}

.ptasks{margin-top:6px}
.ptask{display:flex;align-items:center;gap:10px;min-height:48px;border-top:1px solid var(--line2)}
.ptask-ck{
  flex:0 0 auto;width:26px;height:26px;padding:0;margin:0;border-radius:8px;cursor:pointer;
  border:2px solid var(--line);background:#fff;position:relative;
  transition:background .15s,border-color .15s;
}
/* 可点区域比看得见的框再大一圈,指头落在框边上也算 */
.ptask-ck::before{content:"";position:absolute;top:-10px;right:-10px;bottom:-10px;left:-10px}
.ptask-ck:disabled{opacity:.45;cursor:not-allowed}
.ptask.done .ptask-ck{background:var(--green);border-color:var(--green)}
.ptask.done .ptask-ck::after{
  content:"";position:absolute;left:7px;top:2.5px;width:7px;height:12px;
  border:solid #fff;border-width:0 2.5px 2.5px 0;transform:rotate(45deg);
}
.ptask-main{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:8px;padding:8px 0;cursor:pointer}
.ptask-txt{flex:1 1 auto;min-width:0}
.ptask-what{font-size:15px;line-height:1.4;font-weight:600}
.ptask.done .ptask-what{color:var(--ink3);text-decoration:line-through;text-decoration-color:rgba(139,147,167,.6);font-weight:500}
.ptype{
  display:inline-block;margin-right:6px;padding:0 5px;border-radius:5px;
  font-size:11px;font-weight:700;line-height:1.6;vertical-align:1px;
  color:#fff;background:var(--pt,#8b93a7);
}
.ptask.done .ptype{opacity:.55}
.ptask-how{font-size:12.5px;color:var(--ink3);line-height:1.4;margin-top:1px}
.ptask-min{flex:0 0 auto;font-size:12px;color:var(--ink3);white-space:nowrap;font-variant-numeric:tabular-nums}
.ptask-go{flex:0 0 auto;font-size:20px;color:var(--theme);line-height:1;padding-left:2px}
.plan-floor{
  margin-top:4px;padding:8px 10px;border-radius:10px;background:var(--line2);
  font-size:12.5px;color:var(--ink2);line-height:1.5;
}
.plan-floor b{color:var(--green);margin-right:6px}

/* 计划页 */
.plan-prog{margin-top:10px}
.plan-prog-top{font-size:13px;color:var(--ink2)}
.plan-prog-top b{font-size:17px;color:var(--theme);font-variant-numeric:tabular-nums}
.plan-track{height:7px;background:var(--line);border-radius:99px;overflow:hidden;margin-top:4px}
.plan-track i{display:block;height:100%;background:var(--theme);border-radius:99px;transition:width .5s}
.plan-join{margin-bottom:14px}
.plan-nav{display:flex;align-items:center;gap:8px;margin-bottom:4px}
.plan-arrow{
  flex:0 0 auto;width:40px;height:40px;border-radius:12px;border:1.5px solid var(--line);
  background:#fff;color:var(--ink2);font-size:22px;line-height:1;cursor:pointer;font-family:inherit;padding:0 0 3px;
}
.plan-arrow:disabled{opacity:.35;cursor:default}
.plan-nav-mid{flex:1 1 auto;min-width:0;text-align:center}
.plan-nav-day{font-size:14px;color:var(--ink2);line-height:1.4}
.plan-nav-day b{font-size:16px;color:var(--ink)}
.plan-nav-sub{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:2px}
.plan-nav-sub .plan-count{margin-left:0}
.plan-today-link{
  border:0;background:none;padding:0;font:inherit;font-size:12.5px;color:var(--theme);
  text-decoration:underline;cursor:pointer;
}
.plan-card .plan-nav + .plan-focus{text-align:center;margin-bottom:2px}
.plan-fold{background:var(--card);border-radius:14px;box-shadow:var(--shadow);margin-bottom:10px;padding:0 14px}
.plan-fold summary{
  cursor:pointer;padding:12px 0;font-size:14.5px;font-weight:650;color:var(--ink2);
  list-style-position:inside;
}
.plan-fold[open] summary{border-bottom:1px solid var(--line2)}
.plan-rules{margin:10px 0 12px;padding-left:20px;font-size:14px;line-height:1.6;color:var(--ink2)}
.plan-rules li{margin-bottom:6px}
.plan-copy{padding:10px 0 12px;display:flex;flex-direction:column;gap:8px}
.plan-copy-text{
  font-size:13.5px;line-height:1.6;color:var(--ink);background:var(--line2);border-radius:10px;padding:10px 12px;
  white-space:pre-wrap;-webkit-user-select:text;user-select:text;
}
.plan-copy .btn{align-self:flex-end}
.plan-ov{padding:4px 0 8px}
.pov-phase{display:flex;align-items:baseline;gap:8px;margin:10px 0 2px;font-size:13px;color:var(--ink3)}
.pov-phase b{color:var(--ink);font-size:14px}
.pov-row{
  display:flex;align-items:center;gap:9px;width:100%;min-height:40px;padding:6px 6px;margin:0;
  border:0;border-radius:9px;background:none;font:inherit;text-align:left;cursor:pointer;color:var(--ink);
}
.pov-row.today .pov-date{color:var(--theme);font-weight:700}
.pov-row.cur{background:var(--theme-soft)}
.pov-dot{flex:0 0 auto;width:10px;height:10px;border-radius:50%;border:2px solid var(--line)}
.pov-dot.part{border-color:var(--green);background:linear-gradient(90deg,var(--green) 50%,#fff 50%)}
.pov-dot.full{border-color:var(--green);background:var(--green)}
.pov-date{flex:0 0 38px;font-size:12.5px;color:var(--ink3);font-variant-numeric:tabular-nums}
.pov-focus{flex:1 1 auto;min-width:0;font-size:14px;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pov-tag{flex:0 0 auto;font-size:11px;color:var(--ink3);background:var(--line2);border-radius:6px;padding:0 6px;line-height:1.6}
.plan-leave{
  display:block;margin:18px auto 0;border:0;background:none;padding:8px;
  font:inherit;font-size:13px;color:var(--ink3);text-decoration:underline;cursor:pointer;
}
.plan-row .plan-badge{margin-right:2px}

/* 超前做(SPEC-PLAN §7):领先几天 / 今天完成了。只报领先,落后不出任何字 */
.plan-lead{
  flex:0 0 auto;font-size:11.5px;font-weight:700;line-height:1.5;padding:0 7px;border-radius:99px;
  background:var(--green-soft);color:var(--green);white-space:nowrap;margin-left:6px;
}
.plan-line .plan-lead{margin-left:0}
.plan-done{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:8px;padding:10px 12px;
  border-radius:12px;background:var(--green-soft);
}
.plan-done-ttl{flex:1 1 auto;font-size:16px;font-weight:800;color:var(--green)}
.plan-done-sub{flex:1 1 100%;font-size:12.5px;color:var(--ink2)}
.plan-ahead{flex:0 0 auto;min-height:40px}

/* 系统跟踪的任务(SPEC-PLAN §4):没有可点的勾选框,左边状态圆(空圈 / 绿勾),右边进度文字。
   状态圆和勾选框同尺寸,两种任务混排时文字左边缘对齐 */
.ptask-st{
  flex:0 0 auto;width:26px;height:26px;border-radius:50%;border:2px dashed var(--line);
  position:relative;box-sizing:border-box;
}
.ptask.done .ptask-st{border:2px solid var(--green);background:var(--green)}
/* 做了一部分:实线环按 --p 填绿(conic-gradient),中间挖空 */
.ptask-st.part{border:0;background:conic-gradient(var(--green) var(--p), var(--line) 0)}
.ptask-st.part::before{content:"";position:absolute;inset:4px;border-radius:50%;background:var(--card, #fff)}
.ptask.done .ptask-st::after{
  content:"";position:absolute;left:7.5px;top:3.5px;width:6px;height:11px;
  border:solid #fff;border-width:0 2.5px 2.5px 0;transform:rotate(45deg);
}
.ptask-prog{
  flex:0 0 auto;font-size:12px;font-weight:700;color:var(--theme);white-space:nowrap;
  font-variant-numeric:tabular-nums;max-width:40%;overflow:hidden;text-overflow:ellipsis;
}
.ptask.done .ptask-prog{color:var(--green)}
.ptask-fix{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:0 0 8px 36px;margin-top:-4px}
.ptask-fix-link{
  border:0;background:none;padding:2px 0;font:inherit;font-size:11.5px;color:var(--ink3);
  text-decoration:underline;cursor:pointer;
}
.ptask-fix-note{font-size:12px;color:var(--ink3)}

/* 选做(SPEC-PLAN §8):排在必做后面,一行虚线小标题隔开;字轻一号,勾选框照常。
   「+N 选做」跟在 x/y 后面,只在勾了选做时出现。只用 CSS 变量,深色模式自动跟上 */
.plan-optn{flex:0 0 auto;font-size:12px;font-weight:700;color:var(--green);white-space:nowrap;font-variant-numeric:tabular-nums}
.plan-mins{font-size:12px;color:var(--ink3);line-height:1.4;margin-top:2px;font-variant-numeric:tabular-nums}
.plan-card .plan-nav ~ .plan-mins{text-align:center}
.ptask-opth{
  display:flex;align-items:baseline;gap:8px;margin-top:8px;padding:9px 0 3px;border-top:1px dashed var(--line);
  font-size:12.5px;font-weight:700;color:var(--ink3);
}
.ptask-opth-min{font-weight:500;font-variant-numeric:tabular-nums}
.ptask-opth + .ptask{border-top:0}
.ptask.popt{min-height:44px}
.ptask.popt .ptask-what{font-size:14px;font-weight:500;color:var(--ink2)}
.ptask.popt.done .ptask-what{color:var(--ink3)}
.ptask.popt .ptype{opacity:.75}
.ptask.popt.done .ptype{opacity:.5}
.jn-opt{
  display:inline-block;margin-right:6px;padding:0 5px;border-radius:5px;border:1px solid var(--line);
  font-size:11px;line-height:1.5;color:var(--ink3);vertical-align:1px;
}
.jn-ptask.popt .jn-ptask-what{color:var(--ink2)}

/* 每天新词量:藏在「今天的任务」小字末尾的「每天 N 个 ›」,点开在卡里原地展开,不另开设置页 */
.task-qlink{
  border:0;background:none;padding:0;margin:0;font:inherit;line-height:inherit;vertical-align:baseline;
  color:var(--blue);cursor:pointer;white-space:nowrap;
}
/* 小字里的这个入口不能把行撑高(首页其他东西一个像素都不该动);点击区用伪元素往外扩,拇指照样点得中 */
.task-qlink{position:relative}
.task-qlink::before{content:"";position:absolute;top:-10px;right:-6px;bottom:-10px;left:-6px}
.task-qpick{
  display:flex;flex-direction:column;align-items:center;gap:8px;
  padding:10px 8px;border-radius:12px;background:var(--line2);
}
.task-qchoices{display:flex;flex-wrap:wrap;justify-content:center;gap:6px}
.task-qopt{
  min-width:44px;min-height:36px;padding:0 10px;border-radius:10px;cursor:pointer;
  border:1.5px solid var(--line);background:#fff;color:var(--ink2);
  font:inherit;font-size:15px;font-weight:700;font-variant-numeric:tabular-nums;
}
.task-qopt.on{background:var(--blue);border-color:var(--blue);color:#fff}
.task-qfine{display:flex;align-items:center;gap:12px}
.task-qstep{
  width:36px;height:36px;border-radius:50%;cursor:pointer;padding:0 0 2px;
  border:1.5px solid var(--line);background:#fff;color:var(--ink2);font:inherit;font-size:20px;line-height:1;
}
.task-qstep:disabled{opacity:.35;cursor:default}
.task-qval{font-size:13.5px;color:var(--ink2);font-variant-numeric:tabular-nums;min-width:72px;text-align:center}
.task.done .task-extra{align-self:center}

/* ---------- 写作批改(docs/SPEC-WRITING.md §5):#/write 写作页 · #/essay/<id> · #/essays ---------- */
.wr-link,.wr-mine{color:var(--theme);font-weight:650}
.wr-mine{display:inline-block;margin-top:10px;font-size:14px}
.wr-prompt{padding:14px 14px 16px}
.wr-prompt-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.wr-chip{font-size:11.5px;color:var(--ink3);background:var(--line2);border-radius:5px;padding:0 7px;
  font-variant-numeric:tabular-nums}
.wr-prompt-act{margin-left:auto;display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.wr-mini{
  border:1.5px solid var(--line);background:#fff;color:var(--ink2);border-radius:999px;
  padding:3px 11px;font-size:13px;font-family:inherit;cursor:pointer;white-space:nowrap;
}
.wr-mini:active{transform:translateY(1px)}
.wr-prompt-text{font-size:14.5px;line-height:1.6;white-space:pre-wrap;color:var(--ink);
  -webkit-user-select:text;user-select:text}
/* 输入框字号 ≥16px:iOS 低于 16px 聚焦时会自动放大整页 */
.wr-prompt-input,.wr-body{
  display:block;width:100%;border:1.5px solid var(--line);border-radius:11px;background:#fff;color:var(--ink);
  padding:10px 12px;font-size:16px;line-height:1.6;font-family:inherit;resize:vertical;
}
.wr-prompt-input:focus,.wr-body:focus{outline:none;border-color:var(--theme)}
.wr-edit{padding:12px 12px 14px}
.wr-bar{display:flex;align-items:center;gap:10px;margin-bottom:8px;font-variant-numeric:tabular-nums}
.wr-timer{font-size:14px;font-weight:700;color:var(--theme)}
.wr-timer.idle{color:var(--ink3);font-weight:600}
.wr-timer.over{color:var(--red)}
.wr-count{margin-left:auto;font-size:15px;font-weight:700;color:var(--ink2)}
.wr-count.short{color:var(--orange)}
.wr-body{min-height:54vh;font-family:Georgia,"Times New Roman",serif;font-size:17px}
.wr-hint{min-height:20px;margin-top:6px;font-size:13px;color:var(--ink3)}
.wr-hint.short{color:var(--orange)}
.wr-hint.ok{color:var(--green)}
.wr-actions{margin:4px 0 14px}
.wr-note,.wr-guest{margin-top:8px;font-size:13px;color:var(--ink3);text-align:center}
.wr-guest{color:var(--orange);font-weight:650}
.wr-sent{text-align:center;padding:26px 16px}
.wr-sent-ttl{font-size:20px;font-weight:800;color:var(--green);margin-bottom:4px}
.wr-sent .sheet-row{justify-content:center}

.es-wait{border-left:4px solid var(--theme)}
.es-wait.bad{border-left-color:var(--red)}
.es-wait-ttl{font-weight:750;font-size:16.5px;margin-bottom:2px}
.es-wait .btn{margin-top:10px}
.es-score{display:flex;align-items:center;gap:14px}
.es-overall{flex:0 0 auto;text-align:center;min-width:84px}
.es-overall-n{font-size:44px;font-weight:800;line-height:1;color:var(--theme);font-variant-numeric:tabular-nums}
.es-overall-l{font-size:12.5px;color:var(--ink3);margin-top:4px}
.es-bands{flex:1 1 auto;display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.es-band{background:var(--theme-soft);border-radius:10px;padding:8px 2px;text-align:center}
.es-band-n{font-size:18px;font-weight:750;line-height:1.2;font-variant-numeric:tabular-nums}
.es-band-l{font-size:12px;color:var(--ink2)}
@media (max-width:400px){
  .es-score{flex-direction:column;align-items:stretch;gap:10px}
}
.es-h{font-weight:750;font-size:15px;margin-bottom:6px}
.es-summary{font-size:15px;line-height:1.7}
.es-issue{display:flex;gap:10px;padding:10px 0;border-top:1px solid var(--line2)}
.es-issue:first-of-type{border-top:0}
.es-cat{
  flex:0 0 auto;align-self:flex-start;margin-top:3px;font-size:11.5px;font-weight:700;border-radius:6px;
  padding:0 7px;background:var(--line2);color:var(--ink2);white-space:nowrap;
}
.es-cat-grammar{background:var(--red-soft);color:var(--red)}
.es-cat-lexical{background:var(--blue-soft);color:var(--blue)}
.es-cat-coherence{background:#efe9fc;color:var(--purple)}
.es-cat-task{background:var(--orange-soft);color:#c46a12}
.es-cat-register{background:var(--green-soft);color:var(--green)}
.es-issue-main{flex:1 1 auto;min-width:0;font-size:15px;line-height:1.55;overflow-wrap:anywhere}
.es-orig{display:block;color:var(--ink3);text-decoration-color:rgba(226,86,74,.7)}
.es-fix{font-weight:600;margin-top:2px}
.es-arrow{color:var(--green);font-weight:800}
.es-why{font-size:13px;color:var(--ink3);margin-top:3px;line-height:1.5}
.es-more{margin-top:4px;border-top:1px solid var(--line2)}
.es-more summary{cursor:pointer;padding:10px 0 4px;font-size:14px;font-weight:650;color:var(--theme)}
.es-check{margin:0;padding-left:20px;font-size:14.5px;line-height:1.6}
.es-check li{margin-bottom:4px}
.es-next{
  background:var(--theme-soft);border:1.5px solid var(--theme);border-radius:14px;
  padding:12px 14px;margin-bottom:14px;font-size:15px;line-height:1.6;
}
.es-next b{display:block;color:var(--theme);font-size:13.5px;margin-bottom:2px}
.es-text{white-space:pre-wrap;font-size:15px;line-height:1.7;padding:10px 0 14px;
  overflow-wrap:anywhere;-webkit-user-select:text;user-select:text}
.es-trend{padding:12px 14px 8px}
.es-trend-top{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.es-trend-top .es-h{margin:0}
.es-trend-svg{display:block;width:100%;height:auto;max-height:110px}
.es-trend-base{stroke:var(--line);stroke-width:1}
.es-trend-line{fill:none;stroke:var(--theme);stroke-width:2.2;stroke-linejoin:round;stroke-linecap:round}
.es-trend-dot{fill:#fff;stroke:var(--theme);stroke-width:1.8}
.es-trend-dot.last{fill:var(--theme)}
.es-trend-lbl{font-size:12px;font-weight:800;fill:var(--theme)}
.es-list{padding:4px 14px}
.es-row{display:flex;align-items:center;gap:10px;padding:12px 0;border-bottom:1px solid var(--line2)}
.es-row:last-child{border-bottom:0}
.es-row-date{flex:0 0 auto;width:40px;font-size:13px;color:var(--ink3);font-variant-numeric:tabular-nums}
.es-row-mid{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:6px}
.es-kind{flex:0 0 auto;font-size:11.5px;font-weight:700;border-radius:6px;padding:0 6px;
  background:var(--theme-soft);color:var(--theme)}
.es-kind.t2{background:var(--orange-soft);color:#c46a12}
.es-row-prompt{min-width:0;font-size:14.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.es-row-score{flex:0 0 auto;font-weight:800;font-size:16px;color:var(--theme);font-variant-numeric:tabular-nums}
.es-row-score.wait{font-size:12.5px;font-weight:650;color:var(--ink3)}
.es-row-score.bad{color:var(--red)}

/* ---------- 听力听写(SPEC-LISTEN §4) ---------- */
.ls-card-line{display:flex;justify-content:space-between;gap:8px;font-size:14.5px;font-weight:650;margin-top:10px}
.ls-card-due{color:var(--ink3);font-weight:600}
.ls-card-due.on{color:var(--orange)}
.ls-review-entry{display:flex;align-items:center;gap:10px;padding:13px 14px}
.ls-review-ttl{font-weight:750;font-size:16px;flex:0 0 auto}
.ls-review-sub{flex:1 1 auto;min-width:0;font-size:13px;color:var(--ink3)}
.ls-review-entry.on .ls-review-ttl{color:var(--orange)}
.ls-ch summary{display:flex;align-items:center;gap:8px}
.ls-ch-no{flex:0 0 auto;font-size:13px;color:var(--ink3);font-weight:700}
.ls-ch-name{flex:1 1 auto;min-width:0;font-weight:650;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ls-core{flex:0 0 auto;font-size:11px;font-weight:700;color:#fff;background:var(--theme);border-radius:999px;padding:0 8px}
.ls-ch-cnt{flex:0 0 auto;font-size:13px;color:var(--ink2);font-variant-numeric:tabular-nums}
.ls-tracks{padding:2px 0 6px}
.ls-trow{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--line2)}
.ls-trow:last-child{border-bottom:0}
.ls-trow-mid{flex:1 1 auto;min-width:0}
.ls-trow-ttl{font-size:15px;font-weight:600;overflow-wrap:anywhere}
.ls-trow-sub{font-size:12.5px;color:var(--ink3)}
.ls-trow-best{flex:0 0 auto;font-size:13px;color:var(--ink3);font-variant-numeric:tabular-nums}
.ls-trow.done .ls-trow-best{color:var(--theme);font-weight:700}
.ls-trow-best.full{color:var(--green) !important}
.ls-stat{font-size:14px;color:var(--ink2);margin-top:2px}
.ls-stat b{color:var(--theme)}
.ls-stat b.ok{color:var(--green)}
.ls-intro{font-size:14.5px;color:var(--ink2);padding:11px 14px}
/* 播放器吸在顶栏下面:手机上键盘弹起、页面上推时也看得见、点得着 */
.ls-sticky{position:sticky;top:52px;z-index:40;margin:0 -4px 12px}
@media (max-width:440px){.ls-sticky{top:45px}}
.ls-player{background:var(--card);border-radius:14px;box-shadow:var(--shadow-lg);padding:9px 11px 7px;
  border:1px solid var(--line)}
.ls-pl-row{display:flex;align-items:center;gap:8px}
.ls-pl-play{flex:0 0 auto;width:44px;height:44px;border-radius:50%;border:0;background:var(--theme);color:#fff;
  font-size:16px;cursor:pointer;font-family:inherit}
.ls-pl-btn{flex:0 0 auto;height:36px;border-radius:9px;border:1.5px solid var(--line);background:#fff;color:var(--ink2);
  font-size:13px;font-weight:700;padding:0 8px;cursor:pointer;font-family:inherit}
/* 进度条自己画:已播段主题色、未播段站点线色(浏览器默认的深灰和站里对不上)。--fill 由 JS 按进度写 */
.ls-pl-bar{flex:1 1 auto;min-width:0;height:28px;margin:0;background:transparent;cursor:pointer;
  -webkit-appearance:none;appearance:none}
.ls-pl-bar:focus{outline:none}
.ls-pl-bar::-webkit-slider-runnable-track{height:6px;border-radius:99px;
  background:linear-gradient(to right,var(--theme) var(--fill,0%),var(--line) var(--fill,0%))}
.ls-pl-bar::-moz-range-track{height:6px;border-radius:99px;background:var(--line)}
.ls-pl-bar::-moz-range-progress{height:6px;border-radius:99px;background:var(--theme)}
.ls-pl-bar::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;
  background:#fff;border:2.5px solid var(--theme);margin-top:-5px;box-shadow:0 1px 3px rgba(31,36,48,.2)}
.ls-pl-bar::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:#fff;border:2.5px solid var(--theme)}
.ls-pl-time{flex:0 0 auto;font-size:12.5px;color:var(--ink2);font-variant-numeric:tabular-nums;min-width:66px;text-align:right}
.ls-pl-rates{display:flex;align-items:center;gap:5px;margin-top:5px}
.ls-pl-lbl{font-size:12px;color:var(--ink3);margin-right:2px}
.ls-pl-rate{border:1px solid var(--line);background:#fff;color:var(--ink2);border-radius:999px;font-size:12.5px;
  padding:2px 10px;cursor:pointer;font-family:inherit;font-variant-numeric:tabular-nums}
.ls-pl-rate.on{background:var(--theme-soft);border-color:var(--theme);color:var(--theme);font-weight:700}
.ls-pl-seg{margin-left:auto;font-size:12px;color:var(--orange);font-weight:700}
.ls-note{font-size:13px;color:var(--ink3);margin:-4px 2px 10px}
.ls-items{display:flex;flex-direction:column;gap:8px}
.ls-items.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}
.ls-cell{background:var(--card);border-radius:11px;box-shadow:var(--shadow);padding:6px 8px;border:1.5px solid transparent;min-width:0}
.ls-cell.cur{border-color:var(--orange);background:var(--orange-soft)}
.ls-cell.ok{border-color:var(--green)}
.ls-cell.bad{border-color:var(--red);background:var(--red-soft)}
.ls-cell-row{display:flex;align-items:center;gap:6px}
.ls-cell-row + .ls-cell-row{margin-top:5px}
.ls-n{flex:0 0 auto;min-width:22px;font-size:13px;font-weight:800;color:var(--ink3);text-align:right;font-variant-numeric:tabular-nums}
.ls-qp{flex:1 1 auto;min-width:0;font-size:15px;line-height:1.5;overflow-wrap:anywhere}
.ls-in{flex:1 1 auto;min-width:0;width:100%;font-size:16px;font-family:inherit;padding:7px 9px;border:1.5px solid var(--line);
  border-radius:9px;background:#fff;color:var(--ink);outline:none}
.ls-in:focus{border-color:var(--theme)}
.ls-in[readonly]{background:transparent}
.ls-in.big{font-size:18px;padding:10px 12px;margin:12px 0}
.ls-spk{flex:0 0 auto;width:34px;height:34px;border:0;border-radius:8px;background:var(--theme-soft);font-size:15px;cursor:pointer;padding:0}
.ls-ans{font-size:13.5px;color:var(--red);font-weight:650;padding:3px 2px 0 28px;overflow-wrap:anywhere}
.ls-opts{display:flex;flex-direction:column;gap:4px;padding:4px 0 2px 28px}
.ls-opt{display:flex;align-items:flex-start;gap:8px;font-size:15px;line-height:1.45;cursor:pointer}
.ls-opt input{width:18px;height:18px;margin:2px 0 0;flex:0 0 auto;accent-color:var(--theme)}
.ls-foot{margin-top:16px}
.ls-res{background:var(--card);border-radius:14px;box-shadow:var(--shadow);padding:14px}
.ls-score{font-size:30px;font-weight:800;color:var(--orange);font-variant-numeric:tabular-nums}
.ls-score.full{color:var(--green)}
.ls-rv{padding:14px}
.ls-rv-src{font-size:13.5px;color:var(--ink2);margin-bottom:8px}
.ls-rv.ok{box-shadow:0 0 0 2px var(--green)}
.ls-rv.bad{box-shadow:0 0 0 2px var(--red)}
.ls-rv-fb{font-size:16px;font-weight:700;margin:-4px 0 12px}
.ls-rv.ok .ls-rv-fb{color:var(--green)}
.ls-rv.bad .ls-rv-fb{color:var(--red)}
.ls-rv-end{padding:16px}
.ls-trow.wip{opacity:.55}
.ls-cell.nograde{opacity:.6}

/* ---------- 外刊精读(SPEC-LISTEN §6) ---------- */
.rd-home{display:flex;align-items:center;gap:10px;padding:12px 14px}
.rd-home-tag{flex:0 0 auto;font-size:11.5px;font-weight:700;color:#fff;background:var(--green);border-radius:6px;padding:1px 7px}
.rd-home-mid{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;line-height:1.4}
.rd-home-mid b{font-size:15.5px}
.rd-home-sub{font-size:12.5px;color:var(--ink3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rd-book summary{display:flex;align-items:center;gap:8px}
.rd-sec{font-size:12.5px;font-weight:800;color:var(--theme);letter-spacing:.3px;margin:12px 0 0;text-transform:uppercase}
.rd-row{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--line2)}
.rd-row:last-child{border-bottom:0}
.rd-row-mid{flex:1 1 auto;min-width:0}
.rd-row-fly{font-size:15px;font-weight:700;overflow-wrap:anywhere}
.rd-row-hl{font-size:13px;color:var(--ink2);line-height:1.45;overflow-wrap:anywhere}
.rd-row-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;margin-top:3px;font-size:12px;color:var(--ink3)}
.rd-row-meta .dim{color:var(--ink3);opacity:.75}
.rd-row-best{flex:0 0 auto;font-size:13px;font-weight:700;color:var(--theme);font-variant-numeric:tabular-nums}
.rd-row-best.full{color:var(--green)}
.rd-tag{display:inline-block;font-size:11.5px;font-weight:700;border-radius:6px;padding:0 6px;
  background:var(--theme-soft);color:var(--theme);line-height:1.6}
.rd-tag.rd-note-tag{background:var(--green-soft);color:var(--green)}
.rd-tag.dim{background:var(--line2);color:var(--ink3)}
.rd-tag.rd-au-tag{background:var(--green-soft);color:var(--green)}
.rd-row-sec{font-weight:650;color:var(--ink2)}
/* #/read 列表:继续读 · 刊物分块 · 一期先露几篇 */
.rd-cont{padding:8px 14px 2px;margin-bottom:12px}
.rd-cont-ttl{font-size:13px;font-weight:800;color:var(--theme);margin-bottom:2px}
.rd-cont-row{display:flex;align-items:center;gap:10px;padding:6px 0;border-bottom:1px solid var(--line2)}
.rd-cont-row:last-child{border-bottom:0}
.rd-cont-mid{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;line-height:1.4}
.rd-cont-name{font-size:14.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rd-cont-name b{font-weight:700;color:var(--ink2)}
.rd-cont-sub{font-size:12px;color:var(--ink3)}
.rd-pub{margin-bottom:14px}
.rd-pub-head{display:flex;align-items:baseline;flex-wrap:wrap;gap:2px 10px;padding:2px 2px 6px}
.rd-pub-name{font-size:18px;font-weight:800;color:var(--ink)}
.rd-pub-date{font-size:12.5px;color:var(--ink3)}
.rd-pub-cnt{margin-left:auto;font-size:12.5px;color:var(--ink2);font-variant-numeric:tabular-nums}
.rd-pub .rd-book{margin-bottom:8px}
.rd-first .rd-row{padding:7px 0}
.rd-first .rd-row-meta{margin-top:1px;line-height:1.5}
.rd-pub .rd-book summary{padding:10px 0}
.rd-first .rd-row-fly{font-size:14.5px;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rd-more{display:block;width:100%;margin:0;padding:10px 0 12px;border:0;border-top:1px solid var(--line2);background:none;
  font:inherit;font-size:14px;font-weight:700;color:var(--theme);cursor:pointer;text-align:center}
.rd-rest{border-top:1px solid var(--line2);padding-bottom:6px}
.rd-rest-ttl{font-size:12.5px;color:var(--ink3);margin-top:10px}
.rd-rest .rd-row-sec{display:none}
.rd-kicker{font-size:12.5px;font-weight:800;color:var(--theme);text-transform:uppercase;letter-spacing:.4px}
.rd-h1{font-family:Georgia,"Times New Roman",serif}
.rd-rubric{font-size:15px;color:var(--ink2);line-height:1.5;margin-top:4px;font-family:Georgia,"Times New Roman",serif}
.rd-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;margin-top:6px;font-size:13px;color:var(--ink3)}
.rd-best{color:var(--theme);font-weight:700}
.rd-shadow{margin-left:6px}
.rd-cont{padding:3px 12px;font-size:13px}
.rd-body{background:var(--card);border-radius:16px;box-shadow:var(--shadow);padding:6px 16px;margin-bottom:14px}
.rd-p{font-family:Georgia,"Times New Roman",serif;font-size:17px;line-height:1.75;margin:12px 0;
  overflow-wrap:break-word;-webkit-user-select:text;user-select:text}
.rd-body.timed .rd-s{cursor:pointer;border-radius:4px;transition:background .15s}
.rd-body.timed .rd-s:hover{background:var(--line2)}
.rd-s.cur{background:var(--orange-soft) !important;box-shadow:0 0 0 2px var(--orange-soft)}
.rd-w{text-decoration:none;border-bottom:2px solid rgba(42,165,184,.55);cursor:pointer;padding-bottom:0}
.rd-w.col{border-bottom-style:dashed;border-bottom-color:rgba(240,140,46,.7)}
.rd-loop{display:inline-flex;align-items:center;justify-content:center;width:26px;height:22px;margin-left:4px;
  vertical-align:1px;border:1px solid var(--line);border-radius:7px;background:#fff;color:var(--ink2);
  font-size:13px;line-height:1;cursor:pointer;padding:0;font-family:inherit}
.rd-loop.on{background:var(--orange);border-color:var(--orange);color:#fff}
.rd-pop{position:absolute;z-index:80;background:#fff;border-radius:12px;box-shadow:var(--shadow-lg);
  border:1px solid var(--line);padding:10px 12px;font-size:14px;line-height:1.55}
.rd-pop-top{display:flex;align-items:baseline;gap:8px}
.rd-pop-top b{font-size:16px;overflow-wrap:anywhere}
.rd-pop-ipa{color:var(--ink3);font-size:13px;flex:1 1 auto}
.rd-pop-x{margin-left:auto;border:0;background:none;font-size:20px;line-height:1;color:var(--ink3);cursor:pointer;padding:0 2px}
.rd-pop-zh{font-weight:650;margin-top:2px}
.rd-pop-note{color:var(--ink2);font-size:13px;margin-top:4px}
.rd-fold-in{padding:8px 0 12px}
.rd-sum{font-size:15px;line-height:1.7}
.rd-hard{padding:9px 0;border-bottom:1px solid var(--line2)}
.rd-hard:last-child{border-bottom:0}
.rd-en{font-family:Georgia,"Times New Roman",serif;font-size:15.5px;line-height:1.6;margin-top:3px}
.rd-zh{font-size:14px;color:var(--ink);margin-top:3px}
.rd-para{font-size:14.5px;color:var(--theme);font-weight:650;margin-top:3px}
.rd-note{font-size:13px;color:var(--ink2);margin-top:3px}
.rd-quiz{display:flex;flex-direction:column;gap:10px}
.rd-q{padding:12px 14px;margin:0;border:1.5px solid transparent}
.rd-q.ok{border-color:var(--green)}
.rd-q.bad{border-color:var(--red)}
.rd-q-top{display:flex;gap:8px;align-items:baseline}
.rd-q-p{font-size:15.5px;line-height:1.55;overflow-wrap:anywhere}
.rd-opts{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.rd-opts.tfng{flex-direction:row}
.rd-opts.tfng .rd-opt{flex:1 1 0;text-align:center;padding:9px 4px}
.rd-opt{border:1.5px solid var(--line);background:#fff;color:var(--ink);border-radius:10px;padding:8px 11px;
  font-size:14.5px;line-height:1.45;text-align:left;cursor:pointer;font-family:inherit}
.rd-opt.on{border-color:var(--theme);background:var(--theme-soft);color:var(--theme);font-weight:700}
.rd-opt.right{border-color:var(--green);background:var(--green-soft);color:var(--green);font-weight:700}
.rd-q.bad .rd-opt.on{border-color:var(--red);background:var(--red-soft);color:var(--red)}
.rd-opt:disabled{cursor:default}
.rd-q .ls-in{margin-top:8px}
.rd-q-fb{margin-top:8px;font-size:14px}
.rd-q.ok .rd-q-fb b{color:var(--green)}
.rd-q.bad .rd-q-fb b{color:var(--red)}
.rd-why{color:var(--ink2);font-size:13.5px;margin-top:3px;line-height:1.6}
.rd-submit{margin-top:14px}
.rd-quiz + .ls-res{margin-top:14px}

/* ---------- 剑桥真题(SPEC-LISTEN §7) ---------- */
.rd-home-tag.cam{background:var(--purple)}
.cam-book summary{display:flex;align-items:center;gap:8px}
.cam-test{padding:10px 0 12px;border-bottom:1px solid var(--line2)}
.cam-test:last-child{border-bottom:0}
.cam-test-h{font-weight:800;font-size:15px;margin-bottom:6px}
.cam-line{display:flex;align-items:flex-start;gap:8px;margin-top:6px}
.cam-kind{flex:0 0 34px;font-size:12.5px;font-weight:700;color:var(--ink2);padding-top:7px}
.cam-chips{flex:1 1 auto;min-width:0;display:flex;flex-wrap:wrap;gap:6px}
.cam-chip{display:flex;flex-direction:column;min-width:72px;padding:5px 9px;border-radius:10px;border:1.5px solid var(--line);
  background:#fff;line-height:1.3}
.cam-chip b{font-size:13px}
.cam-chip span{font-size:11.5px;color:var(--ink3);font-variant-numeric:tabular-nums}
.cam-chip.done{border-color:var(--theme);background:var(--theme-soft)}
.cam-chip.done span{color:var(--theme);font-weight:700}
.cam-chip.full{border-color:var(--green);background:var(--green-soft)}
.cam-chip.full span{color:var(--green)}
.cam-chip.mock{border-style:dashed;border-color:var(--purple)}
.cam-chip.mock b{color:var(--purple)}
.cam-none{font-size:12.5px;color:var(--ink3);padding-top:7px}
.cam-parts{display:flex;gap:6px;margin-top:6px}
.cam-part{flex:1 1 0;border:1.5px solid var(--line);background:#fff;border-radius:9px;padding:4px 0;font-size:13px;
  font-weight:700;color:var(--ink2);cursor:pointer;font-family:inherit}
.cam-part.on{border-color:var(--theme);background:var(--theme-soft);color:var(--theme)}
.cam-timer{display:flex;align-items:center;gap:8px;margin-top:6px;font-size:14px;font-weight:800;color:var(--ink);
  font-variant-numeric:tabular-nums}
.cam-timer-b{border:1px solid var(--line);background:#fff;border-radius:8px;font-size:12.5px;padding:2px 10px;cursor:pointer;
  font-family:inherit;color:var(--ink2)}
.cam-timer.over .cam-timer-t{color:var(--red)}
.cam-timer.paused .cam-timer-t{color:var(--ink3)}
.cam-sticky .ls-player + .cam-timer{padding:0 4px}
.cam-sec{margin-bottom:8px}
.cam-script{margin-top:12px}
.cam-script.locked summary{color:var(--ink3)}
.cam-script-in{padding:6px 0 12px}
.cam-script-p{font-size:15px;line-height:1.75;margin:8px 0}
.cam-who{color:var(--theme)}
.cam-sent.hl{background:var(--orange-soft);box-shadow:0 0 0 2px var(--orange-soft);border-radius:4px}
.cam-band{display:flex;flex-direction:column;margin:4px 0 6px}
.cam-band b{font-size:20px;color:var(--purple)}
.cam-band span{font-size:12.5px;color:var(--ink3)}
.cam-model{margin-top:14px}
.cam-model.locked summary{color:var(--ink3)}
.cam-model-text{white-space:pre-wrap;font-family:Georgia,"Times New Roman",serif;font-size:15.5px;line-height:1.7}
.cam-model-h{font-weight:800;font-size:13.5px;margin-top:12px;color:var(--theme)}
.cam-model-c{white-space:pre-wrap;font-size:14px;color:var(--ink2);line-height:1.65}
/* 题组 */
.cq{display:flex;flex-direction:column;gap:12px}
.cq-group{background:var(--card);border-radius:14px;box-shadow:var(--shadow);padding:12px 14px}
.cq-group-h{font-size:13px;color:var(--theme);margin-bottom:4px}
.cq-instr{white-space:pre-wrap;font-size:13.5px;color:var(--ink2);line-height:1.55;margin-bottom:8px}
.cq-title{font-weight:800;font-size:15px;margin:6px 0}
.cq-caption{white-space:pre-wrap;font-size:13.5px;color:var(--ink2);background:var(--line2);border-radius:9px;padding:8px 10px;margin:6px 0}
.cq-fig img{max-width:100%;border-radius:8px;border:1px solid var(--line)}
.cq-fig-miss{font-size:12.5px;color:var(--ink3);margin:4px 0}
.cq-box{border:1.5px solid var(--line);border-radius:10px;padding:8px 10px;margin:8px 0}
.cq-box-ttl{font-weight:800;font-size:14px;margin-bottom:4px}
.cq-box-row{display:flex;gap:8px;font-size:14px;line-height:1.5;padding:2px 0}
.cq-box-row b{flex:0 0 auto;min-width:22px;color:var(--theme)}
.cq-list-ttl{font-weight:700;font-size:14px;margin:8px 0 2px}
.cq-text{font-size:15px;line-height:1.9}
.cq-line.head{font-weight:800;font-size:15.5px}
.cq-line.bullet{padding-left:4px}
.cq-line.arrow{text-align:center;color:var(--ink3)}
.cq-gapline{height:8px}
.cq-table-wrap{overflow-x:auto;margin:6px 0}
.cq-table{border-collapse:collapse;font-size:13.5px;line-height:1.6;min-width:100%}
.cq-table th,.cq-table td{border:1px solid var(--line);padding:5px 7px;vertical-align:top;text-align:left}
.cq-table th{background:var(--line2);font-weight:700}
.cq-slot{display:inline-flex;align-items:center;gap:3px;flex-wrap:wrap;vertical-align:middle;margin:1px 2px}
.cq-slot-n{font-size:11px;color:#fff;background:var(--theme);border-radius:5px;padding:0 5px;line-height:1.6}
.cq-in{width:9em;max-width:60vw;font-size:16px;font-family:inherit;padding:3px 7px;border:1.5px solid var(--line);
  border-radius:8px;background:#fff;color:var(--ink);outline:none}
.cq-in:focus{border-color:var(--theme)}
.cq-slot.ok .cq-in{border-color:var(--green);background:var(--green-soft)}
.cq-slot.bad .cq-in{border-color:var(--red);background:var(--red-soft)}
.cq-slot-fb{font-size:13px;color:var(--red);font-weight:700}
.cq-q{padding:9px 0;border-top:1px solid var(--line2)}
.cq-group-h + .cq-q,.cq-instr + .cq-q{border-top:0}
.cq-q-top{display:flex;gap:8px;align-items:baseline}
.cq-n{flex:0 0 auto;min-width:24px;font-size:13px;font-weight:800;color:var(--ink3);font-variant-numeric:tabular-nums}
.cq-q-p{flex:1 1 auto;min-width:0;font-size:15px;line-height:1.6;overflow-wrap:anywhere}
.cq-opts{display:flex;flex-direction:column;gap:6px;margin:7px 0 0 32px}
.cq-opts.tfng{flex-direction:row}
.cq-opts.tfng .cq-opt{flex:1 1 0;text-align:center;padding:8px 2px;font-size:13.5px}
.cq-opt{border:1.5px solid var(--line);background:#fff;color:var(--ink);border-radius:10px;padding:7px 11px;
  font-size:14.5px;line-height:1.45;text-align:left;cursor:pointer;font-family:inherit}
.cq-opt.on{border-color:var(--theme);background:var(--theme-soft);color:var(--theme);font-weight:700}
.cq-opt.right{border-color:var(--green);background:var(--green-soft);color:var(--green);font-weight:700}
.cq-opt.wrong,.cq-q.bad .cq-opt.on:not(.right){border-color:var(--red);background:var(--red-soft);color:var(--red)}
.cq-opt:disabled{cursor:default}
.cq-pick{font-size:12.5px;color:var(--ink3);margin:4px 0 0 32px}
.cq-sel{margin:7px 0 0 32px;max-width:calc(100% - 32px);font-size:16px;font-family:inherit;padding:6px 8px;
  border:1.5px solid var(--line);border-radius:9px;background:#fff;color:var(--ink)}
.cq-q.ok .cq-sel{border-color:var(--green)}
.cq-q.bad .cq-sel{border-color:var(--red)}
.cq-fb{margin:6px 0 0 32px;font-size:13.5px;color:var(--red);font-weight:700}
.cq-q.ok .cq-fb{color:var(--green)}
.cq-why{display:block;font-weight:400;color:var(--ink2);margin-top:2px}
.cq-sent{border:1px solid var(--line);background:#fff;border-radius:8px;font-size:12.5px;padding:1px 8px;margin-left:6px;
  cursor:pointer;color:var(--theme);font-family:inherit;font-weight:600}
/* 阅读:手机上下两个 tab,宽屏左文右题 */
.cr-bar{position:sticky;top:52px;z-index:40;display:flex;align-items:center;gap:6px;background:rgba(246,247,251,.96);
  padding:6px 0;margin-bottom:8px;backdrop-filter:blur(6px)}
@media (max-width:440px){.cr-bar,.cam-sticky{top:45px}}
.cr-tab{border:1.5px solid var(--line);background:#fff;border-radius:999px;padding:4px 14px;font-size:14px;font-weight:700;
  color:var(--ink2);cursor:pointer;font-family:inherit}
.cr-tab.on{border-color:var(--theme);background:var(--theme-soft);color:var(--theme)}
.cr-bar .cam-timer{margin:0 0 0 auto}
.cr-wrap.show-q .cr-text{display:none}
.cr-wrap.show-t .cr-qs{display:none}
.cr-passage{padding:14px 16px}
.cr-p-title{margin:0 0 4px;font-size:17px;font-family:Georgia,"Times New Roman",serif}
.cr-p-sub{font-size:14px;color:var(--ink2);font-style:italic;margin-bottom:6px}
.cr-para{font-family:Georgia,"Times New Roman",serif;font-size:16px;line-height:1.7;margin:10px 0;white-space:pre-wrap;
  -webkit-user-select:text;user-select:text}
.cr-label{display:inline-block;min-width:20px;margin-right:6px;font-family:inherit;color:var(--theme)}
@media (min-width:900px){
  .wrap.cr-wide{max-width:1180px}
  .cr-tab{display:none}
  .cr-wrap{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
  .cr-wrap .cr-pane{display:block !important;max-height:calc(100vh - 130px);overflow:auto;position:sticky;top:110px;padding-right:4px}
}
.cq-opts.letters{flex-direction:row;flex-wrap:wrap;gap:5px}
.cq-opts.letters .cq-opt{min-width:38px;text-align:center;padding:6px 0;font-weight:700}
.cq-cap-fold summary{font-size:12.5px;color:var(--ink3);cursor:pointer;margin:4px 0}

/* 词库页「跳过的词」 */
.skiplist { display: flex; flex-wrap: wrap; gap: 6px 10px; margin-top: 10px; }
.skiprow { display: inline-flex; align-items: center; gap: 6px; padding: 2px 4px 2px 10px; border: 1px solid var(--line, #e2e2e2); border-radius: 999px; }
.skiprow .btn.small { padding: 2px 8px; font-size: 12px; }

/* 首页任务卡:主攻词库总进度 */
.task-prog { margin: 2px 0 10px; }
.task-prog-txt { font-size: 12px; color: var(--muted, #7a8194); font-variant-numeric: tabular-nums; }
.task-prog .mbar { height: 5px; margin-top: 4px; }

/* 发音按钮 */
.spk { border: 0; background: transparent; cursor: pointer; font-size: 20px; line-height: 1; padding: 4px 6px; margin-left: 6px; vertical-align: middle; border-radius: 8px; }
.spk:hover, .spk:focus-visible { background: var(--line2, #f1f3f9); }
.spk.inline { font-size: 16px; padding: 2px 4px; margin-left: 4px; }
.vword { cursor: pointer; }

/* 禁掉下拉刷新:做听力/阅读时手一滑整页重载,答了一半的全没了(马欢 2026-09-25) */
html, body { overscroll-behavior-y: none; }

/* ---------- 做题草稿恢复提示 ---------- */
.dr-banner{display:flex;align-items:center;gap:10px;background:var(--green-soft);color:var(--green);border-radius:11px;
  padding:8px 12px;margin:-4px 0 12px;font-size:13.5px;font-weight:650}
.dr-banner span{flex:1 1 auto;min-width:0}
.dr-clear{flex:0 0 auto;border:1px solid var(--green);background:#fff;color:var(--green);border-radius:8px;
  font-size:12.5px;padding:3px 10px;cursor:pointer;font-family:inherit;font-weight:700}

/* 做题页「暂停 · 回头再做」+ 首页「没做完的」 */
.dr-pause { margin-top: 8px; border: 1px solid var(--line); background: var(--card); color: inherit; border-radius: 999px; padding: 4px 12px; font-size: 13px; cursor: pointer; }
.dr-home { padding: 12px 14px; }
.dr-home-ttl { font-size: 13px; color: var(--muted, #7a8194); margin-bottom: 6px; }
.dr-home-row { display: flex; align-items: center; gap: 8px; padding: 8px 0; border-top: 1px solid var(--line2, #f1f3f9); color: inherit; text-decoration: none; }
.dr-home-row:first-of-type { border-top: 0; }
.dr-home-name { flex: 1; min-width: 0; font-weight: 600; font-size: 14px; }
.dr-home-when { font-size: 12px; color: var(--muted, #7a8194); white-space: nowrap; }

/* 外刊:本句进度条(吸顶播放器下面一条细的) */
.rd-sbar { display: flex; align-items: center; gap: 8px; padding: 6px 12px; margin-top: 6px; background: var(--card); border-radius: 12px; box-shadow: var(--shadow); }
.rd-sbar-lbl { font-size: 12px; color: var(--muted, #7a8194); white-space: nowrap; }
.rd-sbar-in { flex: 1; min-width: 0; accent-color: var(--theme, var(--green)); height: 22px; }
.rd-sbar-t { font-size: 12px; color: var(--muted, #7a8194); font-variant-numeric: tabular-nums; white-space: nowrap; min-width: 64px; text-align: right; }
/* ---------- 题型图鉴 #/guide(docs/SPEC-GUIDE.md)---------- */
/* 颜色全走变量:深色跟随全站主题(assets/theme-dark.css) */
#app{--gd-paper:#fffdf8;--gd-paper-line:#e2dccd;--gd-paper-ink:#1d1d1f;--gd-soft:var(--theme-soft);
  --gd-gap:#fff3c4;--gd-gap-ink:#8a5a00;--gd-good:#e4f7ef;--gd-bad:#fdeceb}
.gd-entry-links{display:flex;flex-wrap:wrap;gap:7px;margin-top:10px}
.gd-chip{font-size:13.5px;font-weight:650;color:var(--theme);background:var(--theme-soft);
  border-radius:999px;padding:5px 12px}
.gd-deeplink{display:flex;align-items:center;gap:8px;margin-top:10px;padding:9px 12px;border-radius:12px;
  background:var(--card);border:1.5px dashed var(--theme);color:var(--theme);font-size:14.5px;font-weight:650}
.gd-deeplink-tag{flex:0 0 auto;font-size:11.5px;background:var(--theme);color:#fff;border-radius:6px;padding:1px 7px}
.gd-deeplink-main{flex:1 1 auto;min-width:0}
.gd-deeplink-go{flex:0 0 auto;font-size:18px;line-height:1}

.gd-hubcard{display:block;color:var(--ink)}
.gd-hubcard:active{transform:translateY(1px)}
.gd-hub-top{display:flex;align-items:baseline;gap:8px;margin-bottom:2px}
.gd-hub-title{flex:1 1 auto;font-size:18px;font-weight:750}
.gd-hub-min{flex:0 0 auto;font-size:12.5px;color:var(--ink3)}
.gd-hub-secs{display:flex;flex-wrap:wrap;gap:5px;margin-top:9px}
.gd-hub-sec{font-size:12px;color:var(--ink2);background:var(--line2);border-radius:6px;padding:1px 7px}

.gd-intro{font-size:15px;color:var(--ink2);background:var(--gd-soft);box-shadow:none}
.gd-intro b{color:var(--ink)}
.gd-toc{padding:14px 12px;scroll-margin-top:62px}
.gd-toc-h{font-size:13px;font-weight:700;color:var(--ink3);margin:0 4px 8px}
.gd-toc-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.gd-toc-item{display:flex;align-items:center;gap:6px;text-align:left;font-family:inherit;cursor:pointer;
  background:var(--line2);border:0;border-radius:10px;padding:8px 9px;color:var(--ink);font-size:13.5px;
  line-height:1.3;min-width:0}
.gd-toc-item:active{transform:translateY(1px)}
.gd-toc-n{flex:0 0 auto;width:19px;height:19px;border-radius:6px;background:var(--theme);color:#fff;
  font-size:11.5px;font-weight:700;text-align:center;line-height:19px}
.gd-toc-t{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;
  -webkit-line-clamp:2;-webkit-box-orient:vertical}
.gd-toc-item .gd-tag{display:none}
@media (min-width:600px){.gd-toc-grid{grid-template-columns:1fr 1fr 1fr}}
.gd-tag{flex:0 0 auto;font-size:11px;font-weight:700;color:var(--theme);background:var(--theme-soft);
  border-radius:6px;padding:1px 6px;letter-spacing:.3px}

.gd-sec{scroll-margin-top:62px;padding:16px 14px}
.gd-sec-h{display:flex;align-items:center;gap:8px;margin:0 0 6px;font-size:18px;line-height:1.35}
.gd-sec-n{flex:0 0 auto;width:26px;height:26px;border-radius:8px;background:var(--theme);color:#fff;
  font-size:14px;text-align:center;line-height:26px}
.gd-sec-t{flex:1 1 auto;min-width:0}
.gd-blk{margin-top:14px}
.gd-blk:first-of-type{margin-top:6px}
.gd-h{font-size:14.5px;margin:0 0 8px;color:var(--theme);letter-spacing:.5px;display:flex;align-items:center;gap:6px}
.gd-h::before{content:"";width:4px;height:15px;border-radius:2px;background:var(--theme)}
.gd-p{margin:0;font-size:15.5px}
.gd-p i,.gd-steps i,.gd-eg i,.gd-trap-p i,.gd-fb-why i,.gd-tip i{font-family:Georgia,"Times New Roman",serif;font-size:1.02em}
.gd-tip{background:var(--gd-soft);border-left:4px solid var(--theme);border-radius:0 10px 10px 0;
  padding:10px 12px;font-size:14.5px}
.gd-gap{display:inline-block;min-width:44px;padding:0 6px;margin:0 2px;border:1.5px solid var(--gd-gap-ink);
  border-radius:5px;background:var(--gd-gap);color:var(--gd-gap-ink);font:700 12.5px/1.45 -apple-system,sans-serif;
  text-align:center;vertical-align:1px}

/* 卷面:米白纸 + 衬线体,和讲解文字一眼分开 */
.gd-paper{background:var(--gd-paper);color:var(--gd-paper-ink);border:1px solid var(--gd-paper-line);
  border-radius:8px;padding:12px 12px 4px;font-family:Georgia,"Times New Roman",serif;font-size:15px;line-height:1.6;
  box-shadow:0 1px 0 var(--gd-paper-line)}
.gd-paper > *{margin-bottom:12px}
.gd-ins{font-style:italic;font-size:14px;border-bottom:1px solid var(--gd-paper-line);padding-bottom:9px}
.gd-show > *{margin-bottom:10px}
.gd-ptitle,.gd-box-title,.gd-notes-title,.gd-prompt-title{font-weight:700;text-align:center;margin-bottom:6px}
.gd-passage{border:1px solid var(--gd-paper-line);border-radius:6px;padding:10px 11px}
.gd-para{margin:0 0 8px}
.gd-para:last-child{margin-bottom:0}
.gd-plab{font-weight:700;margin-right:7px}
.gd-stmt,.gd-mcq-q{display:flex;gap:8px;margin-bottom:6px}
.gd-qn{flex:0 0 auto;min-width:22px;height:22px;border:1.5px solid currentColor;border-radius:4px;
  font:700 12.5px/19px -apple-system,sans-serif;text-align:center;margin-top:2px}
.gd-stmt-p{flex:1 1 auto}
.gd-optbox,.gd-summary,.gd-outline{border:1.5px solid var(--gd-paper-ink);padding:9px 11px}
.gd-optrow{display:flex;gap:9px}
.gd-ol{flex:0 0 auto;min-width:22px;font-weight:700}
.gd-summary p{margin:0}
.gd-mcq-o{padding-left:30px;text-indent:-0px}
.gd-flow{display:flex;flex-direction:column;align-items:stretch}
.gd-fbox{border:1.5px solid var(--gd-paper-ink);border-radius:4px;padding:8px 10px;text-align:center;background:var(--gd-paper)}
.gd-farrow{height:24px;position:relative}
.gd-farrow::before{content:"";position:absolute;left:50%;top:2px;bottom:7px;border-left:2px solid var(--gd-paper-ink)}
.gd-farrow::after{content:"";position:absolute;left:calc(50% - 6px);bottom:1px;border:6px solid transparent;
  border-top:8px solid var(--gd-paper-ink);border-bottom:0}
.gd-tablescroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.gd-table{border-collapse:collapse;width:100%;font-size:14px;line-height:1.45}
.gd-table th,.gd-table td{border:1px solid var(--gd-paper-line);padding:6px 7px;text-align:left;vertical-align:top}
.gd-table th{background:rgba(127,127,127,.1);font-weight:700}
.gd-table td:first-child{min-width:4.2em}
.gd-show .gd-table{font-family:inherit;font-size:13.5px}
.gd-show .gd-table th,.gd-show .gd-table td{border-color:var(--line)}
.gd-show .gd-box-title{text-align:left;font-size:14px;color:var(--ink2)}
.gd-notes{border:1.5px solid var(--gd-paper-ink);padding:9px 11px}
.gd-nl.h{font-weight:700;margin-top:4px}
.gd-nl.i1{padding-left:18px}
.gd-nl.i2{padding-left:36px}
.gd-figure{text-align:center}
.gd-svg svg{width:100%;max-width:400px;height:auto;display:block;margin:0 auto}
.gd-svg .ft{font:600 11px -apple-system,sans-serif;fill:var(--gd-paper-ink)}
.gd-svg .f-t-room{font-size:17px;font-weight:800}
.gd-svg .f-t-given{font-size:12px;font-weight:700}
.gd-svg .f-t-small{font-size:10.5px;font-weight:600}
.gd-svg .f-t-dim{font-size:12px;fill:#8b93a7;letter-spacing:1px}
.gd-svg .f-t-vert{font-size:10.5px;fill:#8b93a7;letter-spacing:2px}
.gd-svg .f-t-blank{font-size:12px;font-weight:800;fill:var(--gd-gap-ink)}
.gd-svg .f-room{fill:var(--gd-paper);stroke:var(--gd-paper-ink);stroke-width:1.5}
.gd-svg .f-given{fill:rgba(127,127,127,.16);stroke:var(--gd-paper-ink);stroke-width:1.2}
.gd-svg .f-wall{fill:none;stroke:var(--gd-paper-ink);stroke-width:2}
.gd-svg .f-road{fill:rgba(127,127,127,.1);stroke:none}
.gd-svg .f-roof{fill:rgba(180,90,60,.18);stroke:var(--gd-paper-ink);stroke-width:2}
.gd-svg .f-water{fill:rgba(59,127,245,.16);stroke:var(--gd-paper-ink);stroke-width:1.5}
.gd-svg .f-part{fill:#9aa3b5;stroke:var(--gd-paper-ink);stroke-width:1}
.gd-svg .f-pipe{fill:#b9c0cf;stroke:var(--gd-paper-ink);stroke-width:1}
.gd-svg .f-door{fill:var(--gd-paper);stroke:none}
.gd-svg .f-line{stroke:var(--gd-paper-ink);stroke-width:1;stroke-dasharray:3 2}
.gd-svg .f-blank{fill:var(--gd-gap);stroke:var(--gd-gap-ink);stroke-width:1.5}
.gd-svg .f-compass{fill:var(--gd-paper-ink)}
.gd-script{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC",sans-serif;font-size:14.5px;
  background:rgba(127,127,127,.08);border-radius:8px;padding:8px 10px}
.gd-script summary{cursor:pointer;font-weight:700;color:var(--theme);font-size:14px}
.gd-sl{display:flex;gap:8px;margin-top:7px;font-family:Georgia,"Times New Roman",serif}
.gd-who{flex:0 0 auto;min-width:64px;font:700 12px/1.9 -apple-system,sans-serif;color:var(--ink3)}
.gd-prompt{border:1.5px solid var(--gd-paper-ink);padding:9px 12px}
.gd-prompt p{margin:0 0 4px}
.gd-prompt p.bl{padding-left:14px}
.gd-letter{border-left:3px solid var(--gd-paper-line);padding:2px 0 2px 12px}
.gd-letter p{margin:0 0 8px}
.gd-outline{font-family:inherit;border-color:var(--line);border-radius:10px;border-width:1px;background:var(--card)}
.gd-outline .gd-box-title{text-align:left;font-size:14px;color:var(--ink2)}
.gd-ol-row{display:flex;gap:9px;padding:7px 0;border-top:1px dashed var(--line);font-size:14.5px}
.gd-ol-row:first-of-type{border-top:0}
.gd-ol-h{flex:0 0 86px;font-weight:700;color:var(--theme);font-size:13px;line-height:1.7}
.gd-ol-p{flex:1 1 auto;min-width:0}
.gd-paper .gd-outline{background:transparent}
.gd-dialog{display:flex;flex-direction:column;gap:8px}
.gd-dl{border-radius:10px;padding:7px 10px;background:rgba(127,127,127,.08)}
.gd-dl.ex{background:transparent;padding-left:2px;padding-right:2px}
.gd-dl.good{background:var(--gd-good);border-left:4px solid var(--green)}
.gd-dl.bad{background:var(--gd-bad);border-left:4px solid var(--red)}
.gd-dl-who{font:700 12px/1.6 -apple-system,sans-serif;color:var(--ink3);display:flex;gap:7px;align-items:center}
.gd-dl-tone{font-size:11.5px;border-radius:5px;padding:0 6px;color:#fff}
.gd-dl.good .gd-dl-tone{background:var(--green)}
.gd-dl.bad .gd-dl-tone{background:var(--red)}
.gd-cue{border:2px solid var(--gd-paper-ink);border-radius:4px;padding:12px 14px;max-width:340px;margin:0 auto 12px}
.gd-cue-title{font-weight:700;margin-bottom:6px}
.gd-cue-l.sub{padding-left:16px}
.gd-cue-l.sub::before{content:"– "}
.gd-tl{position:relative;padding-left:4px}
.gd-tli{display:flex;gap:10px;position:relative;padding-bottom:12px}
.gd-tli::before{content:"";position:absolute;left:5px;top:20px;bottom:0;border-left:2px dashed var(--line)}
.gd-tli:last-child::before{display:none}
.gd-tlt{flex:0 0 84px;font-size:12.5px;font-weight:700;color:var(--theme);padding-left:18px;position:relative;line-height:1.5}
.gd-tlt::before{content:"";position:absolute;left:0;top:4px;width:12px;height:12px;border-radius:50%;
  background:var(--theme);box-shadow:0 0 0 3px var(--theme-soft)}
.gd-tlb{flex:1 1 auto;min-width:0}
.gd-tlh{font-weight:750;font-size:15px;line-height:1.5}
.gd-tlp{font-size:14px;color:var(--ink2)}
.gd-note{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC",sans-serif;font-size:13.5px;color:var(--ink2)}

.gd-steps{margin:0;padding-left:22px}
.gd-steps li{margin-bottom:7px;font-size:15px}
.gd-steps li::marker{color:var(--theme);font-weight:700}
.gd-trap{border:1px solid var(--line);border-radius:12px;padding:9px 11px;margin-bottom:8px}
.gd-trap-t{font-weight:750;color:var(--orange);font-size:15px}
.gd-trap-p{font-size:14.5px}
.gd-eg{margin-top:5px;font-size:14px;color:var(--ink2);background:var(--line2);border-radius:8px;padding:6px 9px}

.gd-try{border:1.5px solid var(--theme);border-radius:13px;padding:11px 12px;margin-bottom:10px;background:var(--card)}
.gd-try-q{font-weight:650;margin-bottom:9px;font-size:15.5px}
.gd-opt{display:block;width:100%;text-align:left;background:var(--card);border:1.5px solid var(--line);
  border-radius:11px;padding:10px 12px;margin-bottom:8px;font:inherit;font-size:15px;color:var(--ink);cursor:pointer;line-height:1.45}
.gd-opt:active{transform:scale(.995)}
.gd-opt.picked{border-color:var(--theme);background:var(--theme-soft)}
.gd-opt.right{border-color:var(--green);background:var(--green-soft)}
.gd-opt.wrong{border-color:var(--red);background:var(--red-soft)}
.gd-opt.locked{cursor:default}
.gd-try-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.gd-try-hint{flex:1 1 auto;font-size:13.5px;color:var(--ink2)}
.gd-input{flex:1 1 150px;min-width:0;font:16px Georgia,"Times New Roman",serif;padding:9px 11px;border-radius:10px;
  border:1.5px solid var(--line);background:var(--card);color:var(--ink)}
.gd-input:focus{outline:none;border-color:var(--theme)}
.gd-shake{animation:gdshake .35s}
@keyframes gdshake{25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}
.gd-fb{margin-top:10px;border-radius:10px;padding:9px 11px;font-size:14.5px}
.gd-fb.ok{background:var(--green-soft)}
.gd-fb.no{background:var(--red-soft)}
.gd-fb-top{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline;margin-bottom:4px}
.gd-fb.ok .gd-fb-top b{color:var(--green)}
.gd-fb.no .gd-fb-top b{color:var(--red)}
.gd-fb-note{font-size:13.5px;color:var(--ink2)}
.gd-again{margin-top:7px;background:none;border:0;padding:0;color:var(--theme);font:inherit;font-size:13.5px;
  font-weight:650;cursor:pointer}
.gd-pager{display:flex;gap:9px;margin:4px 0 10px}
.gd-pager .btn{flex:1 1 0;text-align:center}
.gd-up{position:fixed;right:14px;bottom:18px;z-index:40;border:0;border-radius:999px;padding:9px 14px;
  background:var(--theme);color:#fff;font:700 13.5px -apple-system,sans-serif;box-shadow:var(--shadow-lg);cursor:pointer}

/* 多语种单词卡(docs/SPEC-VOCAB-LANGS.md §5):性别小标签、韩语汉字词、德语复数 */
.vgender{font-size:11.5px;font-weight:700;border-radius:6px;padding:1px 6px;line-height:1.5}
.vgender.g-m{background:#e6effb;color:#2c64b0}
.vgender.g-f{background:#fbe8ef;color:#b53a67}
.vgender.g-n{background:#ecefe9;color:#5a6b4d}
.vhanja{color:var(--ink3);font-size:13px}
.vplural{flex-basis:100%;text-align:center;color:var(--ink2);font-size:13.5px}
.gi-i-dao-korean{--gi:url(icons/dao-japanese.svg)}
.gi-i-dao-french{--gi:url(icons/dao-english.svg)}
.gi-i-dao-german{--gi:url(icons/dao-english.svg)}
.gi-i-dao-spanish{--gi:url(icons/dao-english.svg)}

/* 「今天的任务」主攻词库「换 ›」:原地展开,按语种分组列出所有词库和进度 */
.task-bswitch{font-size:12.5px;font-weight:600;margin-left:2px}
.task-bpick{
  display:flex;flex-direction:column;gap:4px;margin:8px 0 10px;
  padding:8px;border-radius:12px;background:var(--line2);max-height:360px;overflow-y:auto;
}
.task-bgroup{font-size:12px;color:var(--ink3);font-weight:700;margin:6px 4px 2px}
.task-bgroup:first-child{margin-top:0}
.task-bopt{
  display:grid;grid-template-columns:1fr auto;align-items:center;gap:3px 10px;text-align:left;
  padding:8px 10px;border-radius:10px;border:1.5px solid var(--line);background:#fff;cursor:pointer;
  font:inherit;color:var(--ink);
}
.task-bopt.on{border-color:var(--theme)}
.task-bname{font-size:14px;font-weight:600}
.task-bopt.on .task-bname::after{content:" · 当前";color:var(--theme);font-weight:700;font-size:12px}
.task-bnum{font-size:12px;color:var(--ink3);font-variant-numeric:tabular-nums}
.task-bbar{grid-column:1 / -1;height:4px;border-radius:2px;background:var(--line2);overflow:hidden}
.task-bbar i{display:block;height:100%;background:var(--theme)}
.task-breset{align-self:center;margin-top:4px;font-size:12.5px}

/* 语法 / 搭配两行(docs/SPEC-DRILL.md §4):紧跟主卡,一行 = 进度环 + 名字小字 + 开始。只用 token,深色自动跟上 */
.task.drills{gap:0;padding:6px 16px;border-top-color:var(--purple)}
.drill{--dc:var(--purple)}
.drill-colloc{--dc:var(--orange)}
.drill + .drill{border-top:1px solid var(--line2)}
.drill-row{display:flex;align-items:center;gap:12px;padding:10px 0}
.drill-ring{
  flex:0 0 auto;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;
  background:conic-gradient(var(--dc) calc(var(--p, 0) * 1%), var(--line2) 0);
}
.drill-ring.ok{--dc:var(--green)}
.drill-ring b{
  width:34px;height:34px;border-radius:50%;background:var(--card);display:grid;place-items:center;
  font-size:13px;font-weight:800;color:var(--dc);font-variant-numeric:tabular-nums;
}
.drill-mid{flex:1 1 auto;min-width:0}
.drill-name{font-size:16px;font-weight:800;color:var(--ink)}
.drill-sub{font-size:12.5px;color:var(--ink2);margin-top:3px;line-height:1.45}
.drill-go{flex:0 0 auto;background:var(--dc);min-width:72px;min-height:42px;font-size:15px;font-weight:800;border-radius:12px}
.drill .task-qpick,.drill .task-bpick{margin:0 0 10px}
.vlang-sec{font-size:13px;color:var(--ink3);font-weight:700;margin:14px 2px 8px}

/* ---------- 复盘库 / 学习日志 ---------- */
.rd-home-tag.jn{background:var(--orange)}
.jn-home{display:flex;align-items:center;gap:8px}
.jn-home-main{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:10px}
.jn-home-log{flex:0 0 auto;font-size:13px;font-weight:700;color:var(--theme);padding:6px 2px 6px 8px;border-left:1px solid var(--line2)}
.jn-due{padding:10px 14px}
.jn-due-row{display:flex;align-items:center;gap:10px}
.jn-due-row + .jn-due-row{margin-top:6px}
.jn-due-t{flex:1 1 auto;min-width:0;font-size:14px;font-weight:650}
.jn-note{display:block;padding:13px 15px}
.jn-note-top{display:flex;align-items:center;gap:8px;margin-bottom:4px}
.jn-kind{font-size:11.5px;font-weight:700;border-radius:6px;padding:0 7px;background:var(--orange-soft);color:#c46a12}
.jn-date{font-size:12.5px;color:var(--ink3);font-variant-numeric:tabular-nums}
.jn-note-ttl{font-weight:750;font-size:16px;line-height:1.45}
.jn-note-sum{font-size:13.5px;color:var(--ink2);margin-top:3px;line-height:1.6}
.jn-note-cards{font-size:13px;color:var(--theme);font-weight:700;margin-top:6px}
.jn-cards{padding:11px 14px}
.jn-cards-t{font-size:14px}
.jn-cards-t span{color:var(--ink2)}
.jn-cards .sheet-row{margin-top:8px}
.jn-frame{display:block;width:100%;border:0;border-radius:14px;background:#fff;box-shadow:var(--shadow);min-height:400px;margin-bottom:14px}
.jn-days{padding:4px 14px}
.jn-day{display:flex;align-items:center;gap:10px;padding:11px 0;border-bottom:1px solid var(--line2)}
.jn-day:last-child{border-bottom:0}
.jn-day-d{flex:0 0 auto;font-weight:700;font-size:14.5px}
.jn-day-s{flex:1 1 auto;min-width:0;text-align:right;font-size:12.5px;color:var(--ink3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.jn-tools{margin:-4px 0 12px}
.jn-sec{padding:12px 14px}
.jn-sec-h{display:flex;align-items:baseline;gap:8px;margin-bottom:4px}
.jn-sec-h b{font-size:15.5px}
.jn-sec-h span{margin-left:auto;font-size:13px;font-weight:700;color:var(--theme)}
.jn-line{font-size:14.5px;font-weight:650}
.jn-row{display:flex;align-items:baseline;gap:10px;padding:7px 0;border-bottom:1px solid var(--line2);font-size:14px}
.jn-row:last-child{border-bottom:0}
.jn-row span{flex:1 1 auto;min-width:0;overflow-wrap:anywhere}
.jn-row b{flex:0 0 auto;font-size:13px;color:var(--theme);font-variant-numeric:tabular-nums}
.jn-sec .jn-due{box-shadow:none;background:var(--line2);margin:10px 0 0;border-radius:10px}
.jn-words{margin-top:8px}
.jn-words summary{font-size:13.5px;font-weight:700;color:var(--ink2);cursor:pointer}
.jn-words-in{display:grid;grid-template-columns:1fr;gap:1px;margin-top:6px;max-height:420px;overflow:auto}
.jn-word{display:flex;gap:10px;font-size:13.5px;line-height:1.5;padding:2px 0}
.jn-word b{flex:0 0 auto;min-width:92px;font-weight:700}
.jn-word span{color:var(--ink2);min-width:0;overflow-wrap:anywhere}
.jn-task{font-size:14px;color:var(--ink2);padding:2px 0}
.jn-task.ok{color:var(--green)}

/* ---------- 学习日历 ---------- */
.cal-sum{font-size:14px;font-weight:700;color:var(--theme)}
.cal{padding:10px 10px 12px}
.cal-nav{display:flex;align-items:center;justify-content:space-between;margin:0 2px 8px}
.cal-month{font-size:16px}
.cal-arrow{display:inline-flex;align-items:center;justify-content:center;width:36px;height:32px;border-radius:9px;
  border:1px solid var(--line);font-size:20px;color:var(--ink2);background:#fff}
.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}
.cal-wd{text-align:center;font-size:12px;color:var(--ink3);font-weight:700;padding-bottom:2px}
.cal-cell{position:relative;display:block;aspect-ratio:1/1.08;border-radius:9px;background:var(--line2);min-width:0}
.cal-cell.blank{background:transparent}
.cal-cell.future{opacity:.45}
.cal-cell.l1{background:#d8f0f3}
.cal-cell.l2{background:#a9dde4}
.cal-cell.l3{background:#63c1cd}
.cal-cell.l4{background:#2a97a8}
.cal-cell.l3 .cal-d,.cal-cell.l4 .cal-d{color:#fff}
.cal-cell.today{box-shadow:0 0 0 2px var(--orange);z-index:1}
.cal-d{position:absolute;left:5px;top:3px;font-size:12.5px;font-weight:800;color:var(--ink);font-variant-numeric:tabular-nums}
.cal-marks{position:absolute;right:4px;top:4px;display:flex;gap:2px;align-items:center}
.cal-note{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--orange)}
.cal-draft{font-style:normal;font-size:10px;line-height:1;color:var(--purple);background:#fff;border-radius:4px;padding:1px 2px}
.cal-ring{position:absolute;right:3px;bottom:3px;width:17px;height:17px}
.cal-ring-bg{fill:#fff;stroke:rgba(31,36,48,.18);stroke-width:2.6}
.cal-ring-arc{fill:none;stroke:var(--orange);stroke-width:2.6;stroke-linecap:round}
.cal-ring-fill{fill:var(--green);stroke:#fff;stroke-width:1.2}
.cal-ring-check{fill:none;stroke:#fff;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.cal-legend{display:flex;flex-wrap:wrap;align-items:center;gap:4px 5px;margin-top:10px;font-size:11.5px;color:var(--ink3)}
.cal-sw{display:inline-block;width:12px;height:12px;border-radius:3px}
.cal-sw.l1{background:#d8f0f3}.cal-sw.l2{background:#a9dde4}.cal-sw.l3{background:#63c1cd}.cal-sw.l4{background:#2a97a8}
.cal-lg-sep{margin-left:8px;display:inline-flex;align-items:center;gap:3px}
.jn-daynav{display:flex;align-items:center;gap:8px}
.jn-daynav h1{flex:1 1 auto;text-align:center;font-size:20px}
.jn-daynav-a{flex:0 0 58px;font-size:13.5px;font-weight:700;color:var(--theme);padding:6px 0}
.jn-daynav-a:last-child{text-align:right}
.jn-daynav-a.off{visibility:hidden}
.jn-ptask{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid var(--line2)}
.jn-ptask:last-child{border-bottom:0}
.jn-ptask-st{flex:0 0 18px;font-weight:800;color:var(--ink3);text-align:center}
.jn-ptask.ok .jn-ptask-st{color:var(--green)}
.jn-ptask-mid{flex:1 1 auto;min-width:0}
.jn-ptask-what{font-size:14px;line-height:1.45;overflow-wrap:anywhere}
.jn-ptask.ok .jn-ptask-what{color:var(--ink2)}
.jn-ptask-how{font-size:12px;color:var(--ink3)}
.jn-redo{flex:0 0 auto;font-size:13px;font-weight:700;color:#fff;background:var(--theme);border:0;border-radius:8px;padding:4px 10px;
  cursor:pointer;font-family:inherit}
.jn-check{flex:0 0 auto;font-size:12.5px;border:1.5px solid var(--line);background:#fff;border-radius:8px;padding:3px 9px;cursor:pointer;
  font-family:inherit;color:var(--ink2)}
.jn-check.on{border-color:var(--green);color:var(--green)}
.jn-draft span{font-size:14px}

/* 首页「我的课程」紧凑版:可折叠的小方块,底色从左往右按进度填充 */
.ctiles-fold { margin: 14px 0 6px; }
.ctiles-sum { cursor: pointer; font-size: 14px; font-weight: 600; color: var(--ink2); padding: 6px 2px; list-style: none; }
.ctiles-sum::-webkit-details-marker { display: none; }
.ctiles-sum::before { content: "▸ "; color: var(--ink3); }
.ctiles-fold[open] .ctiles-sum::before { content: "▾ "; }
.ctiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: 8px; margin-top: 6px; }
.ctile { position: relative; display: flex; flex-direction: column; justify-content: space-between; gap: 4px; min-height: 56px; padding: 8px 10px; border-radius: 12px; text-decoration: none; color: var(--ink);
  border: 1px solid var(--line);
  background: linear-gradient(90deg, color-mix(in srgb, var(--theme) 22%, var(--card)) var(--p), var(--card) var(--p)); }
.ctile-name { font-size: 13px; font-weight: 600; line-height: 1.2; }
.ctile-pct { font-size: 12px; color: var(--ink2); font-variant-numeric: tabular-nums; }
/* ---------- 剑桥听力精听 ---------- */
.cam-chip .cam-jt{margin-top:3px;font-size:11.5px;font-weight:700;color:var(--purple);align-self:flex-start;
  border-top:1px dashed var(--line);padding-top:2px;width:100%}
div.cam-chip{cursor:pointer}
.jt-parts{margin:-4px 0 10px}
.jt-parts .cam-part{text-align:center;display:block}
.jt-spoil{flex-wrap:wrap;background:var(--orange-soft);color:#b45309}
.jt-spoil .dr-clear{border-color:#d97706;color:#b45309}
.jt-bar{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 10px}
.jt-btn{border:1.5px solid var(--line);background:#fff;color:var(--ink2);border-radius:999px;padding:3px 12px;font-size:13px;
  font-weight:700;cursor:pointer;font-family:inherit}
.jt-btn.on{border-color:var(--theme);background:var(--theme-soft);color:var(--theme)}
.jt-bar-tip{font-size:12px;color:var(--ink3);margin-left:auto}
.jt-body{font-family:inherit}
.jt-para{font-size:16.5px;line-height:1.85;margin:10px 0;padding-left:0}
.jt-para.has-who{border-left:3px solid var(--who,var(--line));padding-left:10px}
.jt-who{display:block;font-size:12.5px;letter-spacing:.3px;line-height:1.4;margin-bottom:1px}
.jt-body .rd-s{border-radius:4px}
.jt-txt{transition:color .15s}
/* 盲听:没揭开的句子文字透明,底下一条灰条;揭开的正常显示 */
.jt-body.blind .rd-s:not(.rev) .jt-txt{color:transparent;background:repeating-linear-gradient(180deg,transparent 0 .35em,#dfe3ea .35em 1.35em,transparent 1.35em 1.85em);
  -webkit-user-select:none;user-select:none;border-radius:4px}
.jt-body.blind .rd-s:not(.rev) mark.jt-hl{background:transparent;color:transparent}
.jt-body.blind .rd-s.cur:not(.rev) .jt-txt{background:repeating-linear-gradient(180deg,transparent 0 .35em,#fcd9b0 .35em 1.35em,transparent 1.35em 1.85em)}
.jt-eye{display:none;margin-left:4px;vertical-align:1px;border:1px solid var(--line);background:#fff;color:var(--ink3);border-radius:7px;
  font-size:11.5px;line-height:1.5;padding:0 6px;cursor:pointer;font-family:inherit}
.jt-body.blind .jt-eye{display:inline-block}
.jt-body.blind .rd-s.rev .jt-eye{color:var(--ink3);opacity:.7}
.jt-q{display:inline-block;margin-right:4px;vertical-align:1px;border:0;border-radius:6px;background:var(--purple);color:#fff;
  font-size:11px;font-weight:800;line-height:1.6;padding:0 6px;cursor:pointer;font-family:inherit}
mark.jt-hl{background:#fde68a;color:inherit;border-radius:3px;padding:0 1px}
.jt-body .rd-s.jt-hl-all .jt-txt{background:#fef3c7}
.jt-body.blind .rd-s.jt-hl-all:not(.rev) .jt-txt{background:repeating-linear-gradient(180deg,transparent 0 .35em,#dfe3ea .35em 1.35em,transparent 1.35em 1.85em)}
.jt-pop-q{font-size:14px;line-height:1.55;margin:4px 0 6px;white-space:pre-wrap}
.jt-pop-row{font-size:13.5px;font-weight:700;margin-top:3px}
.jt-pop-row.ok{color:var(--green)}
.jt-pop-row.bad{color:var(--red)}
.jt-pop-row.ans{color:var(--theme)}
.jt-foot{margin:14px 0}
.jt-entry{margin-top:8px}

/* 外刊盲听:没揭开的句子文字透明、底下灰条(和剑桥精听同一种样子),当前句的灰条换成橙色 */
.rd-body.blind:not(.jt-body) .rd-s:not(.rev){color:transparent;-webkit-user-select:none;user-select:none;
  background:repeating-linear-gradient(180deg,transparent 0 .35em,var(--line) .35em 1.35em,transparent 1.35em 1.85em)}
.rd-body.blind:not(.jt-body) .rd-s:not(.rev) u.rd-w{text-decoration:none;color:transparent;border-bottom-color:transparent}
.rd-body.blind:not(.jt-body) .rd-s.cur:not(.rev){background:repeating-linear-gradient(180deg,transparent 0 .35em,var(--orange-soft) .35em 1.35em,transparent 1.35em 1.85em)}
.rd-blindbtn.hidden{display:none}
.rd-blindbtn{white-space:nowrap}
.ls-pl-rates:has(.rd-blindbtn){flex-wrap:wrap;row-gap:6px}

/* ---------- 单词本:选中查词气泡 / 右下角「+词」/ 录入抽屉 / 单词本页(docs/SPEC-WORDBOOK.md)---------- */
/* 只用变量,深色主题不用另写 */
.wb-pop{position:absolute;z-index:260;background:var(--card);color:var(--ink);border:1px solid var(--line);
  border-radius:12px;box-shadow:var(--shadow-lg);padding:10px 12px 10px;font-size:14.5px;line-height:1.55}
.wb-pop .wb-x{position:absolute;top:4px;right:6px}
.wb-x{border:0;background:none;font-size:22px;line-height:1;color:var(--ink3);cursor:pointer;padding:2px 6px;font-family:inherit}
.wb-top{display:flex;align-items:baseline;flex-wrap:wrap;gap:2px 8px;padding-right:22px}
.wb-w{font-size:17px;overflow-wrap:anywhere}
.wb-ipa{color:var(--ink3);font-size:13px}
.wb-zh{margin-top:4px;font-weight:600}
.wb-zh > div + div{margin-top:2px}
.wb-pos{font-style:normal;color:var(--ink3);font-weight:500;margin-right:5px;font-size:13px}
.wb-ex{margin-top:6px;padding:6px 8px;background:var(--line2);border-radius:8px;font-size:13.5px}
.wb-ex-zh{color:var(--ink2);font-size:12.5px;margin-top:1px}
.wb-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px}
.wb-src{color:var(--ink3);font-size:12px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wb-add{flex:0 0 auto;border:1.5px solid var(--blue);background:var(--blue);color:#fff;border-radius:999px;
  padding:5px 13px;font:inherit;font-size:13.5px;font-weight:700;cursor:pointer;white-space:nowrap}
.wb-add.on{background:var(--green-soft);border-color:var(--green);color:var(--green)}
.wb-msg{color:var(--ink2);font-size:14px;padding:4px 22px 4px 0}
.wb-fab{position:fixed;right:14px;bottom:calc(18px + env(safe-area-inset-bottom, 0px));z-index:150;
  width:52px;height:52px;border-radius:50%;border:1.5px solid var(--blue);background:var(--card);color:var(--blue);
  font:inherit;font-size:15px;font-weight:800;cursor:pointer;box-shadow:var(--shadow-lg);opacity:.82;padding:0}
.wb-fab:hover,.wb-fab:focus-visible{opacity:1}
/* 刷题 / 做题页:缩小、半透明、贴到右下角最边上(选项和按钮离屏幕边都有卡片的外边距,基本压不到) */
.wb-fab.mini{width:34px;height:34px;font-size:11px;right:3px;bottom:calc(8px + env(safe-area-inset-bottom, 0px));opacity:.45;box-shadow:var(--shadow)}
.wb-sheet-head{display:flex;align-items:center;justify-content:space-between}
.wb-sheet-head h3{margin:0}
.wb-form{display:flex;gap:8px;margin-top:10px}
.wb-in{flex:1 1 auto;min-width:0;font:inherit;font-size:16px;padding:9px 11px;border-radius:10px;
  border:1.5px solid var(--line);background:var(--field, var(--card));color:var(--ink)}
.wb-in:focus{outline:none;border-color:var(--blue)}
.wb-res{margin-top:10px}
.wb-card{border:1px solid var(--line);border-radius:12px;padding:10px 12px}
.wb-sub{color:var(--ink3);font-size:12.5px;margin:14px 0 4px}
.wb-mini{display:flex;gap:10px;align-items:baseline;padding:4px 0;border-bottom:1px solid var(--line2);font-size:14px}
.wb-mini b{flex:0 0 auto}
.wb-mini-zh{color:var(--ink2);font-size:13px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wb-open{margin-top:14px}
.wb-hublink{display:block;text-align:right;font-size:13.5px;color:var(--ink2);margin:-4px 2px 10px}
.wb-tip{margin:10px 2px 0}
.wb-list{margin-top:14px;background:var(--card);border-radius:14px;box-shadow:var(--shadow);overflow:hidden}
.wb-row{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--line2)}
.wb-row:last-child{border-bottom:0}
.wb-row-main{flex:1 1 auto;min-width:0}
.wb-row-top{display:flex;align-items:baseline;flex-wrap:wrap;gap:0 8px}
.wb-row-top .wb-w{font-size:16px}
.wb-row-zh{color:var(--ink2);font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wb-row-meta{display:flex;gap:8px;align-items:center;margin-top:3px;font-size:12px;color:var(--ink3)}
.wb-tag{background:var(--line2);color:var(--ink2);border-radius:6px;padding:0 6px}
.wb-tag.sel{background:var(--blue-soft);color:var(--blue)}
.wb-tag.in{background:var(--orange-soft);color:var(--orange)}
.wb-rm{flex:0 0 auto;border:1px solid var(--line);background:var(--card);color:var(--ink3);border-radius:8px;
  font:inherit;font-size:12.5px;padding:4px 9px;cursor:pointer}
.wb-rm.sure{border-color:var(--red);color:var(--red)}

/* 复习词卡片底部的「移出学习计划」:故意做小、做淡,不和认识 / 不熟悉抢眼 */
.vdrop{display:block;margin:10px auto 0;padding:4px 8px;background:none;border:0;
  font-size:12px;color:var(--ink3);text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.vdrop:hover,.vdrop:focus-visible{color:var(--ink2)}

/* ---------- 多人版登录:登录页 / 名字菜单 / 账号管理(assets/auth.js;老模式一个都不出现) ----------
   颜色全走 token,深色模式靠 theme-dark.css 里重定义的 --card/--ink/--line/--field 自动跟上 */
.auth-locked #topbar,.auth-locked .sitefoot{visibility:hidden}
.auth-login{position:fixed;inset:0;z-index:400;background:var(--bg);display:flex;align-items:center;justify-content:center;padding:16px}
.auth-card{width:100%;max-width:360px;background:var(--card);border-radius:18px;padding:26px 20px 20px;box-shadow:var(--shadow-lg)}
.auth-brand{font-weight:800;font-size:22px;letter-spacing:.5px;color:var(--ink)}
.auth-sub{margin:2px 0 16px}
.auth-foot{margin:12px 0 0;text-align:center;font-size:13px}
.auth-input{display:block;width:100%;margin:0 0 10px;padding:11px 12px;font:inherit;font-size:16px;color:var(--ink);
  background:var(--field,#fff);border:1.5px solid var(--line);border-radius:11px;outline:none}
.auth-input:focus{border-color:var(--blue)}
select.auth-input{appearance:auto}
.auth-err{margin:0 0 10px;color:var(--red);font-size:14px}
.auth-field{display:block}
.auth-field-lbl{display:block;font-size:13.5px;color:var(--ink2);margin:0 0 4px}
.auth-form{margin-top:10px}
.auth-menu{position:fixed;z-index:320;min-width:170px;background:var(--card);border:1px solid var(--line);
  border-radius:12px;box-shadow:var(--shadow-lg);padding:6px}
.auth-menu-who{font-size:12.5px;color:var(--ink3);padding:4px 10px 6px;border-bottom:1px solid var(--line2);margin-bottom:4px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}
.auth-menu-item{display:block;width:100%;text-align:left;border:0;background:transparent;color:var(--ink);
  font:inherit;font-size:14.5px;padding:8px 10px;border-radius:8px;cursor:pointer}
.auth-menu-item:hover{background:var(--line2)}
.auth-menu-item.bad{color:var(--red)}
.auth-pw{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:22px;letter-spacing:2px;text-align:center;
  padding:14px 10px;margin:12px 0 4px;background:var(--line2);color:var(--ink);border-radius:11px;user-select:all;word-break:break-all}
.auth-h3{margin:0 0 10px;font-size:16px}
.auth-add .btn{margin-top:4px}
.auth-user.off .auth-user-top,.auth-user.off .auth-user-meta{opacity:.62}   /* 只淡化名字那两行,flags 编辑框照常可用 */
.auth-user-top{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 8px}
.auth-user-name{font-size:16px}
.auth-user-login{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:13.5px;color:var(--ink2)}
.auth-tag{font-size:12px;padding:1px 8px;border-radius:999px;background:var(--blue-soft);color:var(--blue)}
.auth-tag.bad{background:var(--red-soft);color:var(--red)}
.auth-user-meta{margin:4px 0 8px;font-size:13px}
.auth-user-acts{display:flex;flex-wrap:wrap;gap:8px}
.auth-flags{margin-top:6px}
.auth-flags-box{min-height:150px;color:var(--ink);background:var(--field,#fff)}

/* ---------- 每日打卡(assets/checkin.js,docs/SPEC-MULTIUSER.md §6;只在登录模式出现) ---------- */
.ck-home{display:flex;align-items:center;gap:12px;padding:14px 16px;color:var(--ink);text-decoration:none}
.ck-home-txt{flex:1 1 auto;min-width:0}
.ck-home-title{font-weight:700;font-size:15.5px}
.ck-home-sub{color:var(--ink2);font-size:13.5px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ck-home-btn{flex:0 0 auto}
.ck-home.done .ck-home-title{color:var(--green)}
.ck-go{flex:0 0 auto;font-size:22px;color:var(--ink3)}
.ck-badge{font-size:12px;font-weight:600;color:var(--blue);background:var(--blue-soft);border-radius:999px;padding:1px 8px;margin-left:8px;vertical-align:1px}
.ck-form{padding:14px}
.ck-ta{display:block;width:100%;min-height:130px;padding:10px 12px;font:inherit;font-size:16px;line-height:1.55;color:var(--ink);
  background:var(--field,#fff);border:1.5px solid var(--line);border-radius:11px;resize:vertical;outline:none}
.ck-ta:focus{border-color:var(--blue)}
.ck-ta.small{min-height:62px;font-size:15px}
.ck-count{text-align:right;font-size:12.5px;color:var(--ink3);margin:4px 2px 8px}
.ck-file-row{display:flex;align-items:center;flex-wrap:wrap;gap:6px 10px}
.ck-file-inp{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
.ck-file-btn{cursor:pointer}
.ck-file-note{font-size:12.5px;color:var(--ink3)}
.ck-prev{display:flex;flex-direction:column;gap:8px;margin:10px 0 4px}
.ck-prev-item{display:flex;align-items:center;gap:10px;padding:6px;border:1px solid var(--line);border-radius:11px}
.ck-prev-item img{width:52px;height:52px;object-fit:cover;border-radius:8px;flex:0 0 auto;background:var(--line2)}
.ck-prev-meta{flex:1 1 auto;min-width:0}
.ck-prev-name{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ck-prev-size{font-size:12.5px;color:var(--ink3)}
.ck-prev-x{flex:0 0 auto;width:36px;height:36px;border:0;border-radius:9px;background:var(--line2);color:var(--ink2);font-size:20px;cursor:pointer}
.ck-err{color:var(--red);font-size:14px;margin:8px 0}
.ck-submit{margin-top:10px;min-height:48px}
.ck-item-top{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px;margin-bottom:6px}
.ck-item-top .muted{font-size:13px}
.ck-text{white-space:pre-wrap;word-break:break-word;line-height:1.6;font-size:15px;color:var(--ink)}
.ck-files{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.ck-thumb{display:block;width:88px;height:88px;border-radius:10px;overflow:hidden;background:var(--line2);border:1px solid var(--line)}
.ck-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.ck-doc{display:flex;align-items:center;gap:8px;max-width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:10px;color:var(--ink);font-size:14px}
.ck-doc-ic{flex:0 0 auto;font-size:11px;font-weight:800;color:var(--red);background:var(--red-soft);border-radius:6px;padding:3px 6px;letter-spacing:.5px}
.ck-doc-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ck-doc-size{flex:0 0 auto;color:var(--ink3);font-size:12.5px}
.ck-reply{margin-top:12px;padding:10px 12px;border-radius:11px;background:var(--blue-soft)}
.ck-reply.none{background:var(--line2)}
.ck-reply-h{font-size:12.5px;color:var(--ink2);margin-bottom:3px}
.ck-reply.none .ck-reply-h{margin:0}
.ck-hist-list{display:flex;flex-direction:column;gap:8px}
.ck-hist-line{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:11px 12px;border:0;border-radius:12px;
  background:var(--card);box-shadow:var(--shadow);color:var(--ink);font:inherit;font-size:14px;cursor:pointer}
.ck-hist-day{flex:0 0 auto;font-variant-numeric:tabular-nums;color:var(--ink2);font-size:13px}
.ck-hist-sum{flex:1 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ck-hist-tags{flex:0 0 auto;display:flex;gap:4px}
.ck-tag{font-size:11.5px;color:var(--ink2);background:var(--line2);border-radius:999px;padding:1px 7px;white-space:nowrap}
.ck-tag.reply{color:var(--blue);background:var(--blue-soft)}
.ck-hist-det{margin:6px 0 4px}
.ck-lightbox{position:fixed;inset:0;z-index:420;background:rgba(0,0,0,.86);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:16px;cursor:zoom-out}
.ck-lightbox img{max-width:100%;max-height:calc(100% - 40px);object-fit:contain;border-radius:6px;background:#fff}
.ck-lightbox-name{color:#eee;font-size:13px;margin-top:10px;text-align:center;word-break:break-all}
.ck-tabs{display:flex;gap:4px;background:var(--line2);border-radius:12px;padding:3px;margin:0 0 14px}
.ck-tabs a{flex:1 1 0;text-align:center;padding:8px 4px;border-radius:9px;color:var(--ink2);font-size:14.5px}
.ck-tabs a.on{background:var(--card);color:var(--ink);font-weight:700;box-shadow:var(--shadow)}
.ck-daynav{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px}
.ck-date{flex:1 1 140px;min-width:0;height:36px;padding:0 10px;font:inherit;font-size:15px;color:var(--ink);
  background:var(--field,#fff);border:1.5px solid var(--line);border-radius:9px}
.ck-missing{padding:12px 14px}
.ck-missing-h{font-size:13px;color:var(--ink2);margin-bottom:8px}
.ck-chips{display:flex;flex-wrap:wrap;gap:6px}
.ck-chip{font-size:13.5px;padding:4px 10px;border-radius:999px;background:var(--orange-soft);color:var(--orange)}
.ck-who{font-weight:700;font-size:15.5px;color:var(--ink)}
.ck-rbox{margin-top:12px}
.ck-rrow{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin-top:6px}
.ck-rstate{font-size:12.5px;margin-right:auto}
.ck-plan{margin-top:10px;padding:10px 12px;border:1px dashed var(--line);border-radius:12px}
.ck-plan-row{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.ck-plan-lbl{flex:0 0 42%;font-size:13.5px;color:var(--ink2)}
.ck-plan-inp{flex:1 1 auto;min-width:0;margin:0;padding:8px 10px;font-size:15px}
.ck-plan-note{font-size:12.5px;margin:6px 0 0}
