/* 知识卡片刷题站 — 手写 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}
